알고리즘/백준

[백준] 1546 - 자바

삼록이 2025. 7. 16. 11:23

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

 

슈도코드?

  • 시험과목 수 n을 입력 받는다.
  • 성적을 int형 배열에 담아야하니, String으로 받아 StringTokenizer로 각각 점수를 분리해 담는다
  • for문을 돌리면서 배열에 각각 담으면서 동시에 최고점수를 파악한다.
  • 최고점수를 파악하기 위해 for문 바깥에 int형 변수를 하나두고 for문 내부에서 최고점수가 나올때마다 변수값을 갱신해준다. 
  • 다시 for문을 돌려 각 점수에*최고점수 / 100 한 값을 누적한다.
  • 마지막으로 n으로 나눠 평균을 낸다.

 


이번 풀이

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] originalScores = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        int max =0;
        for(int i=0; i<n; i++){
            originalScores[i] = Integer.parseInt(st.nextToken());
            if(max<originalScores[i]){
                max=originalScores[i];
            }
        }
        double fakeScoresSum =0;
        for(int s : originalScores){
           fakeScoresSum+= ((double) s /max) *100;
        }

        double answer = fakeScoresSum / n;
        System.out.println(answer);
    }
}

백준에 남아있던 예전에 풀었던 풀이1... 이게 더 간결해보인다.

여기서 for문을 한번만 써도 되는 이유는 위에서는 for문을 한 번 더 돌려 각 점수를 가짜점수를 변환하였기 때문이다. 그리고 나서 가짜 점수들을 다 더하고 갯수로 나눠 평균을 구했다.

그런데 여기서는 가짜점수로 변환하는 과정을 한번에 처리했는데 이는,

점수a / 최댓값 *100 + 점수b/최댓값 *100 + 점수c/최댓값*100 은 사실 (a+b+c) / 최댓값*100과 같기 때문이다.

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        int max = -1;
        double sum =0.0;

        for(int i =0; i<n; i++){
            int a = Integer.parseInt(st.nextToken());
            sum+=a;
            if(a>max){
                max =a;
            }

        }
        System.out.println((sum / max) * 100 / n);
    }
}

 

예전에 풀이2

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(arr); 
        double drr[] = new double[n];
        double sum =0;

        for(int j =0; j<n; j++){
            drr[j] =((double)arr[j] / arr[n-1]) * 100;
            sum += drr[j];
        }

        System.out.println(sum / n);
    }
}