문제 8979 (구현, 정렬)
: 규칙을 따라 어느 나라가 더 잘했는지 결정한다.
- 금메달 수가 더 많은 나라
- 금메달 수가 같으면, 은메달 수가 더 많은 나라
- 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라
: 만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다
예) 1등이 1번 국가고 2,3번 국가가 동점, 4번 국가 최하위라면 등수는 1-2-2-4(국가순) 이다
[입력]
: 입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000), 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)
: 이후 N개의 각 줄에는 차례대로 각 국가를 나타내는 정수와 이 국가가 얻은 금, 은, 동메달의 수
(전체 메달 수의 총합은 1,000,000 이하)
[출력]
: 입력받은 국가 K의 등수
[문제접근]
1. 정렬 이용하자
- 배열 정렬은 Arrays.sort!
- 우리는 값이 큰 게 1등이니 내림차순!
Arrays.sort(intArr, (a, b) ->
a - b // 오름차순
);
Arrays.sort(intArr, (a, b) ->
b - a // 내림차순
);
compare(x, y)는 x-y 라고 생각하고 풀 것
- 람다식 이용하여 조건 달아주기
Arrays.sort(arr, (a, b) -> {
if (a[0] != b[0]) return Integer.compare(b[0], a[0]);
if (a[1] != b[1]) return Integer.compare(b[1], a[1]);
return Integer.compare(b[2], a[2]);
});
2. 정렬한 것과 별개로 마지막엔 메달 개수를 비교하고 같으면 이전 국가와 동일한 등수 출력
- 메달 수 같으면 j+1 (+1을 하는 이유는 인덱스가 0부터 시작하기 때문)
- 메달 수 다르면 rank++
[코드]
import java.io.*;
import java.util.*;
public class Main{
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());
int K = Integer.parseInt(st.nextToken());
int arr[][] = new int[N][4];
for(int i=0;i<N;i++){
st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
arr[i][2] = Integer.parseInt(st.nextToken());
arr[i][3] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, (a, b) -> {
if (a[1] != b[1]) return Integer.compare(b[1], a[1]);
if (a[2] != b[2]) return Integer.compare(b[2], a[2]);
return Integer.compare(b[3], a[3]);
});
int rank = 1;
for (int i = 0; i < N; i++) {
if (arr[i][0] == K) {
for (int j = 0; j < i; j++) {
if (arr[i][1] == arr[j][1] && arr[i][2] == arr[j][2] && arr[i][3] == arr[j][3]) {
rank = j + 1;
break;
}
}
System.out.println(rank);
return;
}
rank++;
}
}
}
이제 풀어보러 갈께요 :)
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *
'Baekjoon > [7] 기타' 카테고리의 다른 글
[백준] 1931번 회의실 배정 JAVA (자바) 풀이 (0) | 2024.07.17 |
---|---|
[백준] 15661번 링크와 스타트 JAVA (자바) 풀이 (0) | 2024.02.26 |
[백준] 3758번 KCPC JAVA (자바) 풀이 (1) | 2024.02.13 |
[백준] 12865번 평범한 배낭 JAVA (자바) 풀이 (0) | 2024.02.05 |
[백준] 20310번 타노스 JAVA (자바) 풀이 (1) | 2024.01.30 |