본문 바로가기
자료구조 & 알고리즘/문제 풀이 (프로그래머스)

마법의 엘리베이터 (그리디 알고리즘)

by 정구정구 2026. 7. 13.

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/148653#qna

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제 풀이

맨 뒷자리 숫자부터 가장 빠르게 0 or 10이 되는 알고리즘을 적용하면 된다.

  • n < 5 인 경우, 0으로 만들기 위해 n칸 내려가는게 빠름
  • n > 5인 경우, 10으로 만들기 위해 10-n칸 올라가는게 빠름
  • n = 5인 경우, 0으로 내려가든 10으로 올라가든 5칸으로 동일하지만, 앞자리 숫자가 5보다 크거나 같으면 올라가는게, 아니면 내려가는게 앞자리 숫자 처리하는데 유리함

 

 

작성한 코드

class Solution {
    public int solution(int storey) {
         int answer = 0;

        while (storey != 0) {

            int n = storey % 10;
            storey /= 10;
            
            if (n == 0) continue;

            if (n < 5) {
                answer += n;
            }

            else if (n > 5) {
                answer += 10 - n;
                storey ++;
            }

            else { // n == 5인 경우
                answer += n;
                if (storey % 10 >= 5) storey ++;
            }
        }

        return answer;
    }
}