문제
- 키와 몸무게가 모두 다른 사람보다 큰 경우 "덩치가 크다" 라고 하며 등수가 다르게 매겨짐.
- N명의 몸무게와 키가 주어질 때, "덩치가 큰" 순서대로 덩치 등수를 메겨 출력하는 문제.
아이디어
- 중요한 사실은 덩치 등수는 나보다 덩치가 큰 사람이 몇 명 있는가를 표시하는 것으로 실제 등수를 매기는 방식과는 차이가 있다.
- 각 사람의 덩치를 다른 모든 요소들과 비교해 보다 덩치가 큰 사람이 몇 명인지 체크하여 해답을 구한다.
- 순위를 저장하는 1차원 배열을 1로 초기화하고, 2중 for 문을 통해 덩치가 큰 사람을 발견할 때마다 +1을 해 최종 순위를 구한다.
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
// (몸무게, 키) 를 저장할 배열 선언
// 1차원 배열만 이용해 각각 0번, 1번 인덱스에 몸무게, 키 한 쌍의 식으로 저장
int[] info = new int[N*2];
// 순위를 계산할 1차원 배열 선언
int[] rank = new int[N];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
// (0,1), (2,3), ... , (i*2,i*2+1) 인덱스에 각각 저장
info[i*2] = Integer.parseInt(st.nextToken());
info[i*2+1] = Integer.parseInt(st.nextToken());
}
// 각 요소의 순위 판단
for(int i=0; i<N; i++) {
// 초기 순위는 모두 1등
rank[i] = 1;
// 모든 요소를 순회하며 덩치가 큰 사람 체크
for(int j=0; j<N; j++) {
// 나 자신은 비교할 필요가 없음
if(i == j) {
continue;
}
// 나보다 덩치가 더 크면 순위+1
if(info[i*2] < info[j*2] && info[i*2+1] < info[j*2+1]) {
rank[i]++;
}
}
sb.append(rank[i]).append(' ');
}
System.out.println(sb);
}
}
채점 결과
기타
- 문제를 꼼꼼히 읽어야겠다는 생각을 두 번째로 했다.
문제 링크
'백준' 카테고리의 다른 글
[JAVA] 백준 11650번: 좌표 정렬하기 (1) | 2024.07.16 |
---|---|
[JAVA] 백준 10814번: 나이순 정렬 (0) | 2024.07.15 |
[JAVA] 백준 2751번: 수 정렬하기 2 (0) | 2024.07.15 |
[JAVA] 백준 1676번: 팩토리얼 0의 개수 (0) | 2024.07.14 |
[JAVA] 백준 1436번: 영화감독 숌 (0) | 2024.07.14 |