[프로그래머스] 자연수 뒤집어 배열로 만들기 – 자바


프로그래머스 “자연수 뒤집어 배열로 만들기” 문제 해결과정입니다.

자연수 뒤집어 배열로 만들기

문제설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한사항

  • n은 10,000,000,000이하인 자연수입니다.

입출력 예

nresult
12345[5,4,3,2,1]

문제 해결과정

프로그래머스 코드

import java.util.*;

class Solution {
    public int[] solution(long n) {
		List<Integer> list = new ArrayList<>();
		
		for(int i = n.length-1; i >= 0; i--) {
			list.add((int) n[i]);
		}
		return Arrays.toString(list.toArray());
    }
}

문제는 간단했다. long 형태의 숫자 배열을 뒤집어서 출력하는 것인데, 왜 인지 프로그래머스에서 n.length가 long 형태에서는 사용할 수 없다고 말한다. 이클립스에서는 여러가지 테스트를 해봤는데… 때문에 정작 프로그래머스에서 해결된 코드는 아래 한 줄 코드 1뿐이다. 위 프로그래머스 코드한 줄 코드 2는 이클립스에서만 작동하고 프로그래머스에서는 length에러로 넘어가지 못했다. 그래도 설명하자면 먼저 숫자 배열을 담아줄 Integer의 리스트를 만들어주고, 끝에서부터 0까지 리스트에 담도록 한 뒤 출력한다.

한 줄 코드 1

class Solution {
    public int[] solution(long n) {
        return new StringBuilder(String.valueOf(n)).reverse().toString().chars().map(c -> c - '0').toArray();
    }
}

위 코드는 StringBuilder에서 valueOf로 n의 값을 문자열로 반환 한 뒤 뒤집는다. 이후 뒤집힌 문자열을 반환한 뒤 문자열 내의 각 문자를 IntStream으로 반환한다. map(c -> c – ‘0’)이 중요한데 예를 들어 아스키 코드에서 ‘5’는 53을 뜻한다. ‘0’은 48을 뜻한다. 여기서 문자 ‘5’를 문자 ‘0’으로 빼주게 되면 숫자 5가 반환된다. 이를 int배열화 하여 반환한다.

한 줄 코드 2

import java.util.stream.*;

class Solution {
    public int[] solution(long n) {
		
		return Arrays.toString(IntStream.rangeClosed(1,n.length).map(i -> (int)n[n.length-i]).boxed().toArray());
    }
}

IntStream에 rangeClosed 메소드로 반복문을 반환한 뒤 map으로 n의 끝부터 하나씩 배열화 한다.

정리

  1. StringBuilder로 n을 문자열화 한다.
  2. 문자열화 한 n을 뒤집은 뒤(reverse()) 문자열로 다시 반환(toString)
  3. chars로 문자를 IntStream화 한 뒤에 map에서 문자 ‘0’을 빼준다.
  4. 이후 배열화(toArray())

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.