[프로그래머스/Java] Lv.0 외계행성의 나이

febCho·2024년 3월 30일
0

코딩테스트

목록 보기
156/253
post-thumbnail

문제

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

- 제한사항

  • age는 자연수입니다.
  • age ≤ 1,000
  • PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.

풀이

문자열을 아스키코드로 변환해 연산하는 방법만 쓰다가 반대의 경우도 사용하려고 하니까 엄청 헷갈렸다.

우선 문자열을 새롭게 만드는 과정에서 메모리를 절약하기 위해 StringBuilder를 사용했다. 그리고 주어진 age를 자릿수를 기준으로 하나씩 떼어 문자로 변환해 주기 위해 ""를 더해 문자열로 만들어 주었다.

그 다음 for문으로 루프를 돌며 하나씩 char 타입으로 만들어 주는데, 핵심은

  1. charAt(i)로 해당 자릿수의 문자를 추출한다. → ex. age = 23, charAt(0) = 2

  1. 해당 문자를 아스키 코드 값으로 갖는 문자열을 구하기 위해 원래 숫자로 다시 가공해 준다. 이를 위해 문자 '0'을 뺀다.
    → '2'의 아스키 코드 : 50 - '0'의 아스키 코드 : 48 = 2

  1. 그 다음 계산된 숫자값에 'a'를 더한 뒤 (char)로 파싱하여 해당 자릿수 값에 해당하는 문자를 구한다.
    → 'a'의 아스키 코드 : 97 + 2 = 99 : 'c'의 아스키 코드

마지막으로 append()를 활용해 StringBuffer 객체에 구한 문자를 더한 다음, 반환 타입에 맞게 toString()으로 변환해 반환하면 된다.

class Solution {
    public String solution(int age) {
        StringBuilder answer = new StringBuilder();
        String ageStr = age + "";
        
        for(int i=0; i<ageStr.length(); i++){
            char alpha = (char)(ageStr.charAt(i) - '0' + 'a');
            answer.append(alpha);
        }
        
        return answer.toString();
    }
}

결과

profile
Done is better than perfect.

0개의 댓글