마법의 엘리베이터

Seongjin Jo·2023년 8월 5일
0

프로그래머스 LV2

목록 보기
26/28

문제

풀이

import java.util.*;
class Solution {
    public int solution(int storey) {
        int answer = 0;
        boolean flag = false;
        char[] ctr = Integer.toString(storey).toCharArray(); //2 5 5 4

        for(int i=ctr.length-1; i>=0; i--){
            if(flag){
                ctr[i] = (char) (Integer.valueOf(ctr[i]) + 1); 
                flag=false;
            }
            
            if(Integer.valueOf(ctr[i]-'0') < 5){
                answer += Integer.valueOf(ctr[i]-'0');
            }
            else if(Integer.valueOf(ctr[i]-'0') > 5){
                if(i==0) answer+=1;
                answer += (10 - Integer.valueOf(ctr[i]-'0'));
                flag = true;
            }
            
            // 이 문제의 핵심 : 5인 경우에 앞자리 수가 4이하면 그냥 내리는게 더 최솟값이된다.
            else if(Integer.valueOf(ctr[i]-'0') == 5){
                if(i>0 && Integer.valueOf(ctr[i-1]-'0') <= 4){
                    answer += Integer.valueOf(ctr[i]-'0');
                }
                else {
                    answer += (10 - Integer.valueOf(ctr[i]-'0'));
                    flag = true;
                }
            }
        }
              
            
        return answer;
    }
}

문제 보자마자 어떻게 풀지 조금 생각하는데 5분도 안걸리는 쉬운? 문제였다.
코드 구현은 생각보다 복잡해서 20분 정도 걸렸다고 생각한다. 근데 몇몇 테스트 케이스에 대해서 통과를 받지 못했다.

왤까 생각을 해봤는데 , 현재 자리수가 5인 경우에 앞자리가 4면 내려주는게 더 효율적인데 그냥 싹다 5 밑이면 내리고 5이상이면 올리는 식으로 코드를 짜서 문제의 함정에 걸린게 아닌가싶다.

일단 몇몇 테스트케이스가 통과되지 않을 경우에는 내 코드가 통과되지 못하는 경우를 생각해봐야한다. 여기서 오래걸리면 이 문제는 못푸는거다.
좀 걸렸지만 다행히 찾아서 잘 해결했다.

그리고

1. intToChar
ctr[i] = (char) (Integer.valueOf(ctr[i]) + 1); 

2. charToInt
int ~~ = Integer.valueOf(ctr[i]-'0');

이런거는 이제 바로바로 자동으로 생각없이 나와야한다.

0개의 댓글