https://school.programmers.co.kr/learn/courses/30/lessons/148653
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
접근법
- 입력이 최대 1억이므로 O(n) 미만의 알고리즘을 선택해야한다 (dp도 될듯?)
- storey의 각 자리수를 보며 계산했다. 층 수는 1 ~ 4, 5, 6 ~ 9 로 패턴을 파악할 수 있다.
- 1 ~ 4는 그냥 0층으로 가면된다
- 5는 윗 자리수를 고려해야한다
- 6 ~ 9는 10층으로 올라가서 0으로 간다
- 위 패턴에서 1,3은 직관적으로 납득할 수 있지만 5는 좀 다르다.
- 예를 들어 555의 경우
- 550, 560 으로 가는경우 모두 5개의 마법의 돌이 필요하다
- 500, 600 으로 가는경우 각각 5, 4개의 마법의 돌이 필요하다
- 0으로 가는 경우 모두 5개의 마법의 돌이 필요하다
- 이처럼 현재 자리수가 5인경우엔 바로 윗자리수가 5이상이라면 올라가는 방법이 최소이다.
- 마지막 자리수의 5는 내려가는게 최소이다.
코드
class Solution {
public int solution(int storey) {
int ans = 0;
while(storey > 0){
int cur = storey % 10;
storey /= 10;
if(cur == 5 && storey % 10 >= 5 ){
//위 자리수가 5이상이면 올라간다
storey ++;
ans += 10 - cur;
}else if (cur >= 6){
//올라 간다
storey ++;
ans += 10 - cur;
}else{
//바로 내려 간다
ans += cur;
}
}
return ans;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] LV 2 메뉴리뉴얼 (2) | 2024.10.29 |
---|---|
[프로그래머스] LV 3 불량사용자 (0) | 2024.10.28 |
[프로그래머스] LV 3 스티커 모으기(2) (2) | 2024.10.26 |
[프로그래머스] LV 2 두 큐 합 같게 만들기 (0) | 2024.10.26 |
[프로그래머스] LV 3 기지국 설치 (2) | 2024.10.24 |