Language/JAVA

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

paran21 2022. 1. 18. 00:32

https://programmers.co.kr/learn/courses/30/lessons/12932

int를 int배열로 만드는 방법은 https://paran21.tistory.com/36을 참고했다!(바로 연달아 풀어서 바로 적용할 수 있었다.)

 

이전에 문제를 풀면서, for문 사용할 때 조건에 따라 count와 같이 별도로 인덱스를 설정하는 것을 참고했는데, 응용해서 풀었다.

import java.util.stream.Stream;

class Solution {
    public int[] solution(long n) {
        //split을 사용하기 위해 string[]으로 변환
        String[] arr = String.valueOf(n).split("");
        //Stream을 이용하여 int[]로 변환
        int[] array = Stream.of(arr).mapToInt(Integer::parseInt).toArray();
        //answer 초기화 : 길이는 array.length
        int[] answer = new int[array.length];
        //배열을 뒤집어 배열하기 위해 answer의 인덱스로 쓸 count 선언
        int count = array.length-1;
        for (int i =0; i < array.length; i++) {
            answer[count] = array[i];
            //count를 하나씩 빼서 거꾸로 맨 뒤부터 배열되도록 함.
            count--;
        }
        return answer;
    }
}

++코드 추가 : StriingBuilder의 reverse기능을 사용하였다.

import java.util.stream.Stream;

class Solution {
    public int[] solution(long n) {
        //StringBuilder의 reverse를 사용하기 위해 변환
        StringBuilder num = new StringBuilder(String.valueOf(n));
        //뒤집고 배열로 변환
        String[] numAr = num.reverse().toString().split("");
        //int[]로 변환
        int[] answer = Stream.of(numAr).mapToInt(Integer::parseInt).toArray();
        return answer;
    }
}

Stream을 사용해서 처리 시간이 오래걸릴거라고 예상했다.(테스트당 2~3초대)

다른 사람의 풀이 중에 Stringbuilder, Steam을 사용하지 않고 while문을 사용해서 배열을 만드는 답안을 넣어봤는데,

예상외로 while이 훨씬 더 오래걸렸다(6~8정도).

루프를 반복해서 도는게 생각보다 처리 시간이 오래걸리는 것 같다.