Seren dev's blog

https://school.programmers.co.kr/learn/courses/30/lessons/148653

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

처음에는 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
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!