Programmers/JAVA

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

giggs 2023. 1. 6. 13:49

 

 

 

1. 문제 설명

 

 

 

 


 

 

2. 문제 풀이 핵심이라 생각하는 점

  • 엘리베이터 버튼은 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이라는 점
  • 더해서 10을 만들던지 / 빼서 0을 만들던지 해야 하는데
  • 10을 만들면 위의 자릿수는 +1 된다는 점과 값이 5일 때의 처리가 관건 
  • 5보다 작다면 빼서 0을 만드는 것이 최소 횟수 일 것이고
  • 5보다 크다면 더해서 10을 만드는 것이 최소 횟수 일 것이다.
  • 5일 때는? - 한 자릿수 높은 값을 체크해보아야한다. ( 일의 자리면 십의 자릿수 체크 )
  • 한 자릿수 높은 값이 5보다 크거나 같다면? 10을 만들어 주는 것이 좋다. ( 수 증가로 더하는 횟수 감소 )
  • 한 자릿수 높은 값이 5보다 작다면? 0을 만들어 주는 것이 좋다. (  빼는 횟수 감소 )

 

 


 

 

3. 정답 코드 확인 및 활용 메소드 체크

 

 

3-1 : 정답 코드 확인

 

class Solution {
    public int solution(int storey) {
        int answer = 0;
        
        //0층에 도달하면 종료
        while(storey != 0) {
			
            //1의 자릿수의 값이 5보다 크다면-같다면-작다면에 따라 처리
			if(storey%10 > 5 ) {
				answer += (10 -(storey%10));
				storey += 10;
			}else if(storey%10 == 5 && storey%100 != 0 && storey%100 >= 50) {
				answer += 5;
				storey += 10;
			}else {
				answer += storey%10;
			}
			
			storey /= 10;
		}
	    
  
        return answer;
    }
}

 

 

 

 


 

 

4. 공부하고 싶은 다른 분의 풀이

  • 재귀 함수... 너란 녀석..
  • 공부하자.

 

class Solution {
    public int solution(int storey) {
          if (storey <= 5) return storey;

          int r = storey % 10;
          int q = storey / 10;

          return Math.min(r + solution(q), 10 - r + solution(q + 1));
    }
}