정렬 - H-Index

Anna·2020년 11월 1일
0

문제

https://programmers.co.kr/learn/courses/30/lessons/42747

시도한 아이디어 1

정렬한뒤
매 자리에 끼워 넣어서
왼쪽 갯수 가
끼워 넣은 자리 앞 >= 왼쪽갯수 >= 뒷 자리
이면 ...

뭔가 복잡하다. 구현도 어떻게 해야할지 모르겠다.
다른방법을 생각하기로 함.

시도한 아이디어 2

내가 제한할 수 있는 것부터 생각했다. 그것은 논문 갯수.

일단 커봤자 논문 갯수(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

따라서 해결방법을 아래처럼 하기로 했다.

  1. 내림차순 정렬한다.
  2. for(int i=0; i<array.length;i++){
    if(length- i-1 번째 수 >= 수 length - i ){ return (수 length-i) }
    }

하지만 여기서 굳이 내림차순을 사용해야하나 싶었다. 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인 경우를 고려를 안했는데 코드 작성하다가 이 예외경우를 생각하고 다시 코드를 짰다.
이제 예외 케이스를 의식적으로 고려하게 된 것 같다.

또 굳이 내림차순을 해야하나? 로 좀 더 코드양을 줄이고 효율적인 방법을 찾으려고 반문하는 자세.. 칭찬해...

근데 이렇게 아이디어가 중요한 싸움인데 이번 일주일동안 생각한 아이디어를 코딩테스트에서 한시간안에 떠올릴수 있을까..? ㅠ

profile
글쓰는 개발자가 되고싶어요

0개의 댓글