마법의 엘리베이터

2023. 8. 4. 16:48Programmers/Java

문제

 

결과

 

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution {
    public int solution(int storey) {
 
        int div =0;
        int answer = 0;
        
        //현재 층이 0층이 될때까지 반복한다.
        while(storey != 0) {
            
            //1의 자리
            div = storey % 10;
            
            //1의 자리가 5보다 크면 위부터 올라감
            if(div > 5) {
                answer += 10-div;
                storey += 10-div;    
            
            //1의 자리가 5라면 그 앞자리가 5 이상이지 미만인지 알아야 함    
            }else if(div == 5) {
            
                if((storey/10)%10 >=5) {
                    answer += 10-div;
                    storey += 10-div;
                    
                }else {
                    answer += div;
                    storey -= div;
                }
            //1의 자리가 5 미만 0 초과인 경우 밑으로 내려간다.    
            }else if(div>0){
                answer += div;
                storey -= div;
            
            //1의 자리가 0이라면 한 번 더 10으로 나눠줌
            }else if(div ==0){
                div = storey / 10;
                storey /= 10;
            }    
        }
        
        return answer;
    }
}
cs

 

 

이 문제의 핵심은 계속해서 10으로 나눈 후 1의 자리를 처리하는 것이다.

 

1의 자리가 5보다 크면 위로 이동하고

1의 자리가 5보다 작다면 아래로 이동한다.

 

여기서 일의자리가 5와 같다면 그 앞의 십의 자리를 보고 경우를 나눈다.

 

예를 들어,  65515층에서 시작한다면

위로 5층 이동해서 65520층으로 간다면, 65500층으로 갈 때 마법의 돌을 2개 이용해야 한다.

아래로 5층 이동해서 65510층으로 간다면, 6500층으로 갈 때 마법의 돌을 1개 이용해야 한다.

 

이처럼 일의 자리가 5인 경우 십의 자리가 5 이상이라면 위로

5 이하라면 아래로 가면 된다. 

'Programmers > Java' 카테고리의 다른 글

추억 점수  (0) 2024.08.27
크레인 인형뽑기 게임  (0) 2023.09.04
전국 대회 선발 고사  (0) 2023.05.24
x 사이의 개수  (2) 2023.05.17
qr code  (2) 2023.05.13