https://programmers.co.kr/learn/courses/30/lessons/12932
소스
1 2 3 4 5 6 7 8 9
| public int[] solution(long n) { List<Long> list = new ArrayList<Long>(); while (n > 0) { list.add(n % 10); n /= 10; }
return list.stream().mapToInt(i -> (int) (long) i).toArray(); }
|
흐름
- n은 10,000,000,000이하인 자연수이므로 몇 자리의 수가 올지 알 수 없으므로 배열이 아닌 ArrayList를 생성
- n mode 10한 값을 저장하고 n을 10 나눔
- ex) 12345 mod 10 = 5, 12345 / 10 = 1234
- List를 stream()을 활용하여 int array로 변경함
다른 풀이
1 2 3 4 5 6 7 8 9 10
| public int[] solution(long n) { int[] arrays = new int[String.valueOf(n).length()]; int i = 0; while (n > 0) { arrays[i++] = (int) (n % 10); n /= 10; }
return arrays; }
|
- n이 몇 자리의 수가 올지 알 수 없으므로 n을 String으로 변환 후 String의 length를 구해서 array의 크기를 구함
- 이하 상동
시간 비교
첫 번째 풀이
번호 |
속도 |
테스트 1 |
통과 (5.56ms, 50.8MB) |
테스트 2 |
통과 (5.78ms, 50.2MB) |
테스트 3 |
통과 (5.51ms, 50.9MB) |
테스트 4 |
통과 (4.88ms, 52.9MB) |
테스트 5 |
통과 (6.73ms, 52.3MB) |
테스트 6 |
통과 (5.79ms, 52.6MB) |
테스트 7 |
통과 (6.36ms, 50.7MB) |
테스트 8 |
통과 (5.06ms, 50.7MB) |
테스트 9 |
통과 (5.75ms, 52.5MB) |
테스트 10 |
통과 (4.99ms, 50.6MB) |
테스트 11 |
통과 (5.25ms, 52.7MB) |
테스트 12 |
통과 (5.65ms, 52.4MB) |
테스트 13 |
통과 (5.75ms, 55MB) |
두 번째 풀이
번호 |
속도 |
테스트 1 |
통과 (1.34ms, 52.5MB) |
테스트 2 |
통과 (1.57ms, 49.9MB) |
테스트 3 |
통과 (1.52ms, 50.3MB) |
테스트 4 |
통과 (1.36ms, 53.1MB) |
테스트 5 |
통과 (1.52ms, 52.3MB) |
테스트 6 |
통과 (1.42ms, 52.4MB) |
테스트 7 |
통과 (1.52ms, 50.4MB) |
테스트 8 |
통과 (1.43ms, 50.4MB) |
테스트 9 |
통과 (1.37ms, 52.2MB) |
테스트 10 |
통과 (1.50ms, 50.2MB) |
테스트 11 |
통과 (1.42ms, 49.9MB) |
테스트 12 |
통과 (1.72ms, 52.2MB) |
테스트 13 |
통과 (1.73ms, 50.7MB) |
- Stream()이 생각보다 더 느리게 동작하는 듯 싶다.