728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/148653
해설
각 자리수에 있는 숫자들을 비교하되 각 숫자가 어떤지에 따라 올림이 발생하므로 가장 낮은 자리의 숫자부터 연산합니다.
int under = storey - (storey/10)*10;
storey/=10;
int형 숫자에 10을 나누고 곱하면 int의 특성상 1자리수가 사라진 수로 다시 나오므로 해당 연산을 통해 under는 항상 1의 자리 숫자가 나옴을 알 수 있습니다. 이후 본래 있던 값 storey를 10으로 나누어 가장 낮던 자리수를 지워줍니다.
이후 숫자에 대해 생각해보면 1씩 더하거나 뺴면서 가장 적은 연산수로 10 또는 0으로 만드려면
- 4이하인 경우 : 모두 뺴 0으로 만든다.
- 6이상인 경우 : 모두 더해 10으로 만든다.
- 5인 경우 : 10의 자리수에 따라 바뀐다
- 4이하인 경우 : 올림이 생기면 10의 자리수에서 손해가 생겨 모두 빼 0으로 만드는 것이 이득이다
- 5이상인 경우 : 올림이 생긴다면 10으로 만들기 편하도록 모두 더해 10으로 만든다
- 5인 경우 : 올림이 있다면 6이 되어 4번의 연산으로 가능하지만 올림이 없다면 5번의 연산으로 손해가되어 올려준다.
if(under <= 4) answer+=under;
else if(under >=6 ) {
answer += 10-under; storey++;
}
else if(under==5){
answer+=5;
if(storey - (storey/10)*10>=5) storey++;
}
주의점
코드
class Solution {
public int solution(int storey) {
int answer = 0;
while(storey!=0){
int under = storey - (storey/10)*10;
storey/=10;
if(under <= 4) answer+=under;
else if(under >=6 ) {
answer += 10-under;
storey++;
}
else if(under==5){
answer+=5;
if(storey - (storey/10)*10>=5) storey++;
}
}
return answer;
}
}
728x90
'[IT] 코딩테스트 > [문제 및 풀이] 프로그래머스' 카테고리의 다른 글
[프로그래머스] 테이블 해시 함수 / 자바(Java) (0) | 2023.08.30 |
---|---|
[프로그래머스] 시소 짝꿍 / 자바(Java) (0) | 2023.08.29 |
[프로그래머스] 숫자 변환하기 / 자바(Java) (0) | 2023.08.27 |
[프로그래머스] 무인도 여행 / 자바(Java) (0) | 2023.08.26 |
[프로그래머스] 호텔 대실 / 자바(Java) (0) | 2023.08.25 |