예시 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();
}