<풀기 전 생각>

들어오는 n이 long 타입 이어서 인지 바로 정수 연산이 되지 않아서 문자열 배열로서 처리를 해야 한다는 생각을 했고

만약 10000 을 뒤집었을 때 값이 00001이 되는 것을 방지 해야 한다는 생각을 가지고 문제 풀이에 들어갔다.

+ArrayList<Integer> 를 int[] 로 바꾸기

 

<중간 문제점>

5, 7 번 test에서 실패가 나왔다.

import java.util.ArrayList;

class Solution {
    public int[] solution(long n) {
        int[] answer = {};
        ArrayList<Integer> ans = new ArrayList<>();
        String num = String.valueOf(n);
        char array[] = num.toCharArray();
        for(int i=array.length-1;i>=0;i--){
            if(ans.size()==0&&array[i]=='0')
                continue;
            else
                ans.add(Integer.parseInt(array[i]+""));
        }

        answer = new int[ans.size()];
        for(int i=0;i<answer.length;i++)
            answer[i] = ans.get(i);

        System.out.println("kest");
        return answer;
    }
}

왜 그런가 시도해본 결과 "만약 10000 을 뒤집었을 때 값이 00001이 되는 것을 방지 해야 한다." 이부분이 필요가 없는 조건 이었기 때문에 실패 한 거였다. 10000 -> 00001 으로 배열이 반환되는게 맞았다.

그리고 생각해보면 ArrayList를 쓸 필요 없이 그냥 일반 배열을 사용해도 되는 상황이 된다.

 

 

<최종 코드>

class Solution {
    // 시간 복잡도 O(n) 공간 복잡도 O(n)
    public int[] solution(long n) {
        String num = String.valueOf(n);
        char array[] = num.toCharArray();
        int[] answer = new int[array.length];
        int index=0;
        for(int i=array.length-1;i>=0;i--){
                answer[index++]=Integer.parseInt(array[i]+"");
        }

        System.out.println("kest");
        return answer;
    }
}

<메모>

처음에는 long 타입이면 정수 연산이 불가능 할 줄 알았는데 우수 풀이를 보니

단순히 (int) 형으로 타입 캐스팅을 할 경우 정수 연산 %, / 등이 가능했다.

class Solution2{
    // 시간 복잡도 O(n) 공간 복잡도 O(n)
    public int[] solution(long n){
        String a = ""+n;
        int answer[] = new int[a.length()];
        int index = 0;
        while(n>0){
            answer[index++] = (int)(n%10);
            n/=10;
        }
        return answer;
    }
}

   

'PS > Level1' 카테고리의 다른 글

대충 만든 자판  (0) 2023.02.26
둘만의 암호  (0) 2023.02.19
크레인 인형뽑기 게임  (0) 2023.02.06
로또의 최고 순위와 최저 순위  (3) 2023.02.04
[1차] 다트 게임  (0) 2023.02.02

+ Recent posts