[자바] 백준 1546 : 평균

11784 단어 자바자바

문제


풀이

  1. 계산에는 오차범위가 있을 수 있기 때문에 연산할 때 최소한 자료형 1개 이상은 double형으로 쓰는게 좋다한다.
    : 여기서 double 형으로 잡아준 것은 아래와 같다.
// 점수를 받아줄 배열
double scores[] = new double[num];
// 점수에서 가장 큰 값을 찾아 담아줄 변수
double maxScore = Arrays.stream(scores).max().getAsDouble();
// 점수들을 계산해 += 해줄 sum
double sum = 0;
  1. StringTokenizer 사용
    : BufferedReader는 한 줄 단위로 입력을 받기 때문에
    한 줄에 구분자를 경계로 여러 값이 입력된 경우라면
    파싱이 필수이고 그때 StringTokenizer 을 사용한다.
// 사용한다고 객체 생성하고
StringTokenizer st = null;
// 공백을 기준으로 문자열을 쪼개 넣을것이라고 작성한 것이다.
st = new StringTokenizer(br.readLine(), " ");
  1. 가장 큰 값을 찾는 방법
    : max 변수를 설정해 for문을 돌리며 값을 일일이 비교하는 방법도 있고
    : 정렬을 해주고, 가장 끝 인덱스에 있는 수를 가져오는 방법도 있으며
    : 배열을 스트림 형태로 만들어 준 뒤에 max(), min() 값으로 최대 최소 값을 찾은 뒤 getAsInt() 를 사용해 int 타입으로 꺼내올 수도 있다.
// 방법 1
int max = -999;
for(int i=0; i<scores.length; i++) {
	if (max < 비교값) {
    		max = 비교값;
        } else {
        	continue;
        }
}

// 방법 2
Arrays.sort(scores);
double maxScore = scores[scores.length-1];

// 방법 3
double maxScore = Arrays.stream(scores).max().getAsDouble();

실제 제출 코드에서는 3번째 방법을 사용했다.


제출코드

public class Home {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		
		int num = Integer.parseInt(br.readLine());
		double scores[] = new double[num];

		// 한 줄에 구분자를 경계로 여러 값을 입력할 것이기 때문에 
		// 공란을 경계로 값을 입력 받을 것이다
		// StringTokenizer 객체 선언
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		for(int i=0; i<scores.length; i++) {
			// 배열에 직접 버퍼리더를 불러와 넣는것이 아닌
			// 토큰을 불러와서 값을 넣어준다.
			scores[i] = Double.parseDouble(st.nextToken());
		}
		
		double maxScore = Arrays.stream(scores).max().getAsDouble();
		double sum = 0;
		for(int i=0; i<scores.length; i++) {
			sum += ((scores[i]/maxScore)*100);
		}
 	}
}

좋은 웹페이지 즐겨찾기