마법의 엘리베이터
2023. 8. 4. 16:48ㆍProgrammers/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 |