YataNox
[Java] Lv.2 마법의 엘리베이터 본문
문제
문제 풀이
소스코드의 주석에도 달아놨지만
결국 1의 자리 수를 하나하나 검사해 나갈때 6이상이면 층 수를 올리고 4이하면 층 수를 내리면 된다.
이때 5인 경우가 있는데 이때는 다음 10의 자리수가 5이상인지 이하인지만 생각하면 된다.
5이상인 경우 층 수를 올리고 미만인 경우 내린다.
더보기
1의 자리수가 5일 때 10의 자리수가 5이상이면 올리는 이유는 층수를 올리는 경우 다음 자리수에 +1의 영향을 주게된다. 즉 5이상일 때 +1의 영향을 받아 10의 자리수를 올릴 때의 이동 층수를 하나 감소 시켜준다.
반대로 미만일 경우에는 올려서 10의 자리수에 영향을 주게되면 오히려 층수가 더 늘어나기 때문에 층 수를 내려준다.
자바 코드
class Solution {
public int solution(int storey) {
int answer = 0;
while (storey > 0) {
// 1의 자리수
int digit = storey % 10;
// 10으로 나눴을 때 몫으로 갱신
storey = storey / 10;
// 1의 자리수가 5일 경우
if (digit == 5) {
// 10의 자리 수가 5보다 클 경우
if (storey % 10 >= 5) {
answer = answer + (10 - digit);
storey++;
}
else {
answer = answer + digit;
}
}
// 1의 자리 수가 5보다 클 경우
else if (digit > 5) {
// 10 - digit 만큼 답을 더해준다.
answer = answer + (10 - digit);
// 다음 1의 자리수 (즉 현 10의 자리 수)를 +1 해준다.
storey++;
}
// 1의 자리 수가 5보다 작을 경우
else {
// 현재 1의 자리 수 만큼 답을 더해준다.
answer = answer + digit;
}
}
return answer;
}
}
'코딩 테스트 > PROGRAMMERS' 카테고리의 다른 글
[Java] Lv.2 테이블 해시 함수 (2) | 2024.06.13 |
---|---|
[Java] Lv.2 유사 칸토어 비트열 (0) | 2024.06.13 |
[Java] Lv.2 택배 배달과 수거하기 (0) | 2024.06.11 |
[Java] Lv2 시소 짝꿍 (2) | 2024.06.11 |
[Java] Lv.2 미로 탈출 (2) | 2024.06.06 |