티스토리 뷰

문제 풀러가기✍🏻

 


서론

하도 통과가 안 되가지고 뭐가 문제지 엄청 고민했는데, 출력 방법을 몰랐어서 계속 틀린 것이었다.

예전에 정보처리기사 실기 준비할 때, C알고리즘 문제에서 printf로 문자열 형식을 정하여 출력하는 방법을 배웠었다. JAVA에서도 그 방법을 사용할 수 있다. 그것을 알아야 한다.

 

| 출처 | 나를위한노트

| 출처 | hello jiniworld

문제

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

 

출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

시행착오(Trial&Error)

풀이(Solution)

bw.write()를 호출할 때 String.format메서드를 사용하면 System.out.printf("/*문자열 형식*/", 값);과 같은 방식으로 출력할 수 있다.즉, 이 문제는 두 가지 방법으로 해결할 수 있다.

코드

1.  System.out.printf()사용

import java.io.*;
import java.util.StringTokenizer;

class Main {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int tNum = Integer.parseInt(br.readLine());
            for(int i = 0; i < tNum; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine(), " ");    
                int sNum = Integer.parseInt(st.nextToken());
                int[] arr = new int[sNum];  // 학생들의 점수를 저장하는 배열
                int sum = 0;        // 학생들의 점수 총합
                float average = 0;  // 평균
                int cnt = 0;        // 평균을 넘는 점수를 받은 학생 수
                for(int j = 0; j < sNum; j++) {
                    arr[j] = Integer.parseInt(st.nextToken());
                    sum += arr[j];
                }
                average = sum / (float)sNum;
                for(int k = 0; k < sNum; k++) {
                    if(average < arr[k]) {
                            cnt++;
                    }
                }
                float result = 0;
                result = cnt / (float)sNum * 100 * 1000;
                result = Math.round(result);
                System.out.printf("%.3f%%\n", result / 1000);
            }
            br.close();
        } catch(IOException e) {}
    }
}

2. bw.write(String.fomat()) 사용

import java.io.*;
import java.util.StringTokenizer;

class Main {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            int tNum = Integer.parseInt(br.readLine());
            for(int i = 0; i < tNum; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine(), " ");    
                int sNum = Integer.parseInt(st.nextToken());
                int[] arr = new int[sNum];  // 학생들의 점수를 저장하는 배열
                int sum = 0;        // 학생들의 점수 총합
                float average = 0;  // 평균
                int cnt = 0;        // 평균을 넘는 점수를 받은 학생 수
                for(int j = 0; j < sNum; j++) {
                    arr[j] = Integer.parseInt(st.nextToken());
                    sum += arr[j];
                }
                average = sum / (float)sNum;
                for(int k = 0; k < sNum; k++) {
                    if(average < arr[k]) {
                            cnt++;
                    }
                }
                float result = 0;
                result = cnt / (float)sNum * 100;
                bw.write(String.format("%.3f", result) + "%\n");  // Math.random() 안 써도 됨
            }
            br.close();
            bw.flush();
            bw.close();
        } catch(IOException e) {}
    }
}
댓글
공지사항