- 문제
현재의 층수인 int 형이 주어지고 이를 +-10^n층을 옮겨 다니며 0층으로 이동하는 최수 횟수를 구하는 것이다. 10^n층을 옮기는데 1의 횟수가 추가된다.
- 입력
현재 층수가 입력으로 주어진다.
1 <= storey <= 100,000,000
- 풀이
10^0의 값인 1층부터 0으로 맞추며 storey값이 0이 될 때까지 %10, /=10을 해주며 구하면 된다고 생각했다.
5층 이하인 경우 현재 1의 자리 층수만을 더 해준다.
answer += rest;
6층 이상인 경우 (10-현재 1의 자리 층수)만을 더 해주며 storey에 1을 더해준다.
answer += (10-rest);
storey++;
- 오답 코드
class Solution {
public int solution(int storey) {
int answer = 0;
while(storey != 0) {
int rest = storey%10;
storey /= 10;
if(rest <= 5) {
answer += rest;
} else {
storey++;
answer += (10-rest);
}
}
return answer;
}
}
하지만, 해당 코드는 정확도에서 문제가 발생했다.
문제는 1의 자리 수가 5일 때 발생한다. 만약, storey 값이 55라고 가정해보자. +5를 해도, -5를 해도 총 횟수는 10으로 문제가 발생하지 않는다. 하지만, storey 값이 195라고 가정해보자. +5를 하면 200이되고 총 7번만에 0층으로 간다. 하지만, -5를 하면 총 8번만에 0층으로 간다.
위의 문제를 해결하는 방법은 1의 자리 수가 5인 경우 10을 나눈 storey 값의 1의 자리 수가 5 이상인 경우 아래의 작업을 해야한다.
storey++;
answer += (10-rest);
- 정답 풀이
class Solution {
public int solution(int storey) {
int answer = 0;
while(storey != 0) {
int rest = storey%10;
storey /= 10;
if(rest <= 5) {
if(rest == 5 && storey%10 >= 5) {
storey++;
answer += (10-rest);
} else {
answer += rest;
}
} else {
storey++;
answer += (10-rest);
}
}
return answer;
}
}
'algorithm' 카테고리의 다른 글
[프로그래머스/Java] 소수 찾기 - Level 2 (0) | 2024.05.28 |
---|---|
[프로그래머스/Java] 시소 짝꿍 - Level 2 (0) | 2024.05.08 |
[프로그래머스/Java] 호텔 대실 - Level 2 (0) | 2024.05.06 |
[BOJ/JAVA] 백준 1939번 : 중량제한 (0) | 2024.02.04 |
[BOJ/JAVA] 백준 1753번 : 최단경로 (0) | 2024.01.22 |