프로그래머스 Lv.2 마법의엘리베이터

Kim Jason·2023년 4월 3일
0

알고리즘 노트

목록 보기
27/35
post-thumbnail

💁🏻 코드

function solution(storey) {
    let answer = 0;
    let arr = [...String(storey)].map(el => +el);
    for (let i = arr.length - 1; i >= 0; i--) {
        if (arr[i] > 5) {
            if (i === 0) answer += 1;
            answer += (10 - arr[i]);
            arr[i - 1] += 1;
        } else if (arr[i] === 5 && arr[i - 1] >= 5) {
            answer += 5;
            arr[i - 1] += 1;
        } else {
            answer += arr[i];
        }
    }
    return answer;
}

쉬운 듯 어려운 문제다.
경계를 잘 따져야봐야 겠다는 생각을 한 문제다.
일단 입력값의 제한을 보면 다음과 같다.

  • 층수가 총 1억(=10의 8승) 층까지 있다. 반복문을 돌려도 최대 8이다.

완전탐색으로 접근해도 무방한 문제라고 생각했다.
문제는 탐색을 진행하면서 경우의 수를 따져주는 것이다.

  • 1) 해당 자리의 수가 5보다 큰 경우
  • 2) 해당 자리의 수가 5 이거나 이전 자리의 수가 5보다 크거나 같은 경우
  • 3) 그 외의 경우

위 3가지 경우의 수를 떠올릴 수 있었다.

profile
성장지향형 프론트엔드 개발자

0개의 댓글