99클럽 코테 스터디 23일차 TIL - [프로그래머스] 마법의 엘리베이터 (Java)

seri·2024년 8월 13일
0

코딩테스트 챌린지

목록 보기
47/62
post-custom-banner

📌 오늘의 학습 키워드

[프로그래머스] 마법의 엘리베이터 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/148653

📌 공부한 내용 본인의 언어로 정리하기

문제 탐색하기

입력 : 엘리베이터가 있는 층을 나타내는 정수 storey (1 ≤ storey ≤ 100,000,000)
출력 : 0츠응로 가기 위해 필요한 마법의 돌의 최소값

가능한 시간복잡도

O(log n)

알고리즘 선택

그리디

📌 코드 설계하기

  1. digit 변수에 현재 자리수를 저장하고, 이를 기준으로 연산을 결정한다.
  2. digit이 5보다 크거나, digit이 5이면서 다음 자리도 5 이상일 때는 반올림을 수행한다. 이 경우 10 - digit만큼 더해서 0으로 만들고, storey를 1 증가시켜 다음 자리로 올림한다.
  3. 그 외의 경우에는 단순히 digit만큼 빼서 0으로 만든다.
  4. answer을 출력한다.

📌 오늘의 회고

어떤 문제가 있었고, 나는 어떤 시도를 했는지

없음

어떻게 해결했는지

없음

무엇을 새롭게 알았는지

내일 학습할 것은 무엇인지

구현

📌 정답 코드

public class Solution {
    public int solution(int storey) {
        int answer = 0;
        
        while (storey != 0) {
            int digit = storey % 10; // 현재 자리의 숫자
            storey /= 10; // 다음 자리 준비
            
            if (digit > 5 || (digit == 5 && (storey % 10) >= 5)) {
                // 반올림이 유리한 경우
                answer += 10 - digit; // 10까지의 거리 더하기
                storey++; // 다음 자리 올림
            } else {
                // 내림이 유리한 경우
                answer += digit; // 현재 자리에서 빼는 연산
            }
        }
        
        return answer;
    }
}
profile
꾸준히 정진하며 나아가기
post-custom-banner

0개의 댓글