프로그래머스 마법의 엘리베이터 [JAVA] - 23년 1월 12일

Denia·2023년 1월 12일
0

코딩테스트 준비

목록 보기
135/201

핵심 로직

  1. 각 자리수에 있는 숫자들을 비교해야한다.
  2. 숫자가 4이하로 작으면 => 빼는게 이득
  3. 숫자가 6이상으로 크면 => 더하는게 이득 (그리고 앞자리에 1을 더해줘야함)
  4. ★★★★★ 판단해야 5는 앞자리를 보고 결정해야함 ★★★★★
    • 앞 자리가 4이하면 현재 자리수의 5는 빼는게 이득 / 앞 자리가 6 이상이면 현재 자리수의 5는 더하는게 이득

Code

//마법의 엘리베이터

//절댓값이 10 ^ c ( c >= 0 인 정수)
//더한 값으로 이동
//0보다 작으면 엘리베이터는 움직이지 않습니다.
//0층이 가장 아래층 -> 엘리베이터 와 민수 모두 0층

//절반보다 크면 더해서 큰 값을 만드는게 이득
//절반보다 작으면 빼서 작은 값을 만드는게 이득

class Solution {
    public int solution(int storey) {
        int answer = 0;

        String stVal = String.valueOf(storey);
        char[] chars = stVal.toCharArray();
        int[] ints = new int[chars.length];
        for (int i = 0; i < chars.length; i++) {
            ints[i] = chars[i] - '0';
        }

        for (int i = ints.length - 1; i >= 0; i--) {
            int anInt = ints[i];

            if (anInt == 10) {
                if (i - 1 < 0) {
                    answer += 1;
                    continue;
                }

                ints[i - 1]++;
                continue;
            }

            if (anInt >= 6) {
                answer += (10 - anInt);
                if (i - 1 < 0) {
                    answer += 1;
                    continue;
                }
                ints[i - 1]++;
            } else if (anInt <= 4) {
                answer += anInt;
            } else if (anInt == 5) {
                if (i - 1 < 0) {
                    answer += 5;
                    continue;
                } else {
                    if (ints[i - 1] < 5) {
                        answer += anInt;
                    } else {
                        answer += 5;
                        ints[i - 1]++;
                    }
                }
            }
        }

        return answer;
    }
}

profile
HW -> FW -> Web

0개의 댓글