코딩응급실
프로그래머스: 마법의 엘리베이터 본문
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 |