외계행성의 나이

이윤설·2024년 2월 15일
0

제출코드(오답)

import java.util.*;

class Solution {
    public StringBuilder solution(int age) {

        List<Character> list = new ArrayList();
        list.addAll(Arrays.asList('a','b','c','d','e','f','g','h','i','j'));

        Map<Integer, Character> map = new HashMap<>();

        for (int i = 0; i < list.size(); i++) {
            map.put(i+1, list.get(i));
        }

        String ageString = String.valueOf(age); // "23"

        int[] intArray = new int[ageString.length()];

        for (int i = 0; i < ageString.length(); i++) {
            intArray[i] = Character.getNumericValue(ageString.charAt(i));
        } // {2,3}

        char[] charArray = new char[intArray.length];
        for (int i = 0; i < intArray.length; i++) {
            char c = map.get(i);
            charArray[i] = c;
        }

        StringBuilder sb = new StringBuilder();
        for (char c : charArray) {
            sb.append(c);
        }

//        String answer = "";
        return sb;
    }
}

-> 많은 에러가 발생한다.

모범답안

class Solution {
    public String solution(int age) {
        String answer = "";
        String[] alpha = new String[]{"a","b","c","d","e","f","g","h","i","j"};

        while(age > 0) {
            answer = alpha[age % 10] + answer;
            age /= 10;
        }

        return answer;
    }
}

String[] alpha 배열은 숫자 0부터 9까지를 'a'부터 'j'까지의 문자로 대응시킵니다.

while(age > 0) 루프를 통해 age의 각 자리수를 순차적으로 처리합니다.
age % 10 연산을 통해 age의 가장 오른쪽 자리수(일의 자리)를 얻습니다. 그리고 이 숫자를 alpha 배열의 인덱스로 사용하여 해당하는 문자를 얻습니다.

얻어진 문자를 answer 문자열의 앞쪽에 추가합니다. 이렇게 하면 age의 숫자가 거꾸로 처리되더라도, 최종적으로 answer에는 올바른 순서로 문자가 저장됩니다.

age /= 10 연산을 통해 age의 가장 오른쪽 자리수를 제거합니다.

age의 모든 자리수를 처리할 때까지 3단계부터 5단계를 반복합니다.
모든 자리수를 처리한 후, answer를 반환합니다.
예를 들어, age가 123이라면, 최종적으로 반환되는 answer는 "bcd"가 됩니다. 왜냐하면 1, 2, 3이 각각 'b', 'c', 'd'에 대응되기 때문입니다.

배운점

  • %10을 하면 숫자의 가장 오른쪽 값을 얻을 수 있다.
  • /=10을 하면 숫자의 가장 오른쪽 값을 제거한다.

age /= 10 연산은 정수 나눗셈을 수행하므로 결과는 소수점 이하를 버린 정수가 된다. 이를 통해 가장 오른쪽 자리수를 제거하게 된다.

예를 들어, age가 123이라고 가정하자.
처음에 age /= 10 연산을 수행하면, 123을 10으로 나눈 결과인 12.3의 소수점 이하를 버려 12가 된다.
따라서 age는 이제 12다. 즉, 가장 오른쪽 자리수인 3이 제거된 것이다.

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글