https://programmers.co.kr/learn/courses/30/lessons/42747
정렬한뒤
매 자리에 끼워 넣어서
왼쪽 갯수 가
끼워 넣은 자리 앞 >= 왼쪽갯수 >= 뒷 자리
이면 ...
뭔가 복잡하다. 구현도 어떻게 해야할지 모르겠다.
다른방법을 생각하기로 함.
내가 제한할 수 있는 것부터 생각했다. 그것은 논문 갯수.
일단 커봤자 논문 갯수(h)다.
첫번째 경우는 논문 갯수가 5인데 그렇다면 맨끝에 위치해야한다. 하지만 왼쪽의 0보다 5는 크므로 탈락.
4: 6 5 3 1 < (4) 0 => X
3: 6 5 3 >= (3) >= 0 => O
오.. 이걸 발전시키기로 한다.
위의 아이디어를 추상화시킨다.
6 5 3 1 0
비교대상: 1 2 3 4 5
length - i - 1 번째 수와 수 length - i 를 비교 ( i =0,1,2... )
다른 케이스에도 적용해보면...
7 8 0 9 7 3
=> 9 8 7 7 3 0
1 2 3 4 5 6
따라서 해결방법을 아래처럼 하기로 했다.
하지만 여기서 굳이 내림차순을 사용해야하나 싶었다. int 배열을 내림차순하려면 Integer로 바꿔야하거나, ArrayList로변경해야하므로 번거롭다.
내림차순 안한경우,
0 3 7 7 8 9
6 5 4 3 2 1
—> 이방향으로 진행하면 된다.
이에 맞게 1을 생략하고 2의 코드를 조금 변경해준다.
‘’’
import java.util.;
import java.lang.;
class Solution {
public int solution(int[] citations) {
int answer = 0;
//1. 정렬한다.
Arrays.sort(citations);
//2.
for(int i=0; i<citations.length; i++){
if(citations[i] >= (citations.length - i)) {
answer = (citations.length-i);
break;
}
}
return answer;
}
}
‘’’
처음에 모든 인용횟수가 0인 경우를 고려를 안했는데 코드 작성하다가 이 예외경우를 생각하고 다시 코드를 짰다.
이제 예외 케이스를 의식적으로 고려하게 된 것 같다.
또 굳이 내림차순을 해야하나? 로 좀 더 코드양을 줄이고 효율적인 방법을 찾으려고 반문하는 자세.. 칭찬해...
근데 이렇게 아이디어가 중요한 싸움인데 이번 일주일동안 생각한 아이디어를 코딩테스트에서 한시간안에 떠올릴수 있을까..? ㅠ