https://school.programmers.co.kr/learn/courses/30/lessons/148653?language=java
문제
현재 주어진 층수에서 10의 단위로만 오르거나 내릴 수 있을 때 0층으로 까지의 최소 횟수를 구하는 문제
풀이
1의 자리부터 시작해서 5 미만, 5일 때, 5 초과일 때를 기준으로 각 1층을 올라갈지 내려갈지 판단해야한다.
처음에는 첫 자리부터 시작해서 틀렸다
끝의 자리부터 시작해야 단위가 올라갔을 때의 처리를 해줄 수 있다.
5일 때에는 다음자리의 숫자에 따라 내려갈지 올라갈지 확인할 수 있다.
예를 들어, 현재 85층이라면 5층을 내려가고 다시 80층을 내려가는 경우보다 ( 13 번 )
5층을 더해 90층을 만들고, 해당 90층을 다시 +1 하여 100층을 만드는게 더 적다
ex ) 5 + 1 + 1 = 7
class Solution {
public int solution(int storey) {
int answer = 0;
int floor = 10;
while (storey > 0) {
int mod = storey % floor;
if (mod < 5) {
answer += mod;
storey = storey / floor;
} else if (mod == 5) {
int next = storey / floor;
if (next % floor >= 5) {
answer += 10 - mod;
storey = storey / floor + 1;
} else {
answer += mod;
storey = storey / floor;
}
}
else {
answer += 10 - mod;
storey = storey / floor + 1;
}
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 2023 KAKAO BLIND 코딩테스트 - 이모티콘 할인행사 (0) | 2023.04.20 |
---|---|
[프로그래머스] 광물 캐기 (자바) (0) | 2023.04.18 |
[프로그래머스] 2023 KAKAO BLIND - 택배 배달과 수거하기 (자바) (0) | 2023.04.17 |
[프로그래머스] 연속된 부분 수열의 합 (자바) (1) | 2023.04.13 |
[프로그래머스] 인사고과 (자바) (0) | 2023.04.12 |