programmers/Lv 2

마법의 엘리베이터 [자바]

Meluu_ 2025. 1. 30. 17:17

 

🧫 문제 분석

✔️ 출처

마법의 엘리베이 level 2

📖 문제

 

 

우선 예제를 보고 생각해보면

어떨 때는 올림이 좋고 어떨 때는 내림이 좋다.

 

2554는 16번

2454는 어떨까?

단순히 5라고 올리면 17번이 된다. 

 

하지만 전부 내리면 15번이면 된다.

 

555를 예로 들어보자.

 

5를 내리면 15번이지만

5를 다 올리면

 

+1 5번  = 560

+10 4번 = 600

+ 100 4번 = 1000

- 1000 1번 = 0

 

14번 이 된다. 

 

즉, 5가 핵심이다.

 

연속으로 5가 나오면 올리는 것이 좋고

아니라면 내리는 것이 좋다. 

 

뒤에 숫자부터 판별한다. 

 


🔅 문제 풀이

class Solution {
    // 현재 층수 + 버튼 수로 이동
    // 0보다 작으면 안움직임
    // 0층이 가장 아래층
    
    // 마법의 돌 1개 소요
    // 탐욕법
    // 10^c 이며 C는 0이상 정수
    
    public int solution(int storey) {
        int answer = 0;
        
        while (storey > 0) {
            
            int tmp = storey % 10;
            storey /= 10;
            
            // 앞자리 수가 5이고 현재 5이면 올림한다. 
            if (tmp > 5 || tmp == 5 && storey % 10 >= 5) {
                answer += 10 - tmp;
                storey += 1;
                
            } else {
                answer += tmp;
                
            }
        }
        
        return answer;
    }
}

 

❗ 오답노트 / 필요한 지식