처음에는 DP 문제라고 생각하고 풀었는데, 잘못된 접근이었다.
다음으로 storey를 String 배열로 바꾸어서도 풀어보았는데, 자리수가 늘어나는 예외를 처리하지 못했다.
마지막으로 storey를 나눠가는 방식으로 겨우 풀이에 성공했다.
로직
storey가 0이 될때까지 while을 돌린다.
매 roof 마다 가장 끝자리인 num과 num의 앞자리인 nextNum만 확인하면 된다.
왜냐하면 roof에 끝에서 10씩 나누어 주기 때문이다.
num이 5보다 크면 현재 층수에서 올라가는것이 빠르고, num이 5보다 작으면 현재 층수에서 내려가는게 빠르다.
num이 5라면 num의 앞자리 숫자를 확인해야 한다.
앞자리 숫자가 4보다 크면 올라가는게 빠르고, 작으면 내려가는게 빠르기 때문이다.
최종 코드
import java.util.*;
class Solution {
public int solution(int storey) {
int answer = 0;
while(storey > 0) {
int num = storey % 10;
int nextNum = (storey / 10) % 10;
if(num > 5) {
storey += 10;
answer += 10 - num;
} else if(num == 5) {
if(nextNum > 4) {
storey += 10;
}
answer += 5;
} else {
answer += num;
}
storey /= 10;
}
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - 미로 탈출 (0) | 2023.07.22 |
---|---|
(Java) 프로그래머스 - 테이블 해시 함수 (0) | 2023.07.19 |
(Java) 프로그래머스 - 호텔 대실 (0) | 2023.07.10 |
(Java) 프로그래머스 - 우박수열 정적분 (0) | 2023.07.08 |
(Java) 프로그래머스 - 연속된 부분 수열의 합 (0) | 2023.05.07 |