728x90
코드 힌트
- 문제의 핵심: 최소한의 조작으로 층수를 0으로 만들기
- 이 문제는 각 자리 숫자를 더하거나 빼서 전체 storey 값을 0으로 만드는 과정에서, 최소한의 조작 횟수를 구하는 문제입니다. 한 자리씩 차례대로 내려가면서, 그 자리 숫자가 5보다 크거나 작을 경우에 따라 올리거나 내립니다.
- 각 자리 숫자 처리 방식
- 올림(UP): 만약 현재 자리 숫자가 5보다 크다면, 그 숫자를 올리는 것이 더 유리합니다. 예를 들어, 8인 경우 2를 더해서 올림 처리합니다. 이때 상위 자리 숫자가 하나 증가합니다.
- 내림(DOWN): 현재 자리 숫자가 5보다 작으면 내리는 것이 더 유리합니다. 예를 들어, 3인 경우 3만큼 내려서 0으로 만듭니다.
- 5일 경우
- 현재 자리 숫자가 정확히 5일 때는 다음 자리 숫자를 확인합니다. 만약 다음 자리 숫자가 5 이상이면 올리는 것이 유리하고, 그렇지 않으면 그대로 내립니다. 이는 다음 자리 수가 결과에 미치는 영향을 고려한 전략입니다.
- 전체 과정
- 문제의 과정은 오른쪽(1의 자리)부터 한 자리씩 처리해가며, 최소한의 횟수로 각 자리 수를 조작하여 0으로 만들려고 합니다. storey의 각 자리에 대해 숫자를 결정하며, 올림이나 내림에 따라 결과가 바뀌므로 이 부분을 잘 처리해야 합니다.
예시 설명
예시 1: storey = 564
- 1의 자리: 4
- 4는 5보다 작기 때문에 내립니다. 4를 더해서 처리하고, storey = 56.
- 10의 자리: 6
- 6은 5보다 크므로 올립니다. 4를 더해서 올림 처리하고, 상위 자리인 storey = 57.
- 100의 자리: 5
- 현재 5일 때, 상위 자리인 10의 자리가 7이므로 올립니다. 5를 더해서 처리하고, storey = 0.
예시 2: storey = 499
- 1의 자리: 9
- 9는 5보다 크므로 1을 더해서 올림 처리합니다. 상위 자리로 넘기며, storey = 50.
- 10의 자리: 9
- 다시 9는 5보다 크기 때문에 1을 더해서 올림 처리합니다. 상위 자리로 넘기며, storey = 5.
- 100의 자리: 5
- 상위 자리가 0이므로 더하지 않고 그대로 처리합니다. storey = 0.
정답은 더보기 클릭
더보기
class Solution {
public int solution(int storey) {
int result = 0;
// 목표층이 0이 될 때까지 반복
while (storey > 0) {
int floor = storey % 10;
// 현재 층의 1의 자리 숫자를 추출
storey /= 10;
// 층을 10으로 나눠서 자리 이동
if (floor > 5) {
// 1의 자리가 5보다 클 경우 올림
result += 10 - floor; // 10 - 현재 자리 수만큼 올려서 더함
storey++; // 올림을 반영해 상위 자리 수를 하나 증가
} else if (floor < 5){
// 1의 자리가 5보다 작으면 내림
result += floor; // 현재 자리 수만큼 더함
}
// 1의 자리가 정확히 5일 때 처리
else {
result += floor; // 5를 더함
if (storey % 10 >= 5) {
// 만약 다음 자리 수가 5 이상이면 올림 처리
storey ++;
}
}
}
return result; // 최종 최소 조작 수 반환
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] 호텔 대실 (1) | 2024.10.05 |
---|---|
[프로그래머스] 시소 짝꿍 (0) | 2024.10.03 |
[프로그래머스] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (4) | 2024.10.01 |
[프로그래머스] 연속된 부분 수열의 합 (0) | 2024.09.25 |
[프로그래머스] 큰 수 만들기 (0) | 2024.09.24 |