문제
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
class Solution {
public int[] solution(long n) {
int[] answer = {};
return answer;
}
}
제한사항
n은 10,000,000,000이하인 자연수입니다.
입출력 예
n | return |
12345 | [5,4,3,2,1] |
문제 풀이
분석
자릿수마다 숫자를 빼오는 방법 고민
- 수학적인 방법 & 문자열 변환 방법이 있음
- 문자열 변환보다 수학적인 방법을 이용하는게 알고리즘의 이해라고 생각해서 수학적인 방법 선택
숫자 직접 처리 방식: 성능과 메모리 사용 측면에서 더 효율적. 숫자가 크고 자릿수가 많을 때 성능 차이 두드러짐
문자열 변환 방식: 가독성과 코드의 직관성을 중시할 때 유용. 자릿수가 적은 작은 숫자에 대해서는 성능 차이가 거의 없으므로, 이해하기 쉬운 코드를 원할 때 선택
ArrayList를 이용해 add(int), 입력받은 수의 size() 체크하고 get(i)을 이용해 다시 빼서 배열에 담아줌
내 소스코드
import java.util.*;
class Solution {
public int[] solution(long n) {
// 각 자릿수를 담을 리스트 선언
List<Integer> digitList = new ArrayList<>();
// 숫자가 0이 될 때까지 반복
while (n > 0) {
int digit = (int)(n % 10); // 현재 자릿수를 구함
digitList.add(digit); // 리스트에 추가
n /= 10; // 다음 자릿수로 이동
}
// 리스트를 배열로 변환
int[] answer = new int[digitList.size()];
for (int i = 0; i < digitList.size(); i++) {
answer[i] = digitList.get(i);
}
return answer;
}
}
다른 예시 1
import java.util.stream.IntStream;
class Solution {
public int[] solution(long n) {
return new StringBuilder().append(n).reverse().chars().map(Character::getNumericValue).toArray();
}
}
다른 예시 2
class Solution {
public int[] solution(long n) {
String s = String.valueOf(n);
StringBuilder sb = new StringBuilder(s);
sb = sb.reverse();
String[] ss = sb.toString().split("");
int[] answer = new int[ss.length];
for (int i=0; i<ss.length; i++) {
answer[i] = Integer.parseInt(ss[i]);
}
return answer;
}
}
추가로 고민 할 부분
다른 예시 1에서 다양한 함수를 사용했다
return new StringBuilder()
.append(n) // 1. 숫자 n을 StringBuilder에 추가
.reverse() // 2. StringBuilder를 뒤집어 문자열을 반전시킴
.chars() // 3. 문자열을 IntStream(각 문자의 유니코드 값을 나타내는 스트림)으로 변환
.map(Character::getNumericValue) // 4. 각 문자를 해당하는 숫자 값으로 변환
.toArray(); // 5. 결과를 int 배열로 변환하여 반환
같은 문제여도 다양한 풀이법이 많다
Lv.1 / Java / 연습문제
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
'공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv. 1] 평균 구하기 - JAVA (0) | 2024.08.07 |
---|---|
[프로그래머스 Lv. 1] 짝수와 홀수 - JAVA (0) | 2024.08.06 |
[프로그래머스 Lv. 1] 자릿수 더하기 - JAVA (0) | 2024.08.04 |
[프로그래머스 Lv. 1] x만큼 간격이 있는 n개의 숫자 - JAVA (0) | 2024.08.03 |
[프로그래머스 Lv. 1] 약수의 합 - JAVA (0) | 2024.08.02 |