백준 평균 (99클럽 코딩테스트 31일차 TIL)

KIMYEONGJUN·2024년 4월 28일
0
post-thumbnail

목표

전에 풀어본 문제여서 이번에는 그 당시에 왜 이렇게 코드를 작성했는지 다시 분석해보기로했다. 다시 해보면서 코딩테스트를 공부하는게 목표이다.

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

내가 이 문제를 보고 생각해본 부분

과목의 개수를 입력받고
과목별 점수를 저장하는 배열을 만들고 
과목별 점수 입력받고
최대값 찾고
점수 조작후 평균값 계산하고 
평균값 출력해주고

코드로 구현

package baekjoon.baekjoon_0;

import java.util.Scanner;

// 백준 1546번 문제
public class Main58 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt(); // 과목의 개수

        int[] scores = new int[N]; // 과목별 점수를 저장하는 배열

        // 과목별 점수 입력받기
        for (int i = 0; i < N; i++) {
            scores[i] = sc.nextInt();
        }

        // 최댓값 찾기
        int maxScore = scores[0];
        for (int i = 1; i < N; i++) {
            if (scores[i] > maxScore) {
                maxScore = scores[i];
            }
        }

        // 점수 조작 후 평균 계산
        double sum = 0.0;
        for (int i = 0; i < N; i++) {
            sum += (double) scores[i] / maxScore * 100;
        }
        double average = sum / N;

        System.out.println(average);
        sc.close();
    }
}

시간복잡도 O(N)

장점
입력 데이터 규모에 비례하는 시간복잡도를 가지기 때문에 데이터 규모가 크지 않다면 효율적으로 동작한다.
코드 로직이 단순하고 이해하기 쉽다.

단점
데이터 규모가 커지면 선형적으로 수행 시간이 늘어나 효율성이 떨어진다.
최악의 경우 시간복잡도가 O(N^2)인 알고리즘과 비교했을 때 상대적으로 비효율적이다.

마무리

이 문제는 11달전에 내 스스로 풀어본 문제였다. 오늘 코드를 다시 보면서 그때 내가 어떻게 코드를 작성했고 어떤 생각으로 이 문제에 접근을 했는지 다시 공부할 수 있는 계기가된것같다. 이번에는 Scanner로 풀었지만 다음에 한번더 문제를 풀어본다면 BufferedReader를 사용해서 문제를 풀어보고싶다.

profile
Junior backend developer

0개의 댓글