본문 바로가기

프로그래머스 코딩(자바)/Level 0

Programmers Level 0 - 외계 행성의 나이

728x90

문제 설명

우주여행을 하던 머쓱이는 엔진 고장으로 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 행성은 알파벳 소문자만 사용합니다.

 

입출력 예ageresult

age result
23 "cd"
51 "fb"
100 "baa"

입출력 예 설명

입출력 예 #1

  • age가 23이므로 "cd"를 return합니다.

입출력 예 #2

  • age가 51이므로 "fb"를 return합니다.

입출력 예 #3

  • age가 100이므로 "baa"를 return합니다.

 

1
2
3
4
5
6
7
8
9
class Solution {
    public String solution(int age) {
        String answer = "";
        for(char ch : (age+"").toCharArray()) {
            answer += (char)('a' + (ch-'0'));
        }
        return answer;
    }
}

 

 

 ASCII 코드 표를 검색해 보면

 A ~ Z(대문자)  : 65 ~ 90
 a ~ z(소문자)  : 97 ~ 122
 0 ~ 9(숫자) : 48 ~ 57 

입니다.

숫자 + 문자열의 결과는 문자열입니다.
문자열로 만들고 char Array 를 만들어 반복합니다.
(age+"").toCharArray()

 char형의 숫자를 1자리 정수로 바꾸는 방법입니다. 빼기 '0'을 해주면 ASCII 코드값으로 변환되어 계산되므로 숫자가 됩니다.
 '0' - '0' = 48 - 48 = 0
 '1' - '0' = 49 - 48 = 1
 '2' - '0' = 50 - 48 = 2
 .
 .
 '9' - '0' = 57 - 48 = 9

 그렇다면 숫자를 char로 바꾸는 방법은 더하기 '0'을 해주면 된다.
 (char)(0 + '0') = (char)(0 + 48) = (char)(48) = '0'
 (char)(1 + '0') = (char)(1 + 48) = (char)(49) = '1'
 .
 ,
 (char)(9 + '0') = (char)(9 + 48) = (char)(57) = '9'
 
 마찬가지로 영문자와 숫자를 더하면 다음과 같이 계산됩니다.
 (char)('a' + 0)  = (char)(97 + 0) = (char)(97) = 'a'
 (char)('a' + 1)  = (char)(97 + 1) = (char)(98) = 'b'
 .
 .
 (char)('a' + 25)  = (char)(97 + 25) = (char)(122) = 'z' 

 위의 방법으로 숫자를 영문자로 바꾸면 되는 문제입니다.
 (char)('a' + (ch-'0'));

 위에서 나온 문자를 계속 더해주면 문제가 해결됩니다.

 

1
2
3
4
5
6
7
8
import java.util.stream.Collectors;
class Solution {
    public String solution(int age) {
        return (age+"").chars()
            .mapToObj(operand -> ((char) (49 + operand))+"")
            .collect(Collectors.joining());
    }
}
 

 

 Stream을 이용하여 풀어도 됩니다.
 chars()를 이용하여 IntStream을 만들고 
 maptoObj()로 숫자 1개를 문자로 변환하여  String<Stream>을 만든 후
 collect(Collectors.joining()) 로 문자열을 최종 생성합니다.

 

728x90