이 문제도 유형은 정렬이기는 한데, 구현이 상당히 어지러웠다.
일단 문제 이해하는 것 부터도 힘들었고, 설계도 아래 주석처럼 단계별로 딱딱 끊어보아야 겨우 구현할 수 있었다.
게다가 처음 제출 할 때도 거의 자포자기한 상태로 냈는데, 한 번에 성공해서 깜짝 놀랐다ㅋㅋ
- h의 최댓값인 논문의 총 갯수부터 내려가며 검사 -> i = h = critations.length
- citations를 traverse하며, 인용횟수가 i번 이상인 논문이 i개 이상 있는지 검사
-> 통과 시 2로, 아니면 continue
- citations를 travesre하며, 인용횟수가 i번 이하인 논문 갯수가 모두 i개 이하인지 검사
-> 통과 시 답은 i & 답을 구했으므로 break, 아니면 continue
(여기서 논리적으론, 1에서 citations에서 검사했던 나머지 논문들에 대해 travese해야 하는데, 어차피 i개 이하인 논문 갯수는 전체를 traverse해도 똑같음)import java.util.*; class Solution { public int solution(int[] citations) { //이게 대체 무슨 문제임 int answer = 0; Arrays.sort(citations); //h 최댓값부터 시작 (citations.length부터) int h = citations.length; for(int i = h; i > 0; i--){ //h번 이상이 h편 이상 //citations를 traverse하면서 i번 이상이 i개 이상 있는지, 없으면 continue int cnt = 0; for(int j = h-1; j >= 0; j--){ //0 1 3 5 6 if(citations[j] >= i){ cnt++; }else{ break; } } if(cnt < i){ continue; } //나머지 모두 h번 이하면 answer = i //나머지 traverse하면서 다 i번 이하면 answer = i, break 아니면 continue cnt = 0; for(int j = h-1; j >= 0; j--){ if(citations[j] <= i){ cnt++; } } if(cnt <= i){ answer = i; break; } } return answer; } }그리고 h시작은 논문 갯수부터 시작하긴 하는데 어디까지 내려가야 할 지 모르겠어서 그냥 일단 냈는데 성공해버려서 사실 지금도 잘 모르겠다