본문 바로가기

코딩 테스트/PROGRAMMERS

[Java] Lv.2 마법의 엘리베이터

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

소스코드의 주석에도 달아놨지만

결국 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