본문으로 바로가기

https://school.programmers.co.kr/learn/courses/30/lessons/148653?language=java 

 

프로그래머스

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

programmers.co.kr


문제

현재 주어진 층수에서 10의 단위로만 오르거나 내릴 수 있을 때 0층으로 까지의 최소 횟수를 구하는 문제

 


풀이

1의 자리부터 시작해서 5 미만, 5일 때, 5 초과일 때를 기준으로 각 1층을 올라갈지 내려갈지 판단해야한다. 

 

처음에는 첫 자리부터 시작해서 틀렸다 

끝의 자리부터 시작해야 단위가 올라갔을 때의 처리를 해줄 수 있다. 

 

5일 때에는 다음자리의 숫자에 따라 내려갈지 올라갈지 확인할 수 있다. 

 

예를 들어, 현재 85층이라면 5층을 내려가고 다시 80층을 내려가는 경우보다 ( 13 번 )

 

5층을 더해 90층을 만들고, 해당 90층을 다시 +1 하여 100층을 만드는게 더 적다

ex ) 5 + 1 + 1 = 7

 

 

 

class Solution {
    public int solution(int storey) {
        int answer = 0;
        
        int floor = 10;
        
        while (storey > 0) {
            int mod = storey % floor;
            
            if (mod < 5) {
                answer += mod;
                storey = storey / floor;
            } else if (mod == 5) {
                int next = storey / floor;
                if (next % floor >= 5) {
                    answer += 10 - mod;
                    storey = storey / floor + 1;
                } else {
                    answer += mod;
                    storey = storey / floor;
                }
            }
            else {
                answer += 10 - mod;
                storey = storey / floor + 1;
            }
        }
        return answer;
    }
}