프로그래머스 코딩테스트 연습 입문단계 '외계행성의 나이' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120834
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓ 문제 설명
우주여행을 하던 머쓱이는 엔진 고장으로 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 행성은 알파벳 소문자만 사용합니다.
입력
23
출력
"cd"
// age가 23이므로 "cd"를 return합니다.
🔍 알고리즘 구상
- 매개변수로 받은 age를 자리수대로 자른다
- 자리수대로 자른 age를 해당하는 문자의 아스키코드의 숫자로 만든다
- char타입으로 변환한다
- String으로 변환한 뒤 return한다
자리수대로 자르는 과정이 어려울 것 같았습니다.
✏️ 직접 구현한 코드
import java.util.*;
class Solution {
public String solution(int age) {
String answer = "";
ArrayList<Character> l = new ArrayList<>();
for(int i = age; i > 0; i /= 10) { // 23 2
l.add(0,(char)((i % 10)+97));
}
for(int i = 0; i < l.size(); i++) {
answer += String.valueOf(l.get(i));
}
return answer;
}
}
🗣️ 코드 설명
- 결과를 더 유동적으로 저장하기 위해 배열보다, 리스트를 사용했습니다. Character타입의 데이터를 저장할 리스트를 선언했습니다.
- i가 age값부터 10씩 나눠지지고, 0보다 클 때까지만 반복하는 첫 번째 for문을 만들었습니다.
- 첫 번째 for문안에서는 i를 10으로 나눈 나머지값에 97을 더하고 그 값을 char로 명시적형변환을 했습니다. 알파벳 소문자의 아스키 코드를 활용한 것입니다(a의 아스키코드 == 97).
- 또 첫 번째 for문에 리스트에 값을 넣을 때, 마지막에 넣지 않고 가장 앞자리에 값을 넣도록 앞에 인덱스값을 주었습니다.
- 두 번째 for문은 i 값이 리스트의 사이즈보다 작을 때까지 증가하며 반복하는 두 번째 for문을 만들었고, 그 안에서 리스트의 값을 get() 메서드로 받아 String으로 변환한 뒤, answer값에 더했습니다.
🔥 다른 사람의 코드
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;
}
}
이 분은 age의 자리수들을 인덱스로 활용했네요.
age의 자리수를 구하는 방법은 while문을 쓴 것과 for문을 쓴 것만 다르고 제 코드와 같습니다!!
그리고 지금은 list를 활용하는 것을 연습하고 싶어서 list를 자주 사용하고 있는데,
다음에는 list보다 배열을 더 활용해 봐야겠습니다.
⭐ 기억하고 넘어갈
- 자리수 구하는 알고리즘
반복문을 이용하고, 10을 나눈 몫과 나머지를 활용한다.
- list에 지정한 인덱스로 add하는 방법
ArrayList<Character> l = new ArrayList<>(Arrays.asList('강','아','지'));
l.add(1,'A');
// l == ['강','A','아','지']
- String.valueOf()
배열만 String으로 변환할 수 있는 줄 알았는데, list의 값도 변환할 수 있다.
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 프로그래머스 - 피자 나눠 먹기 (3) (0) | 2023.03.31 |
---|---|
[JAVA] 프로그래머스 - 숨어있는 숫자의 덧셈 (1) (2) | 2023.03.29 |
[JAVA] 프로그래머스 - 문자열 정렬하기(2) (0) | 2023.03.28 |
[JAVA] 배열을 문자열로 / 문자열을 배열로 (0) | 2023.03.28 |
[JAVA] 메서드 - toCharArray() (0) | 2023.03.28 |