내가 개발해볼게!!

[PRO] 프로그래머스 148653번: 마법의 엘리베이터 본문

Algorithm/Programmers

[PRO] 프로그래머스 148653번: 마법의 엘리베이터

보송송희 2023. 9. 19. 23:32

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

 

프로그래머스

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

programmers.co.kr

 

문제

난이도

Level 2

Sol

입력받은 층수 storey의 가장 작은 자리수부터 차례대로 처리한다

  1. 현재 자리수가 0, 1, 2, 3, 4라면 0이 될 때까지 -1을 반복하는 것이 횟수 측면에서 이득이다
  2. 해당 자리수가 5라면 다음 자릿수를 보고 판단한다
    2-1. 다음 자리수가 0, 1, 2, 3, 4라면 다음 자리수에서 -1 버튼을 누르는 횟수를 감소시키기 위해 해당 자리수에서 -1을 반복한다
    2-2. 다음 자리수가 5 이상이라면 다음 자리수에서 +1 버튼을 누르는 횟수를 감소시키기 위해 해당 자리수에서 +1을 반복하고, 다음 자리수에 1을 더해준다
  3. 해당 자리수가 6, 7, 8, 9라면 10이 될 때까지 +1을 반복하고, 다음 자리수에 1을 더해준다
static int solution(int storey) { // storey 층에서 0층으로 내려가는 데 필요한 마법의 돌의 최소 개수 answer
        int answer = 0;

        // 작은 자릿수부터 차례대로 정리. 매번 나머지를 계산하면 번거로움이 있으니 배열에 각 자리의 수를 저장
        // int형의 배열로 저장하기 위해 int -> String -> char[] -> int[]의 전환 과정을 거친다
        String s = String.valueOf(storey);
        char[] c = s.toCharArray();
        int[] input = new int[c.length];

        for(int i=0; i<c.length; i++){
            input[i] = c[i] - 48;
        }

        for(int i=input.length - 1; i >= 0; i--){
            int now = input[i];

            if(now >= 6){ // 해당 자릿수가 6, 7, 8, 9라면 0이 될 때까지 +1을 해주는 것이 이득
                answer += (10 - now);
                if(i-1 < 0){
                    answer++;
                } else {
                    input[i-1]++;
                }
            }
            else if(now <= 4){ // 해당 자릿수가 1, 2, 3, 4라면 0이 될 때까지 -1을 해주는 것이 이득
                answer += now;
            }
            else if(now == 5){ // 해당 자릿수가 5라면 다음 자릿수를 보고 판단
                if(i-1 < 0){ // 해당 자릿수가 마지막 자릿수라면
                    answer += now;
                } else{
                    if(input[i-1] < 5){
                        answer += now;
                    } else {
                        answer += now;
                        input[i-1]++;
                    }
                }
            }
        }

        return answer;
    }

 

 

'Algorithm > Programmers' 카테고리의 다른 글

[PRO] 프로그래머스 155651번: 호텔 대실(Java)  (0) 2023.09.06