2026.07.21
6.3/100
실패
실패 원인 분석
[7, 0, 3]의 배열이 입력으로 주어지는 경우,
정답이 2가 되어야 하지만, 1이 출력되는데, 그 이유는
for (int i = 0; i < citations.length; i++) {
for (Integer key : map.keySet()) {
if (key < citations[i]) {
map.put(key, map.get(key) + 1);
}
}
map.put(citations[i], map.getOrDefault(citations[i], 0) + 1);
}
에서 큰 인용 횟수가 먼저 들어오면, 작은 횟수는 증가하지 않기 때문임
따라서 오름차순으로 정렬해서 해결할 수 있음
import java.util.Map;
import java.util.HashMap;
class Solution {
public int solution(int[] citations) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < citations.length; i++) {
for (Integer key : map.keySet()) {
if (key < citations[i]) {
map.put(key, map.get(key) + 1);
}
}
map.put(citations[i], map.getOrDefault(citations[i], 0) + 1);
}
int h = 0;
for (Integer key : map.keySet()) {
int n = Math.min(key, map.get(key));
h = (h <= n ? n : h);
}
return h;
}
}
소요 시간: 30분
시간 복잡도:
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
Arrays.sort(citations);
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < citations.length; i++) {
for (Integer key : map.keySet()) {
if (key < citations[i]) {
map.put(key, map.get(key) + 1);
}
}
map.put(citations[i], map.getOrDefault(citations[i], 0) + 1);
}
int h = 0;
for (Integer key : map.keySet()) {
int n = Math.min(key, map.get(key));
h = (h <= n ? n : h);
}
return h;
}
}
시간 복잡도:
코드 해석
입력된 배열을 오름차순으로 정렬했기 때문에
cirtations[i]의 현재 인덱스로부터 총 길이까지는 차는
현재 상황에서 인용 가능한 최대 논문 수가 됨
따라서 현재 인용한 논문 횟수가 이보다 더 크다면 해당 값이 최댓값이 되는 구조
class Solution {
public int solution(int[] citations) {
Arrays.sort(citations);
int n = citations.length;
for (int i = 0; i < n; i++) {
int h = n - i; // i번째 이후 논문 수
if (citations[i] >= h) return h;
}
return 0;
}
}
이전 문제를 풀면서도 느꼈던 점이지만, 이번 AI 코드를 보며 더욱 더
수학적 사고방식이 정말 중요하다고 느낀다.
해당 사고방식이 있다면 같은 문제라도 코드가 훨씬 더 간결해진다.
결론적으로 문제를 많이 풀며 모범 답안을 많이 접하는 것 밖에는 정답이 없다.