제한사항
- 1 ≤ storey ≤ 100,000,000
각 자리수의 값을 알아야 해서 최대 100,000,000을 10으로 계속 나눴을 때 9번만 돌면 되기 때문에 시간복잡도의 고민은 하지 않았다.
테스트 5,6,8,9에서 계속 실패했다. 테스트 코드를 여러경우 작성하는 와중에 45의 값이 실패하는 걸 찾았다.
실패하는 이유로는, 나머지가 5가 나왔을 때 무조건 다음 자리 층수로 넘어가는 코드로 작성했는데 45층 같은 경우 최단 횟수는 9번이 정답이지만 위에 풀이로는 최단 횟수가 11번으로 구해지는 코드였다.
public int solution(int storey) {
int answer = 0;
while( storey != 0 ){
// 1. storey 10의 나머지를 구한다.
int modStorey = storey % 10;
// 2. 나머지가 5인 경우
if( modStorey == 5 ){
// 2-1. answer에 5(나머지)를 더한다.
answer += modStorey;
// 2-2. 다음 자리 층수를 구해서 5~9이면 storey에 10을 더한다.(층수를 더했기 때문에)
int nextStorey = storey / 10 % 10;
if( nextStorey >= 5 ){
storey += 10;
}
}else if( modStorey < 5 ){
// 3. 나머지가 1~4이면 해당 값만큼 answer에 더한다.
answer += modStorey;
}else{
// 4. 6~9이면 10 - (나머지)의 값을 answer에 더하고 storey에 10을 더한다.
answer += 10 - modStorey;
storey += 10;
}
storey /= 10;
}
return answer;
}