외계행성의 나이
https://school.programmers.co.kr/learn/courses/30/lessons/120834
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 문제
입국심사에서 나이를 말해야 하는데,
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 행성은 알파벳 소문자만 사용합니다.
2) 예시
age | result |
---|---|
23 | "cd" |
51 | "fb" |
100 | "baa" |
입출력 예 #1
age가 23이므로 "cd"를 return합니다.
입출력 예 #2
age가 51이므로 "fb"를 return합니다.
입출력 예 #3
age가 100이므로 "baa"를 return합니다.
3) 풀이
1. 클래스 선언을 해줍니다
● class Solution {
클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 정수 age를 매개변수로 하는 solution 메소드를 선언합니다.
solution은 문자열을 반환하므로 데이터타입을 String으로 합니다.
● public String solution(int age) {
3. 정수 age에 대한 제한사항을 확인합니다. 만족하지 않는다면 예외 처리합니다.
● if(age <= 0 || age > 1000){
throw new IllegalArgumentException("age는 자연수이고 1000 이하입니다.");
}
4. 먼저 문자로 표현된 나이를 문자열 answer로 선언하고, 빈 문자열로 초기화해줍니다.
그리고 나이를 표현하기 위한 알파벳들을 문자열 age962로 선언해줍니다. "a~j"
매개변수 int age를 문자열로 형변환시킨 후, split 메소드를 이용하여 큰따옴표를 추가하여 각 자릿수마다 나누어 ageArr 배열의 원소로 추가합니다.
● String answer = "";
String age962 = "abcdefghij";
String[] ageArr = String.valueOf(age).split("");
※ split 메소드
String 클래스에 속하는 메소드로, 문자열을 분할할 때 사용됩니다.
따라서 정수나 실수에는 직접 split 메소드를 사용할 수 없고, 문자열로 변환한 후 split을 사용해야 합니다.
예시)
int number = 245;
String numberStr = String.valueOf(number); // 정수를 문자열로 변환
String[] numberArr = numberStr.split(""); // 문자열을 각 문자로 분할
// numberArr은 ["2", "4", "5"]가 됩니다.
※ 데이터타입.valueOf메소드
- String.valueOf(정수나 실수): 정수나 실수를 문자열로 변환합니다.
- Integer.valueOf(문자열): 문자열을 정수로 변환합니다.
- Double.valueOf(문자열): 문자열을 실수로 변환합니다.
5. for문을 통해 ageArr 배열을 순회하며 각 자릿수의 값을 가져온 후, 정수로 형변환하여, age962 문자열의 charAt을 통해 정수로 형변환된 인덱스에 해당한 값을 가져옵니다.
그 값을 answer에 추가해주게 됩니다.
문자열의 +는 문자열 뒤에 문자가 추가되는 것이기 때문에 원하는 값에 도달하게 됩니다.
● for (int i = 0; i < ageArr.length; i++) {
answer += age962.charAt(Integer.valueOf(ageArr[i]));
}
return answer;
}
}
※ charAt 메소드란?
문자열에서 특정 위치에 있는 문자를 반환합니다. 각 문자는 인덱스로 접근할 수 있고, 인덱스는 0부터 시작합니다.
ex) str.charAt(0)은 문자열 str의 첫 번째 문자를 반환
4) 코드
class Solution {
public String solution(int age) {
if(age <= 0 || age > 1000){
throw new IllegalArgumentException("age는 자연수이고 1000 이하입니다.");
}
String answer = "";
String age962 = "abcdefghij";
String[] ageArr = String.valueOf(age).split("");
for (int i = 0; i < ageArr.length; i++) {
answer += age962.charAt(Integer.valueOf(ageArr[i]));
}
return answer;
}
}
'Programmers Coding Test > Java' 카테고리의 다른 글
[프로그래머스 120836] Java - 코딩테스트 입문 / 순서쌍의 개수 (0) | 2024.02.06 |
---|---|
[프로그래머스 120835] Java - 코딩테스트 입문 / 진료순서 정하기 (1) | 2024.02.02 |
[프로그래머스 120825] Java - 코딩테스트 입문 / 문자 반복 출력하기 (0) | 2024.02.01 |
[프로그래머스 120823] Java - 코딩테스트 입문 / 직각삼각형 출력하기 (2) | 2024.02.01 |
[프로그래머스 120822] Java - 코딩테스트 입문 / 문자열 뒤집기 (0) | 2024.02.01 |