본문으로 바로가기

[level2]마법의 엘리베이터 JAVA

category 코딩테스트/programmers 2023. 1. 4. 14:49

https://school.programmers.co.kr/learn/courses/30/lessons/148653?language=java 

 

프로그래머스

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

programmers.co.kr

 

현재 층에서 (...-100, -10, -1, 1, 10, 100...) 를 사용하여  0 층에 도달하는 문제이다.

 

처음에는 dfs를 사용해야 하는 것인가? 고민하다 

이것은 숫자 배열을 이용해 if 조건을 걸어주면 된다는 결론이 나왔다.

 

1. 1의 자리수부터 정수 배열에 자리수의 값만 담는다.

2. 5를 기준으로 if 조건문 

  (n  < 5) 경우 빼기 하는 것이 더 적다.

  (n == 5) 경우 앞자리가 5이상이면 더하기, 5미만이면 빼기

  (n > 5) 경우 더하기 하는 것이 더 적다.

3. 맨 앞자리는 빼는 방법 밖에 없기 때문에 따로 풀어준다.

 

import java.util.*;

class Solution {
     
    static int min = Integer.MAX_VALUE;
    
    public int solution(int storey) {
        int answer = 0;
        
        ArrayList<Integer> list = new ArrayList<>();
        
        while(storey > 0){
            int tmp = storey%10;
            list.add(tmp);
            storey /=10;
        }
        
        
        int size = list.size();
        
        int[] arr = new int[size+1];
        
        for(int i = 0; i < size; i++){
            arr[i] = list.get(i);
        }
        
        for(int i = 0; i < size-1; i++){
            int tmp = arr[i];
            if(tmp < 5){
                answer += tmp;  
            } else if(tmp == 5){
                answer += tmp;
                if(arr[i+1] >= 5){
                    arr[i+1]++;
                }
            } else {
                answer += (10-tmp);
                arr[i+1]++;
            }
        }
        
        if(arr[size-1] <= 5){
            answer += arr[size-1];
        } else {
            answer += (11-arr[size-1]);
        }
        
        return answer;
    }
    
}