programmers

[Programmers Level 1] 덧칠하기 Javascript

냠냠맨 2023. 3. 22. 23:05

⚡문제정보

대충 이런 문제인데 처음 생각한 로직으로 풀려다가

구현이 안되어서 오랜시간 막혔습니다.

 

처음 구상은 포인터를 하나 두고

arr[i] - pointer값이 m보다 크거나 같으면 answer를 올리는 식으로 구상했는데

그렇게 짜니 안되는 케이스가 생겼어요

 

결국 맨처음에 떠올릴 수 있던 무식하게 순회하기를 선택하고

풀었읍니다. 


🔍접근방법

1. 정직하게 배열을 주어진 길이만큼 만들고 true로 가득채워준다.
2. section에 주어진 값과 매칭되는 인덱스에 false를 할당한다.
3. false를 만나면 m - 1값만큼 인덱스를 점프시키고 answer값을 올려준다.

😑나의 풀이

function solution(n, m, section) {
    let answer = 0
    
    let arr = new Array(n).fill(true)
    section.forEach(e => arr[e-1] = false)
    
    for(let i = 0 ; i < arr.length ; i++) {
        if(!arr[i]) {
            answer += 1
            i += m-1
        }    
    }
    
    return answer
}

위 로직을 정직하게 코드로 옮겼습니다.

간단한 풀이이기는 한데 마음에 들지 않는다.

내가 처음 생각했던 절댓값을 기준으로 문제를 푸는 방법이 훨씬 효율적일 것 같은데?


🔍다른사람의 풀이

function solution(n, m, sections) {
    var answer = 0;
    var painted = 0;
    for(var section of sections) {
        if(painted < section) {
            answer++;
            painted = section+m-1;
        }
    }
    return answer;
}

대충 이런식으로 풀면 훨씬 빠를것같았어요..

제가 너무 이상하게 생각을 하고 있었네요

 

근데 왜 콘솔찍어보니까 제 풀이랑 시간복잡도가 비슷할까요? 몰?루

 

반응형