새소식

알고리즘 테스트 ⏲/프로그래머스

[프로그래머스] 마법의 엘리베이터 풀이 / JavaScript

  • -
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

작성 코드 (1차 시도 / 통과)

function solution(storey) {
    let stor = "" + storey
    let result = 0
    for (let i = stor.length - 1; i >= 0; i -= 1) {
        const digit = 10 ** (stor.length - 1 - i) // 단위
        const diff = stor[i] >= 5 ? 10 - +stor[i] : +stor[i] // 더 적은 차이값 이용
        result += diff 
        const [inc, dec] = ["" + (+stor + diff * digit), "" + (+stor - diff * digit)]
        if (stor[i] == 5) { // 현재층이 5인 경우 그 앞자리를 고려해 올라갈지 내릴지를 결정
            if (i - 1 >= 0 && stor[i - 1] >= 5) stor = inc 
            else stor = dec
        } 
        else if (stor[i] > 5) { // 현재층이 5이상이면 올라가기
            stor = inc
            if (stor.length > ("" + storey).length) ++i
        }
        else stor = dec // 현재층이 5미만이면 내려가기
    }
    return result
}

 

구현 로직 (구현)

storey의 가장 오른쪽 값부터 계산해가며 올라갈지 내려갈지를 결정합니다.

 

1. 차이값 계산, 현재 층이 5이상이면 10 - 현재층 값을, 5미만이면 그대로 사용합니다. 

2. 올라가고난 후의 값과 내려가고 난 후의 값 inc와 dec를 미리 구해줍니다. (굳이 그럴필요는 없지만 가독성을 위해)

3. 현재 층에 따라 올라갈지 내려갈지를 계산합니다.

3-1. 현재 층이 6이상이면 올라가는 것이 득이므로 stor를 그만큼 증가시킵니다. 만약 증가되어 자릿수가 증가했다면 인덱스도 증가시킵니다. 예를 들면 첫째자리가 9인 경우가 되겠습니다.

3-2. 현재 층이 6미만이면 내려가는 것이 득이므로 stor를 그만큼 감소시킵니다.

3-3. 현재 층이 5이면 그 앞자리를 고려해 결정합니다. 앞자리가 5이상이면 증가시키고 5미만이면 감소시킵니다. 예를 들면 stor가 545 일 때, 앞자리가 4이기 때문에 내려가게 되면 545 -> 540 -> 500 -> 0 으로 가서 14만 사용해도 됩니다.

4. 누적된 result를 반환합니다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.