마이의 개발 블로그

[프로그래머스] 마법의 엘리베이터 (Java) 본문

코딩테스트/프로그래머스

[프로그래머스] 마법의 엘리베이터 (Java)

개발자마이 2023. 2. 14. 22:45
반응형

 

 

프로그래머스

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

programmers.co.kr

예외사항이 너무 많은데 테스트케이스 오픈이 안 되어있어 다른 사람들의 힌트를 참고하여 케이스를 하나씩 때려잡아야 했던 문제이다(코드참조 x). 그래서 그런지 5점이나 주긴 했는데 풀어놓고도 딱히 다른 문제풀이에 도움이 될 것 같진 않다는 인상을 많이 받았다.

 

- 주어진 숫자 storey를 오른쪽에서부터 한 자리씩 탐색함

- 자릿수가 0~4일 때는 빼서 내림하는게 유리함 (첫 번째 if문)

- 자릿수가 6~9일 때는 더해서 올림하는게 유리함 (두 번째 if문)

- 자릿수가 5일 때

1) 직전 자릿수(현재의 오른쪽 자릿수)가 6 이상일 경우 그 자리(6이상인 자리)에서 올림해서 현재 자릿수를 증가시키는게 유리함 (prev >= 6)

2) 직전 자릿수가 없는 경우(첫 번째 자리인 경우) 그 다음 자릿수(현재의 왼쪽 자릿수)가 5보다 큰 경우 올림하는 게 유리함 (prev == -1)

 

Note

- 중복을 제거하여 코드 길이를 짧게 작성할 수도 있었지만 내가 작성한 로직의 가시성을 고려하여 이대로 제출했다.

class Solution {
    public int solution(int storey) {
        int answer = 0;
        int prev = -1;
        
        while(storey > 0){
            int digit = storey % 10;
            if(digit < 5){
                answer += digit;    
            }else if(digit > 5){
                answer += 10 - digit;
                storey += digit;
            }else if(digit == 5){
                answer += digit;
                if(prev >= 6){
                    storey++;
                }
                if(prev == -1){
                    if((storey / 10) % 10 >= 5){
                        storey += digit;    
                    }
                }
            }
            storey /= 10;
            prev = digit;
        }
        
        return answer;
    }
}
반응형
Comments