문제
1205번: 등수 구하기
첫째 줄에 N, 송유진의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000
www.acmicpc.net
구현 방법
리스트로 구현하였습니다.
// 입력
랭킹 리스트가 주어지고 리스트에 주어진 값을 넣을 때 랭킹을 함께 넣어주었습니다.
랭크 값을 넣어줄 때 바로 직전에 입력했던 점수랑 일치하면 전 값 랭크를 그래도 넣어주었습니다.
직전 값이랑 일치하지 않는다면 랭킹 리스트 점수는 내림차순이고 위에서부터 현재까지의 개수가 랭킹이기 때문에 현재 인덱스를 그대로 랭킹으로 넣어주었습니다.
입력이 끝난 후 현재 리스트에 있는 점수를 탐색해주었습니다.
// 탐색
점수의 개수만큼 입력을 해줘야하지만 현재 리스트에 있는 점수보다 크면 밀어낼 수 있으므로 리스트 사이즈와 점수의 개수가 같고 마지막 인덱스에 있는 점수 (제일 낮은 점수) 보다 새로운 값이 작다면 -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 |