https://school.programmers.co.kr/learn/courses/30/lessons/148653
풀이
처음에는 BFS로 풀었다가 틀린 결괏값이 나와서 의아했는데, 입력값과 출력값을 보니 각 자리 숫자로만 답을 구할 수 있는 것 같아서 로직을 바꿨다.
storey % 10으로 한 자리씩 처리하는 로직을 작성하였고, 각 자리 숫자가 5보다 큰 경우, 작은 경우, 같은 경우를 나누어서 처리하도록 하였다. 같은 경우(숫자가 5인 경우)에는 앞 자리 숫자가 5보다 크거나 같은 경우, 작은 경우로 나누어서 처리하면 된다.
주의할 점
숫자가 5인 경우에, 앞 자리 숫자가 5보다 크거나 같은 경우, 작은 경우로 나누어서 처리해야 하는 경우는 다음과 같다.
-> 555의 경우
1) 앞 자리 숫자가 5보다 크거나 같은 경우, 작은 경우로 나눌 때
(555) -> 5 (560) -> 4 (600) -> 4(1000) -> 1 (0) 14번
2) 앞 자리 숫자가 5보다 큰 경우, 작거나 같은 경우로 나눌 때
(555) -> 5 (550) -> 5 (500) -> 5 (0) 15번
따라서 숫자가 5인 경우에, 앞 자리 숫자가 5보다 크거나 같은 경우, 작은 경우로 나누어서 처리해야 한다.
코드
import java.util.*;
class Solution {
public int solution(int storey) {
int cnt = 0;
while (storey > 0) {
int num = storey % 10;
storey /= 10;
if (num < 5) {
cnt += num;
} else if (num > 5) {
cnt += (10 - num);
storey++;
} else { // num == 5
if (storey % 10 >= 5) {
cnt += (10 - num);
storey++;
} else {
cnt += num;
}
}
}
return cnt;
}
}
728x90
'Algorithm 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 : 연속된 부분 수열의 합 - 자바[Java] (0) | 2024.03.21 |
---|---|
[프로그래머스] Lv.2 : 큰 수 만들기 - 자바[Java] (0) | 2024.03.21 |
[프로그래머스] Lv.2 : 최솟값 만들기 - 자바[Java] (0) | 2024.03.18 |
[프로그래머스] Lv.2 : [3차] 압축 - 자바[Java] (0) | 2024.02.18 |
[프로그래머스] Lv.2 : [3차] n진수 게임 - 자바[Java] (1) | 2024.02.18 |