728x90

예제 입력을 보면 5번 돌아 가게 되어있습니다.

 

먼저 입력값을 정할수 있게 스캐너를 받습니다. 

int[]a 라는 배열에 스캐너객체를 넣어줍니다.

 

중첩반복문을 이용하여서 

 

평균값을 구한후 

c배열의 값들을 비교를 합니다.

비교하여서 평균값보다 낮으면 count++로 추가해줍니다.

for문을 다 돌린후에 count값과 c배열의 길이의 수를 나누어 줍니다.

나눌때 값은 double형으로 변환시켜주는것이 좋습니다. 

그리고 printf는 스트링을 받지 않기때문에 "%.3f%%\n을 선언하여줍니다."

그러면 평균보다 낮은사람의 퍼센트를 구할수 있습니다.

 

 

 

728x90

'문제풀이 > 백준' 카테고리의 다른 글

1157번 백준 자바 문제 풀이  (0) 2022.04.19
백준 2675번 문자열 문제  (0) 2022.04.04
8958번 백준 자바 문제 풀이  (0) 2022.03.14
백준 1546번 자바  (0) 2022.03.09
백준 10818 최대 최소 값 구하기  (0) 2022.01.28
728x90
안녕하세요 오늘은 백준 문제풀이 8958번 풀어보도록하겠습니다. 

어려운 문제가 아니니깐 다들 잘해냈을거라 생각합니다.(저는....... 멍청댕청해서 오래걸렸습니다....쿨럭..;;)

 

 

 

 

가장 먼저 스캐너로 배열에 각각 원소에 문자열을 저장해줍니다! 

 

 

그리고 count는 몇번 연속했는지 값을 저장해줄겁니다.

sum 은 누적 합산 값을 나타내는 변수로 선언해 줍니다. 

 

for문에 문자열을 String에 길이만큼 반복할때 문자열을 split으로 하나하나 쪼개어 주었습니다

그 후 

해당 원소의 문자열을 charAt이 아닌 문자열의 같은값(검사)을 구해주는 

eqauls.로 O값을 구하였습니다.

 

O가 나오면 count변수에 1씩 증가 시키고 X가 나올경우 count를 0으로 초기화 시켜주었습니다(저는 초기화시키는방법을 몰라서 조금 오래걸렸습니다...... 지금 생각하면 너무 허무하네요)

 

그렇게 나온값을 sum에 count값을 누적하여 더해준뒤 배열 원소의 문자열을 다 검사하고 나면 sum을 출력해줍니다.

 

  O O O X X X O O O
count 1 1 1 0 0 0 1 1 1
sum 1 2 3 0 0 0 1 2 3

이런식으로 나옵니다. 

 

 

stringbuffer 같은것들로 더 빠르게 실행 시킬수 있지만 Stringbuffer의 정의를 다 알고  제가 남들에게 강의할 수준이 되면 올리겠습니다. ^^ 

 

이해가 되셨나요??? 좀더 쉽게 설명 해드리고 싶지만 ㅎㅎ 궁금하신점 잇으시면 댓글에 남겨주세요;

 

 

제가 책을 보면서 헷갈리게 했던 부분이 있어서 공유를 해봅니다. 

 

누적 도수분포표 만들기에서 할수있습니다.

 

for(int i =0; i<=arr.length; i++)
f[i]+=f[i-1];

이렇게 되면 값은

이런식으로 나오게 됩니다. 혹시나 참고하시게 될수도 있으니 올려둡니다. 

 

 

그럼 이만!!

 

 

 

728x90

'문제풀이 > 백준' 카테고리의 다른 글

백준 2675번 문자열 문제  (0) 2022.04.04
백준 4344 평균은 넘겠지?  (0) 2022.03.17
백준 1546번 자바  (0) 2022.03.09
백준 10818 최대 최소 값 구하기  (0) 2022.01.28
백준 2884 번 자바 문제 풀이- 알람 시계  (0) 2022.01.27
728x90

1차원 배열에 관련된 문제입니다.

 

잘 생각하시면 어렵지 않은 문제입니다. 

 

제일 기본적인 방법으로 풀어보도록 하겠습니다. 

 

먼저 배열의 모든 원소를 입력받아 저장하고 arrays.sort() 로 정렬합니다(오름차순 순으로 정렬이 됩니다.)

그렇다면 배열의 마지막길이는 배열에 가장 큰 값이라는것을 알수있습니다. 

 

또한 주의해야할 점은 연산할때 반드시 초소한자료형1개이상은 double형으로 써야합니다. 그러면 자동형변환이 되면서 자료형이 큰 쪽으로 (int에서 double)변환이 되기 때문입니다. 

여기서는 sum을 double형으로 해주었습니다. 

Scanner sc = new SCanner(System.in);

int a = sc.nextInt();
double num[] = new double[a];//배열의 길이를 정해줄수 있습니다. 


for( int i = 0; i<num.length; i++){
	num[i]=sc.nextInt(); //num[i]에 어떤 값을이 들어갈지 적어줄수 있는 구문입니다.
    
  	}
  double sum =0;
  
  Arrays.sort(num); //arrays.sort는 숫자의 크기대로 정렬을 해줍니다. 
  
  for(int i =0; i<num.length; i++){
  sum+= ((num[i]/num[num.length-1]) *100); //sum 에 축적될 값을 구해주는 구문입니다. 
  	}
  System.out.printLn(sum/num.length);
  	}
  }

 

 

728x90
728x90

 

https://www.acmicpc.net/problem/10818

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

 

문제가 기초적이면서도 초보자들에겐 버벅거릴수 있는 문제입니다. 

 

 

 

배열을 사용할때 배열값은 Scanner받아서 지정해주면되는데 배열안에 숫자는 어떻게 넣을까?

import java.util.Scanner;

public class Main11 {

	public static void main(String[] args) {

		Scanner sc=new Scanner(System.in);
		int a=sc.nextInt();

		int[] num=new int[a];
		
		for(int i=0; i<num.length; i++) {
        
        }

 

이상황에서 a값을 배열안에 넣어주면 배열의 길이는 쉽게 정하실수있습니다. 

 

이제 배열안에 들어갈 값은 어떻게 정해야할까요?

 

쉽습니다. 

int i를 배열에다가 선언하고 sc로 받아주면됩니다. 

num[i]=sc.nextInt();

다시 문제로 돌아가서 답을 드리자면......

import java.util.Arrays;
import java.util.Scanner;

public class Main11 {

	public static void main(String[] args) {

		Scanner sc=new Scanner(System.in);
		int a=sc.nextInt();

		int[] num=new int[a];
		
		for(int i=0; i<num.length; i++) {
			num[i]=sc.nextInt();

		}
		Arrays.sort(num);
		
		System.out.println(num[0]+ " "+ num[a-1]);
	}
}

배열안에 넣을값까지 식을 세웠다면 그 숫자들중에 최소값과 최대값을 알아볼 차례입니다.

 

배열안의 뒤죽박죽으로 되어있는 숫자를 먼저 Arrays.sort();로 정렬해줍니다.

 

 Arrays.sort는 배열안에 숫자를 낮은순으로 정렬해주는데 쓰입니다.

 

낮은순으로 정렬해준 상태에서 

num[0]<-즉 배열의 첫번째를 꺼내오고 마지막 최대값으로 num[a-1]을 선언해줍니다. 

 

nextInt(a)가 반환하는것은 0부터 a-1까지의 난수입니다.  

 

 

 

값을 추출해보겠습니다.

이해가 가시나요?

 

 

 

728x90

'문제풀이 > 백준' 카테고리의 다른 글

8958번 백준 자바 문제 풀이  (0) 2022.03.14
백준 1546번 자바  (0) 2022.03.09
백준 2884 번 자바 문제 풀이- 알람 시계  (0) 2022.01.27
정수 배열 최대값  (0) 2022.01.11
SQL - 변환 함수  (0) 2021.12.28
728x90

https://www.acmicpc.net/problem/2884

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net


 

 

 

 

 

 


문제에서 요구한것은 원래 시간보다 45분 앞선시간을 원합니다.

그렇다면 입력받은 값(분)을 기준으로 45분 작으면 H(시간)에 -1을 해주고 45분 보다 크다면 -45를 해줍니다.

 

여기서 문제점은 분(M)이 45분 보다 작을경우 H에 -1을 해줬는데 여기서 값이 0보다 작은수가 나올수 있으므로 

H를 23으로 수정해주어야 합니다.

 

M(분)은 60분이기 떄문에 입력값이 45보다 작아 H에서 -1을 해줄 떄 M은 60-(45-M)이 됩니다.  

 


성공 코드입니다.

728x90

'문제풀이 > 백준' 카테고리의 다른 글

백준 1546번 자바  (0) 2022.03.09
백준 10818 최대 최소 값 구하기  (0) 2022.01.28
정수 배열 최대값  (0) 2022.01.11
SQL - 변환 함수  (0) 2021.12.28
정규 표현 식 (문제 풀이 -1  (0) 2021.12.26

+ Recent posts