본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 마법의 엘리베이터

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

 

프로그래머스

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

programmers.co.kr

-1, +1, -10, +10, -100, +100 등과 같이 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이 적힌 버튼으로만 작동하는 엘리베이터를 0층으로 가기 위한 최소한의 횟수를 구하는 문제

class Solution {
    public int solution(int storey) {
        int answer = 0;
        String s = 0+String.valueOf(storey);
        String[] strings = s.split("");
        for (int i=strings.length-1; i>=0; i--) {
            int n = Integer.parseInt(strings[i]);
            if (n >= 10) {
                n = 10 - n;
                strings[i-1] = String.valueOf(Integer.parseInt(strings[i-1])+1);
            }
            if (n > 5) {
                n = 10 - n;
                strings[i-1] = String.valueOf(Integer.parseInt(strings[i-1])+1);
            } else if (n == 5) {
                int nn = Integer.parseInt(strings[i-1]);
                if (nn >= 5) {
                    strings[i-1] = String.valueOf(Integer.parseInt(strings[i-1])+1);
                }
            }
            answer = answer + n;
        }
        return answer;
    }
}

먼저 단위별로 구해주기 위해서 String형으로 변환하였다

그리고 맨 앞 자리가 9에서 다음 자리로 변하는 경우도 있을 수 있으므로 앞에 0을 추가로 붙여주었다

이후 맨 뒤에서부터 5보다 클 경우 다음 자릿수의 수를 증가시켜주었다

그리고 만약 5인 경우 다음 자릿수의 숫자가 5보다 크거나 같을 경우에 다음 자릿수를 증가시켜 주었다

그리고 다음 자릿수를 순환하면서 해당 자리수의 숫자가 10이상이 되었을 경우에 다음 자리수를 증가시켜 주었다

이렇게 나온 n을 answer값에 추가하여 횟수를 구하여 리턴하였다