Algorithm/Java

프로그래머스 - 자연수 뒤집어 배열로 만들기 java :: 12932

고고마코드 2022. 2. 8. 23:06
반응형

문제 링크

코딩테스트 연습 - 자연수 뒤집어 배열로 만들기 | 프로그래머스 (programmers.co.kr)


문제 풀이

1번 풀이

public int[] solution(long n) {
    int len = (""+n).length();
    int[] arr = new int[len];

    for(int i=0; i<len; i++) {
        arr[i] = (int)(n%10);
        n/=10;
    }
    return arr;
}

어떤 자연수를 뒤집어도 길이는 변하지 않는다. (12345 -> 54321)

그러므로 자연수 n의 길이를 반환할 배열의 크기로 정한다.

자연수 n의 길이만큼 반복적으로 일의자리를 구하여 배열에 순서대로 저장한다.

  • 예시1. 자연수 n = 12345
    ✳️ n=12345, 일의자리: 5
    ✳️ n=1234, 일의자리: 4
    ✳️ n=123, 일의자리: 3
    ✳️ n=12, 일의자리: 2
    ✳️ n=1, 일의자리: 1

    • 일의자리를 구한 순서대로 배열에 삽입한 결과: 54321
  • 예시2. 자연수 n = 79513
    ✳️ n=79513, 일의자리: 3
    ✳️ n=7951, 일의자리: 1
    ✳️ n=795, 일의자리: 5
    ✳️ n=79, 일의자리: 9
    ✳️ n=7, 일의자리: 7

    • 일의자리를 구한 순서대로 배열에 삽입한 결과: 31597

테스트 처리 속도

  • 🔥 0 ~ 1ms

2번 풀이

public int[] solution(long n) {
    return new StringBuilder(String.valueOf(n)).reverse().chars().map(ch -> ch - '0').toArray();
}
  • public StringBuilder reverse()
    문자 시퀀스를 반대로 뒤집는다.

  • default IntStream chars()
    문자 시퀀스를 IntStream 으로 변환한다.

  • map(ch -> ch - '0')
    chars() 를 통해 변환된 IntStream 은 문자를 변환한 것이므로 0을 변환해도 정수 0이 아닌 문자 '0' 이다.
    그러므로 정수로 변환하기 위해서 ch - '0' 을 해야 한다.

테스트 처리 속도

  • 🔥 38 ~ 40ms

아무래도 String을 활용한 방법이다보니 1번 방법과 비교하면 실행 속도 차이가 꽤 있다.


반응형