새소식

Algorithm/BOJ

(JAVA) [BOJ]백준 1205번, 등수 구하기

  • -
728x90

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

1205번: 등수 구하기

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보

www.acmicpc.net

1205, 등수 구하기

[ 난이도 : 실버 4 ]
이번 문제도 간단한 구현문제이다.
 
예시 2, 3번이 자꾸 이상한 결과가 나와서 잘 읽어보니 '점수가 랭킹 리스트에 올라갈 수 없을 정도로 낮다면 -1 을 출력한다'라는 내용이 있다.이 부분을 주의해야 한다.점수의 개수와 랭킹 리스트에 올라갈 갯수가 동일할 때, 가장 낮은 점수가 새로 넣을 점수보다 낮거나 같다면 -1을 출력해주면 된다는 의미이다.
 

Process

input

: 점수의 개수, 새로 넣을 점수, 랭킹 리스트에 올라갈 갯수를 차례로 받아주고 
점수들로 배열을 생성해 준다.

static int N, tScore, P;
static Integer[] score;

static void input() 
{
    N = scan.nextInt();
    tScore = scan.nextInt(); 
    P = scan.nextInt();

    score = new Integer[N];
    for(int i=0; i<N; i++) score[i] = scan.nextInt();
}

 

구현

: 우선 점수를 내림차순으로 정렬해준다.
그리고 위에서 말한 예외처리를 진행해 주고 점수를 비교한다.
새로 넣을 점수가 기존의 점수들이 낮을 때 계속 rank 를 증가시킨다.
이는 최종적으로 새로 넣을 점수의 등수를 출력해야 하기 때문에 이전에 점수가 같은 지와 같은
사항들을 고려하지 않아도 된다.

static void pro() 
{  
    Arrays.sort(score, Collections.reverseOrder());

    // 점수와 랭크의 카운트가 같을 때, 새로 넣을 점수가 꼴지의 점수라면
    if(N == P && tScore <= score[score.length-1])
    {
        System.out.println(-1);
    }
    else
    {
        int rank = 1;
        for(int i=0; i<score.length; i++)
        {
            // 새로 넣을 점수가 기존의 점수보다 작을 경우 랭크를 증가
            if(tScore<score[i])
                rank++;
            else
                break;
        }

        System.out.println(rank);
    }
}

 

전체 코드

: 전체 코드는 아래와 같다.

static int N, tScore, P;
static Integer[] score;

static void input() 
{
    N = scan.nextInt();
    tScore = scan.nextInt(); 
    P = scan.nextInt();

    score = new Integer[N];
    for(int i=0; i<N; i++) score[i] = scan.nextInt();
}

static void pro() 
{  
    Arrays.sort(score, Collections.reverseOrder());

    // 점수와 랭크의 카운트가 같을 때, 새로 넣을 점수가 꼴지의 점수라면
    if(N == P && tScore <= score[score.length-1])
    {
        System.out.println(-1);
    }
    else
    {
        int rank = 1;
        for(int i=0; i<score.length; i++)
        {
            // 새로 넣을 점수가 기존의 점수보다 작을 경우 랭크를 증가
            if(tScore<score[i])
                rank++;
            else
                break;
        }

        System.out.println(rank);
    }
}

public static void main(String[] args) 
{
   input();
   pro();
}

 
 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.