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

mul·2023년 9월 30일
0

코딩테스트연습

목록 보기
55/56

🔒문제

프로그래머스 Lv2. 연습문제 마법의 엘리베이터

🔑해결

최소한의 버튼을 눌러서 0층으로 이동하기 위해 필요한 마법의 돌 개수를 return하도록 solution함수를 작성하는 문제이다.

4이하면 빼고, 6이상이면 더하는 것이 이득이라는 것은 쉽게 알 수 있었다.
하지만 5일 경우 앞의 숫자를 보고 더할 지 뺄 지 판별해야 했다.

  1. 자리수 마다 판별하기 위해 storey를 문자열로 저장 후 int[]배열로 조각내어 저장
  2. 자리수가 6이상이면 더하는 것이 이득이므로
    2-1. 더한 만큼 count에 +
    2-2. 탐색하는 마지막 자리수라면 count++, 아니라면 다음 탐색할 숫자++
  3. 자리수가 5일 경우, 다음 탐색할 숫자가 5이상이라면 더하는 것이 이득, 아니라면 빼는 것이 이득이다
    3-1. 자리수가 5이고 다음 탐색할 숫자가 5이상이라면, 다음 탐색할 숫자++, 더한 만큼 count+
  4. 위 조건을 제외한 경우는 빼는 것이 이득인 경우로 뺀 만큼 count-

🔓코드

class Solution {
    public int solution(int storey) {
        int answer = 0;
        
        int count = 0;
        String ss = storey + "";
        int[] arr = new int[ss.length()];
        for (int i = 0; i < arr.length; i++) {
			arr[i] = ss.charAt(i) - '0';
		}
        
        for (int i = arr.length-1; i >= 0; i--) {
			if (arr[i] > 5) {
				count += 10 - arr[i];
				
				if (i == 0){
					count++;
				} else {
					arr[i-1]++;
				}
			} else if (arr[i] == 5 && i > 0 && arr[i-1] >= 5) {
				arr[i-1]++;
				count += 5;
			} else {
				count += arr[i];
			}
		}
        
        
        answer = count;
        
        return answer;
    }
}

0개의 댓글