Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코딩응급실

프로그래머스: 마법의 엘리베이터 본문

Java

프로그래머스: 마법의 엘리베이터

Daeryuk Kim 2024. 10. 15. 10:36
import java.util.*;
public class Solution {
    public static int solution(int storey) {
        int answer = 0;
        
        while (storey > 0) {
            int remainder = storey % 10;  // 1의 자리수 추출
            
            if (remainder > 5) {  // 5보다 크면 올림
                answer += (10 - remainder);  // 올림에 필요한 횟수 추가
                storey = storey / 10 + 1;  // 올림 처리
            } else if (remainder < 5) {  // 5보다 작으면 그대로 내림
                answer += remainder;
                storey /= 10;  // 다음 자릿수로 이동
            } else {  // 1의 자리가 5일 경우
                // 다음 자릿수를 보고 결정
                if ((storey / 10) % 10 >= 5) {
                    answer += (10 - remainder);  // 올림 처리
                    storey = storey / 10 + 1;
                } else {
                    answer += remainder;  // 내림 처리
                    storey /= 10;
                }
            }
        }
        
        return answer;
    }
    public static void main(String[] args) {
        Solution sol = new Solution();
        int storey = 16;  // 테스트할 층수
        System.out.println(sol.solution(storey));  // 결과 출력
    }
}

 

솔직히 검색해서 참고했다.

10으로 나눈 나머지를 가지고 최대한 빠르게 그러니까,

16이면 "+1칸을 4번"해서 20으로 만든 뒤, "-10칸을 두번"해서 0층으로 돌아오는 셈이다.

그럼 총 6번이면 0층으로 올 수 있다.

깔끔한 코드가 부럽다.

어떻게 이런 생각을 한 것일까.

'Java' 카테고리의 다른 글

프로그래머스 Lv.2: 124 나라의 숫자  (1) 2024.12.04
프로그래머스 Lv.2: 호텔 대실  (0) 2024.12.04
LeetCode: Longgest Common Prefix  (0) 2024.04.03
LeetCode: Roman to Integer  (0) 2024.04.03
LeetCode: Two Sum  (0) 2024.04.03