백준 등수 구하기

KIMYEONGJUN·2024년 12월 8일
0
post-thumbnail

문제

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

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다.
P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다.
그리고 모든 점수는 2,000,000,000보다 작거나 같은 자연수 또는 0이다.
둘째 줄에는 현재 랭킹 리스트에 있는 점수가 비오름차순으로 주어진다.
둘째 줄은 N이 0보다 큰 경우에만 주어진다.

첫째 줄에 문제의 정답을 출력한다.

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

첫 번째 줄에서 현재 점수의 개수 N, 새로운 점수 newScore, 랭킹 리스트의 최대 점수 개수 P를 읽는다.
두 번째 줄에서 현재 랭킹 리스트의 점수를 읽는다.
랭킹 계산:
랭킹 리스트가 비어있거나 (N < P): 새로운 점수를 추가할 수 있으며, 랭킹을 계산한다.
랭킹 리스트가 꽉 차있을 때: 새로운 점수가 가장 낮은 점수보다 높아야 추가할 수 있습니다. 그 경우에만 랭킹을 계산한다.
계산된 랭킹을 출력한다.
만약 새로운 점수가 랭킹 리스트에 추가될 수 없다면 -1을 출력한다.

코드로 구현

package baekjoon.baekjoon_25;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 백준 1205번 문제
public class Main861 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken()); // 현재 점수의 개수 N
        int newScore = Integer.parseInt(st.nextToken()); // 새로운 점수 newScore
        int P = Integer.parseInt(st.nextToken()); // 랭킹 리스트의 최대 점수 개수 P

        int[] scores = new int[N]; // 현재 점수를 저장할 배열
        if(N > 0) {
            st = new StringTokenizer(br.readLine()); // 점수 입력을 위한 토크나이저 초기화
            for(int i = 0; i < N; i++) {
                scores[i] = Integer.parseInt(st.nextToken()); // 점수를 배열에 저장
            }
        }

        // 새로운 점수가 랭킹 리스트에 추가될 수 있는지 확인
        if(N < P) { // 리스트가 꽉 차지 않았으면
            // 리스트가 꽉 차지 않았으면 새로운 점수를 추가할 수 있음
            int rank = 1; // 기본 등수는 1
            for(int i = 0; i < N; i++) {
                if(scores[i] > newScore) { // 현재 점수가 새로운 점수보다 높으면
                    rank++; // 등수 증가
                } else if(scores[i] == newScore) { // 같은 점수가 있을 경우
                    // 같은 점수가 있을 경우 가장 작은 등수를 유지
                    System.out.println(rank); // 해당 등수 출력
                    return; // 종료
                }
            }
            System.out.println(rank); // 최종 등수 출력
        } else {
            // 리스트가 꽉 차있을 때
            if(newScore <= scores[N - 1]) { // 새로운 점수가 가장 낮은 점수보다 낮거나 같으면
                System.out.println(-1); // 추가할 수 없으므로 -1 출력
            } else { // 새로운 점수가 더 좋을 경우
                // 새로운 점수가 더 좋을 경우에만 리스트에 추가
                int rank = 1; // 기본 등수는 1
                for(int i = 0; i < N; i++) {
                    if(scores[i] > newScore) { // 현재 점수가 새로운 점수보다 높으면
                        rank++; // 등수 증가
                    }
                }
                System.out.println(rank); // 최종 등수 출력
            }
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글