**접근 과정
- 어떤 문제로 이해 했는가? 그리고 문제의 제약 조건은?**
N명의 사람의 키, 몸무게 값이 주어지고, 키와 몸무게가 모두 큰 경우만 덩치가 더 크다고 말할 수 있다.
덩치 등수가 자신보다 더 큰 덩치의 사람 수로 정해지고, 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k+1이 된다. 이때 덩치 등수를 계산하시오.
제약조건
- 2 ≤ N ≤ 50
- 10 ≤ x, y ≤ 200
2. 나의 방식대로 문제를 재정의 하자.
각 사람별로 그 사람보다 큰 덩치를 가진 사람 수를 계산한 후 등수를 매긴다.
3. 어떤 알고리즘과 자료구조를 사용할 것인가?
이중 리스트에 전체 사람의 정보를 저장한 후, 이중for문으로 모든 사람을 비교한다.
4. 어떻게 계산할 것인가?
1) 입력
BufferedReader
2) 시간 복잡도 계산
이중for문이므로 O(n^2).
N의 제약조건이 50이 최대이기 때문에 1초를 넘지 않음
5. 주의할 점은 무엇인가?
정답을 저장한 후 출력하기 보다는 정답을 구한 즉시 출력하기
6. 풀이 과정
import java.io.*;
import java.util.*;
import java.util.Map.Entry;
public class q7568 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Integer N = Integer.parseInt(br.readLine());
Integer[][] person = new Integer[N][2];
for (int i = 0; i < N; i++) {
String[] str = br.readLine().split(" ");
person[i][0] = Integer.parseInt(str[0]);
person[i][1] = Integer.parseInt(str[1]);
}
for (int i = 0; i < N; i++) {
Integer rank = 1;
for (int j = 0; j < N; j++) {
if (i == j) {
continue;
}
// i 덩치 < j 덩치 ==> rank 값 증가
if (person[i][0] < person[j][0] && person[i][1] < person[j][1]) {
rank++;
}
}
bw.write(rank + " ");
}
bw.flush();
br.close();
bw.close();
}
}
7. 개선점
너무 오랜만에 코테공부를 다시 시작하다보니 이전에 풀던 레벨도 못풀게 됐다.
이 문제는 풀이가 너무 단순한데 비해 생각해내지 못함
'코딩테스트' 카테고리의 다른 글
[백준 11659번] 구간 합 구하기 4 (0) | 2022.01.10 |
---|---|
[백준 6603번] 로또 (0) | 2022.01.10 |
[백준 1921번] 정수 삼각형 (0) | 2021.07.12 |
[백준 11052번] 카드 구매하기 (0) | 2021.07.11 |
[백준 16953번] A -> B (0) | 2021.07.10 |