문제
구현 방법
리스트로 구현하였습니다.
// 입력
랭킹 리스트가 주어지고 리스트에 주어진 값을 넣을 때 랭킹을 함께 넣어주었습니다.
랭크 값을 넣어줄 때 바로 직전에 입력했던 점수랑 일치하면 전 값 랭크를 그래도 넣어주었습니다.
직전 값이랑 일치하지 않는다면 랭킹 리스트 점수는 내림차순이고 위에서부터 현재까지의 개수가 랭킹이기 때문에 현재 인덱스를 그대로 랭킹으로 넣어주었습니다.
입력이 끝난 후 현재 리스트에 있는 점수를 탐색해주었습니다.
// 탐색
점수의 개수만큼 입력을 해줘야하지만 현재 리스트에 있는 점수보다 크면 밀어낼 수 있으므로 리스트 사이즈와 점수의 개수가 같고 마지막 인덱스에 있는 점수 (제일 낮은 점수) 보다 새로운 값이 작다면 -1을 출력해주었습니다.
새로운 값이 현재 탐색하고 있는 점수보다 크거나 같으면 해당 점수의 랭킹을 출력해주었습니다.
현재 탐색하고 있는 점수보다 작고 주어진 점수의 개수보다 리스트 사이즈가 적으면 마지막에 입력된 인덱스의 랭킹 값 + 1을 출력해주었습니다.
하지만.. 틀렸습니다! 아무리 생각해도 로직에는 잘못된 부분이 없는거 같아서 문제를 다시 살펴보니 둘째 줄은 N이 0보다 큰 경우에만 주어졌습니다^^.. 랭킹 리스트에 아예 점수들이 없는 경우도 있었던거죠.. 그래서 조건을 추가해서 N==0이면 무조건 1등이니 1을 출력해주었습니다.
구현 코드
package BOJ.Silver;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class B1205_등수구하기 {
static class rank {
long grade;
int ranking;
public rank(long grade, int ranking) {
super();
this.grade = grade;
this.ranking = ranking;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long N = Integer.parseInt(st.nextToken());
long New = Integer.parseInt(st.nextToken());
long P = Integer.parseInt(st.nextToken());
List<rank> list = new ArrayList<>();
if (N==0) System.out.println(1);
else if (N>0){
st = new StringTokenizer(br.readLine());
for (int i=0;i<N;i++) {
long g = Long.parseLong(st.nextToken());
if (i!=0 && g==list.get(i-1).grade) list.add(new rank(g, list.get(i-1).ranking));
else list.add(new rank(g, i+1));
}
if(list.get(list.size()-1).grade>=New && list.size()==P) System.out.println(-1);
else {
for(int i=0;i<list.size();i++) {
if (list.get(i).grade<=New) {
System.out.println(list.get(i).ranking);
return;
}
if (i==list.size()-1) System.out.println(list.size()+1);
}
}
}
}
}
'백준' 카테고리의 다른 글
백준 1764번 : 듣보잡 (0) | 2021.03.07 |
---|---|
백준 2589번 : 보물섬 (0) | 2021.03.07 |
백준 1476번 : 날짜 계산 (0) | 2021.03.06 |
백준 1475번 : 방 번호 (0) | 2021.03.06 |
백준 1292번 : 쉽게 푸는 문제 (0) | 2021.03.06 |