- 주어진 문제에 따라 입력한 배열에서 k 값 이상이 k번 있는 k의 최댓값을 구해야 한다.
- 아래의 [코드 1]처럼 코드를 작성한다.
- [코드 1] 처음 작성한 코드 답안
class Solution { public int solution(int[] citations) { int answer = 0; for (int i = citations.length-1 ; i >= 0; i--) { int count = 0; for (int j = 0; j < citations.length; j++) { if (citations[j] >= i) { count++; } } if (i == count) { answer = i; break; } } return answer; } }
- 일부 테스트 케이스에서 오류가 발생되었다.
- [결과 1]
- 배열의 길이가 1일 경우 기존 코드에서 i가 0이고, citations[0]이 0 이상이기만 하면 항상 count 값이 증가하게 된다.
- 이중 for문을 사용하면 배열의 길이가 1일 때 예외 처리를 하기 어려워진다. 이런 문제를 해결하기 위해 배열을 먼저 정렬시키고 단일 for문을 사용하고자 한다.
- citations 배열을 정렬시키고 배열의 어떤 인덱스에 있는 값이 해당 인덱스보다 1 이상 큰 값을 가지고 있는 최소 인덱스를 구하여 배열의 길이에서 빼주면 된다.
- [코드 2]
- [결과 2]