Bleeding edge

[LeetCode] 1051. Height Checker - 자바스크립트 0624 본문

코딩테스트 공부

[LeetCode] 1051. Height Checker - 자바스크립트 0624

codevil 2022. 6. 24. 10:37

https://leetcode.com/problems/height-checker/

 

Height Checker - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제풀이는 총 3번했다.

1. sort를 두번 써서

2. 1번에서 푼문제를 살짝 수정

3. 2번에서 효율성 개선


1. sort를 두번 썼을 때는 index가 같은 숫자가 많은경우, 오답이 처리되서 좀 더 단순하게 풀기 위해 다시 풀었다.

2번풀이

1. 원래의 본문과 차이가 있으면, count를 해줄 answer을 선언하고, heights를 그대로 sort하면 원형이 바뀔 테니, heights를 복제한 result를 만든다.

    let answer = 0
    const result = []
    for (let i = 0; i < heights.length; i++) {
        result.push(heights[i])
    }

 

2. result를 sort한다

    result.sort((a, b) => a - b)

3.result와 heights가 다르면 answer ++한다

    for (let i = 0; i < heights.length; i++) {
        if (heights[i] !== result[i]) {
            answer++
        }
    }

4. answer을 return 한다.

    return answer

 

이렇게 풀이를 했을때는 faster than이 36%, runtime 55ms, Memory가 41.9MB가 나왔었다. 근데 잘보니까, 첫번째 for문 같은경우에 for loop가 아닌 ...을 사용하면 효율성이 계선될꺼같아 수정했다.

    const result = [...heights]

 

결과

이전풀이보다 99에서 55만큼 효율성이 개선되었다. faster than도 98.79%

 

전체 풀이

var heightChecker = function (heights) {
    let answer = 0
    const result = [...heights]
    result.sort((a, b) => a - b)

    for (let i = 0; i < heights.length; i++) {
        if (heights[i] !== result[i]) {
            answer++
        }
    }
    return answer
};