<문제 제시>
<문제설명>
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
<예시 입출력>
<문제 해결 과정>
암호해독과 마찬가지로 하나의 문자에 다른 문자가 대응되는 문제이다.
입력받는 숫자에 따라 "문자"를 구성하여 리턴하면 되었다.
solution()함수 외로 planet() 함수를 만들어 그 안에 switch-case문으로 대응되는 문자를 작성하고
필요시마다 함수를 호출하여 그 값을 변환하면 되었다.
String answer = "";
// 나이를 알파벳으로 말하는 행성
// a = 0, b = 1... j = 9
// ex) 23살은 cd
int t1, t2, t3, t4;
// t1 = 천의 자리, t2 = 백의 자리, t3 = 십의 자리, t4 = 일의 자리
// 나이가 일의 자리일 경우
if(0 < age && age < 10){
t4 = age / 1;
answer += planet(t4);
}
t1, t2, t3, t4를 두고 숫자의 자릿수를 분석한다. 각 자릿수별로 분석하여 하나하나 바꿔놓은 후 누적하는 것이
효율적이라고 생각하였다. 나이가 일의자리일 경우 planet 함수에 int num을 보내고 case에 따라 alphabet = '?'을 업데이트하여
return alphabet을 해주었다.
// 나이가 백의 자리일 경우
else if(100 <= age && age < 1000){
t2 = age / 100;
age %= 100;
answer += planet(t2);
t3 = age / 10;
age %= 10;
answer += planet(t3);
t4 = age / 1;
answer += planet(t4);
return answer;
}
100의 자리일 경우에는 t2, t3, t4가 이러한 방식으로 변환이 된다.
// 나이가 1000살일 경우
else if(age == 1000){
answer = "baaa";
return answer;
}
나이는 1000살이하라고 제한되었기 때문에 1000일때의 값만 처리해주면 나머지는 999 이하이므로
백의자리 처리만 조건문에 작성해주면 되었다.
<전체코드>
public class planet_age {
public static char planet(int num){
char alphabet = 0;
switch(num){
case 0 : alphabet = 'a';
break;
case 1 : alphabet = 'b';
break;
case 2 : alphabet = 'c';
break;
case 3 : alphabet = 'd';
break;
case 4 : alphabet = 'e';
break;
case 5 : alphabet = 'f';
break;
case 6 : alphabet = 'g';
break;
case 7 : alphabet = 'h';
break;
case 8 : alphabet = 'i';
break;
case 9 : alphabet = 'j';
break;
}
return alphabet;
}
public static String solution(int age) {
String answer = "";
// 나이를 알파벳으로 말하는 행성
// a = 0, b = 1... j = 9
// ex) 23살은 cd
int t1, t2, t3, t4;
// t1 = 천의 자리, t2 = 백의 자리, t3 = 십의 자리, t4 = 일의 자리
// 나이가 일의 자리일 경우
if(0 < age && age < 10){
t4 = age / 1;
answer += planet(t4);
}
// 나이가 십의 자리일 경우
else if(10 <= age && age < 100){
t3 = age / 10;
age %= 10;
answer += planet(t3);
t4 = age / 1;
answer += planet(t4);
return answer;
}
// 나이가 백의 자리일 경우
else if(100 <= age && age < 1000){
t2 = age / 100;
age %= 100;
answer += planet(t2);
t3 = age / 10;
age %= 10;
answer += planet(t3);
t4 = age / 1;
answer += planet(t4);
return answer;
}
// 나이가 1000살일 경우
else if(age == 1000){
answer = "baaa";
return answer;
}
return answer;
}
public static void main(String[] args) {
int age = 23;
System.out.println(solution(age));
}
}
최대공약수, 최소공배수를 구하는 문제와 같이 함수를 한개 더 작성하여 기능별로 호출하는 것에 익숙해져야했다.
숫자는 자릿수를 % 와 / 로 잘라낼 수 있기때문에 자릿수별로 처리하는 것이 주요했다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120834
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '대문자와 소문자' - Java (0) | 2023.04.26 |
---|---|
[프로그래머스] '배열 뒤집기' - Java (0) | 2023.04.17 |
[프로그래머스] 'OX 퀴즈' - Java (0) | 2023.04.16 |
[프로그래머스] '다음에 올 숫자' - Java (0) | 2023.02.24 |
[프로그래머스] '최빈값 구하기' - Java (0) | 2023.02.24 |