문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
- n은 10,000,000,000이하인 자연수입니다.
입출력 예
첫 번째 시도
class Solution {
public int[] solution(long n) {
String str = Long.toString(n);
int[] answer = new int[str.length()];
for(int i = str.length(); i>0; i--){
answer[str.length()-i]= str.charAt(i-1);
}
return answer;
}
}
이클립스에서 코드 실행해서 로그 찍어 봤을 땐 분명 [5, 4, 3, 2, 1]로 나왔는데 뜬금없는 숫자가 나와서 당황!
보니까 str을 문자열의 형태로 만들었기 때문에 str.charAt(i-1)은 숫자가 아닌 문자이다.
그래서 아스키 코드로 변환해서 출력되었기 때문에 실패!
두 번째 시도
answer[str.length()-i]= str.charAt(i-1)-'0';
어떻게 해결할까 고민하다가 사실 다른 사람 코드 좀 찾아봤다
간단하게는 아스키코드로 0이 48이니까 48씩 빼주는 방법이 있어서 간단하게 해결했다.
어찌됐든 간에 내가 풀었던 방법의 포인트를 꼽자면
1. long 타입의 n을 문자열로 변환하여 인덱스별로 문자 반환
2. 역순으로 배열에 삽입해서 반환
3. 자료 타입 일치시키거나 형 변환 시켜주기!
추가적으로
다른 사람들의 풀이를 보면 StringBuilder의 reverse를 이용하는 경우가 많고,
이번 문제뿐만 아니라 다른 문제에서도 StringBuilder를 굉장히 많이 이용해서 한두줄로 간단하게 코드를 짜는 경우도 많았다.
아직 기본기가 부족하고 공부가 좀 더 필요하다고 절실히 느낌...!
'++ > 자료구조&알고리즘' 카테고리의 다른 글
[프로그래머스][PCCE 기출문제] 10번 / 데이터 분석 - 250121 (0) | 2023.12.12 |
---|---|
[프로그래머스][Lv.0] 짝수의 합 - 120831 (0) | 2023.12.08 |
[프로그래머스][Lv.1] 숫자 문자열과 영단어 - 81301 (0) | 2023.12.08 |
[프로그래머스][Lv.1] 달리기 경주 - 178871 (0) | 2023.11.20 |
[프로그래머스][Lv.0] 대소문자 바꿔서 출력하기 - 181949 (0) | 2023.11.20 |