728x90
반응형
해당 문제는 storey(층 번호)를 0층으로 만들기 위해 엘리베이터 버튼을 최소 몇 번 눌러야 하는지를 구하는 문제다.
엘리베이터 버튼을 누를 때 한 자리씩 조정할 수 있으며, 5 이상의 숫자는 올림, 4 이하의 숫자는 내림하는 방식으로 최소 횟수를 구한다. 또한 낮은 자리의 반올림이 높은 자리에 영향을 줄 수 있으므로 낮은 자리부터 높은 자리로 계산한다.
예를 들어,
- storey = 16 → 6을 올림(4) →20 → 2을 내림(2) → 0 (총 6번)
- storey = 2554 → 4 내림(4) → 2550→ 5 올림(5) →2600 → 6 올림(4) → 3000 → 3을 내림(3) → 0(총 16번)
#include <iostream>
#include <cmath>
using namespace std;
int solution(int storey) {
int answer = 0; // 버튼 클릭 횟수를 저장할 변수
while (storey > 0) { // storey가 0보다 작을 때까지 반복
int lastDigit = storey % 10; // storey의 마지막 자리수를 구함
int nextDigit = (storey / 10) % 10; // storey의 마지막 자리 이전 자리수를 구함
// 마지막 자리가 6 이상이면 올림, 5 이하이면 내림
if (lastDigit > 5 || (lastDigit == 5 && nextDigit >= 5)) {
// 올림 처리: 10 - lastDigit를 더하여 올림을 수행
storey += 10 - lastDigit;
} else {
// 내림 처리: lastDigit를 빼서 내림을 수행
storey -= lastDigit;
}
storey /= 10; // 마지막 자리를 제거하고 다음 자리로 이동
// 클릭 횟수를 추가: 버튼 클릭 횟수는 해당 자리수에서 가장 작은 버튼 횟수
answer += min(lastDigit, 10 - lastDigit);
}
return answer; // 계산된 최소 버튼 클릭 횟수를 반환
}
728x90
반응형
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
코딩테스트 : 전력망을 둘로 나누기 (0) | 2025.03.01 |
---|---|
코딩테스트 : 시소 짝꿍 (0) | 2025.03.01 |
코딩테스트 : 삼각 달팽이 (0) | 2025.02.09 |
코딩테스트 : 큰 수 만들기 (0) | 2025.02.09 |
코딩테스트 : 두 큐 합 같게 만들기 (0) | 2025.02.05 |