티스토리 뷰
728x90
문제
- 사람의 덩치를 (몸무게, 키)로 표시
- A : (x, y), B : (p, q)라고 할 때, x > p 그리고 y > q이라면 A의 덩치가 B의 덩치보다 더 크다고 말함
- 하지만 몸무게는 A가 더 많이 나가지만, B가 키가 더 크다면 누구도 상대방보다 더 크다고 말할 수 없음
- N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 큰 덩치의 사람의 수로 정해짐
- 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k + 1
해결방법
각 사람과 다른 사람의 덩치를 비교해보면서 더 큰 사람의 덩치 등수를 1씩 더해준다. 각 사람의 신체 정보를 담는 배열과 덩치 등수를 담는 배열을 만들어 해당 사람들의 덩치를 비교하면서 덩치 등수를 변경해준다.
코드
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] people = new int[N][N]; // 신체 정보를 저장할 배열
int[] grades = new int[N]; // 덩치 등수를 저장할 배열
for(int i = 0; i<N; i++){
grades[i] = 1; // 맨 처음 모든 사람의 덩치 등수를 1로 초기화
}
for(int i = 0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
people[i][0] = Integer.parseInt(st.nextToken());
people[i][1] = Integer.parseInt(st.nextToken());
}
for(int i = 0; i<N-1; i++){
for(int j = i+1; j<N; j++){
// i번째 사람보다 j번째 사람의 덩치가 더 크다면, i번째 사람의 덩치 등수가 밀리게 되므로 i번째 덩치 등수를 증가시킴
if(people[i][0] < people[j][0] && people[i][1] < people[j][1]) grades[i]++;
// j번째 사람보다 i번째 사람의 덩치가 더 크다면, j번째 사람의 덩치 등수가 밀리게 되므로 j번째 덩치 등수를 증가시킴
else if(people[i][0] > people[j][0] && people[i][1] > people[j][1]) grades[j]++;
}
}
// 덩치 등수 출력
for(int grade : grades){
System.out.print(grade+" ");
}
br.close();
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 10250번 ACM 호텔(JAVA) (0) | 2022.07.24 |
---|---|
[백준] 9012번 괄호(JAVA) (0) | 2022.07.22 |
[백준] 4949번 균형잡힌 세상(JAVA) (0) | 2022.07.22 |
[백준] 4153번 직각삼각형(JAVA) (0) | 2022.07.22 |
[백준] 2869번 달팽이는 올라가고 싶다(JAVA) (0) | 2022.07.21 |
댓글