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');
이런거는 이제 바로바로 자동으로 생각없이 나와야한다.