본문 바로가기
study/CodingTest

자연수 뒤집어 배열로 만들기 (자료형 처리 / linkedlist / while)

by 고기만두(개발자) 2022. 12. 13. 21:41
728x90
반응형

문제 출처 - 프로그래머스

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건
  • n은 10,000,000,000이하인 자연수입니다.
입출력 예 return
12345 [5,4,3,2,1]

%10 을 해서 나머지를 구하고, /10을 해서 자릿수를 하나씩 줄여나간다.

그리고 0이 될 때까지 자릿수 줄임을 반복하기 위한 while문을 바로 생각해 낼 수 있었다.

 

하지만 한 가지 함정이, 이 문제 인풋이 long 타입으로 들어오는데 int로 리턴을 뱉어야 한다.

long <->int 간의 변환을 위해 여러 방법을 사용해봤으나 먹히지 않았다. 대체 왜지..?

이 문제의 의도한 바가 그게 아닌거였나,,,

그래서 long을 String으로 캐스트해서 자릿수를 구하고 시작했다.

x.length()를 사용할 거였으면 for(int i = 0; i < x.length; i++) 문 돌려도 될 뻔 했다.

import java.lang.*;

class Solution {
    public int[] solution(long n) {
        String x = "" + n;
        
        int[] answer = new int[x.length()];
        
        int a = 0;
        int i = 0;
        
        while (n > 0){
            a = (int)(n % 10);            
            answer[i] = a;
            n = n / 10;
            i++;
        }
        
        return answer;
    }
}

자연수뒤집어배열만들기

지금 듣고 있는 강의에서 의도한 바는 LinkedList 의 사용

링크드리스트에 add 하고 한줄로 바로 변환 때리는 방법도 있음

import java.util.*;

class Solution {
    public int[] solution(long n) {
        List<Integer> list = new LinkedList<>();
        
        while (n > 0){
            list.add((int) (n%10));
            n /= 10;
        }
        
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}​

linkedlist

대부분의 케이스에서 속도가 확실히 줄긴 했다

 

 

수학적인 접근을 생각해내는 건 연습장에 조금만 끼적거리다 보면 예전부터도 많이 어렵지는 않은데

비전공 출신은 기술적인 접근이 약해서, 여러 사이트에서 꾸준히 문제를 풀어봐야 할 것 같다.

728x90
반응형

'study > CodingTest' 카테고리의 다른 글

이진 검색 알고리즘 w/파이썬  (0) 2023.05.20
파이썬 반복문 누적합계  (0) 2023.03.20
순열 검사 (배열의 정렬과 비교)  (0) 2022.12.12
최댓값의 인덱스 구하기  (0) 2022.10.02
백준 4153 직각삼각형(Java)  (4) 2022.04.26

댓글