티스토리 뷰
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스 코딩테스트 고득점 Kit의 정렬 Level 2 문제다.
만약에 [1, 0, 0] 이 입력으로 들어온다면 1편의 논문이 1회 이상 인용되었으므로 1이 반환될 것이다.
또한 [5, 4, 3, 1, 1] 이 입력으로 들어온다면 3편의 논문이 3회 이상 인용되었으므로 3이 반환될 것이다.
여기서 규칙을 찾을 수 있다.
논문을 내림차순으로 정렬하고, 배열을 앞에부터 탐색한다.
앞에 원소가 1회 이상 인용되었다면 그 다음 원소가 2회 이상 인용되었는지 확인하고,
또 그 다음 원소가 3회 이상 인용되었는지 확인한다.
이렇게 계속 n번째 원소가 n번 이상 인용되지 않았을 때까지 탐색하면 된다.
이 때 조건을 만족할 때마다 answer에 n을 대입하고,
조건을 만족하지 않을 때 빠져나온다면 answer이 정답이 된다.
이때 citations 배열을 Integer 배열로 변경해준 이유는
Arrays와 Collections을 통한 내림차순 정렬은 Integer형 배열만 가능하기 때문이다.
(물론 오름차순 정렬로도 풀 수 있다)
푸는 건 정말 간단한데, 문제를 잘못 이해해서 좀 헤맸던 문제다.
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int solution(int[] citations) {
int cnt = 1;
int answer = 0;
Integer[] arr = Arrays.stream(citations).boxed().toArray(Integer[]::new);
Arrays.sort(arr, Collections.reverseOrder());
while(cnt - 1 < arr.length) {
if(arr[cnt - 1] >= cnt)
answer = cnt;
else
break;
cnt++;
}
return answer;
}
}
728x90
'algorithm > programmers' 카테고리의 다른 글
[프로그래머스/자바] k진수에서 소수 개수 구하기 풀이 - 2022 KAKAO BLIND RECRUITMENT (0) | 2022.11.17 |
---|---|
[프로그래머스/자바] 신고 결과 받기 풀이 - 2022 KAKAO BLIND RECRUITMENT (0) | 2022.11.17 |
[프로그래머스/자바] 가장 큰 수 풀이 (0) | 2022.11.15 |
[프로그래머스/자바] K번째수 풀이 (0) | 2022.11.15 |
[프로그래머스/자바] 다리를 지나는 트럭 풀이 (0) | 2022.11.15 |