잿꽃's posting Garden

프로그래머스에서 코딩테스트 연습8 - H-Index 구하기 본문

WEB/코딩테스트 연습

프로그래머스에서 코딩테스트 연습8 - H-Index 구하기

잿꽃 2022. 5. 24. 16:05

임의의 배열에서 n의 숫자 이상의 숫자의 개수가 n개 이상일 때 최댓값 n을 구한다.

 

ex) [1,2,4,6,7]의 최대값은 3

3이상 숫자 [4,6,7] 이고 length 3이기 때문에 최댓값은 3

 

 

사실 프로그래머스에 나온 예시가 한 개밖에 없어서 이해를 잘 못했음;;

배열 내에 있는 숫자가 그 숫자 이상의 숫자 개수라고 이해했는데 질문하기 보니까 배열 내에 있는 숫자가 아닌 그 사이 값이 될 수 있다고 말해줘서 알았다.

function solution(citations) {
    var answer = [];
    let result = 0;
    let filters;
    for(index in citations){
         filters = citations.filter(item => item >= citations[index]);
         citations[index] <= filters.length? answer.push(citations[index]) : null;
    }
    result = Math.max(...answer)? Math.max(...answer) : 0;
    return result;
}

결과는 11번 16번만 성공...ㅋㅋㅋㅋ

질문하기에 나온 내용을 토대로 코드를 수정했다.

 

 

function solution(citations) {
    var answer = [];
    let result = 0;
    let filters;
    // 0부터 배열의 max값에 도달할 때까지 반복
    for(let i = 0; i < Math.max(...citations); i++){
    	// filters에 i보다 큰 값만 넣는다.
        filters = citations.filter(item => item >= i);
        // filters의 길이가 i의 값보다 큰 지 확인하고 크면 push한다.
        i <= filters.length? answer.push(i) : null;
    }
    // [0, 0, 0]일 경우 위의 for()문이 해당하지 않으므로
    // Math.max()의 값이 0이 아니면 true로 판별할 것이므로 위의 값을 이용하고
    // Math.max()의 값이 0이면 false로 판별하므로 값으로 0을 넣어준다.
    result = Math.max(...citations)? Math.max(...answer) : 0;
    return result;
}

[0,0]의 경우를 생각못해서 16번 빼고 다 성공했었다.

 

전개 연산자를 이용하면 string이나 배열로 되어있는 값을 숫자 계산을 할 수 있게 하므로 잘 기억해둬야겠다.

또는 배열이 아닌 String, Number속성을 String(), Number()메소드가 아닌 +"", *1을 통해서도 형변환이 가능하다는 점.

이제 난이도 2를 풀고 있는데 2중에서도 쉬운 문제였던거 같다. 원래 이 문제가 시간이 오래 걸릴 수밖에 없는 건지 아니면 내가 오래 걸리게 코드를 짠 건지는 모르겠지만 실행시간을 더 줄이는 방법을 고민해봐야겠다.

728x90
Comments