본문 바로가기
코딩 테스트/[JAVA] programmers 코딩 테스트 연습

[No.18] 자연수 뒤집어 배열로 만들기/ 프로그래머스 코딩 테스트 연습 JAVA

by M개발자 2021. 6. 10.
반응형

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


문제 설명

 

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


예시

 

n return
12345 [5, 4, 3, 2, 1]

코드 해석 및 전체 코드

 

알고리즘

1. n의 길이 구하기

2. 길이만큼 배열 선언

3. n의 끝자리부터 인덱스 0부터 차례대로 넣기

 

1. n의 길이 구하기

n을 뒤집어 각 자리 숫자를 원소로 가지는 배열을 만들기 위해

배열을 선언할 때 필요한 길이를 구해야한다. 

long 타입의 num을 n으로 초기화하고 길이를 나타낼 int 타입의 cnt를 선언한다.

 

num이 0이 아닐 때까지 num을 10으로 나누면서 cnt를 증가시킨다. 

12345 / 10 = 1234 1234 / 10 = 123 123 / 10 =12 12 / 10 = 1 1 / 10 = 0
+1 +1 +1 +1 +1

cnt = 5이다. 

 

2. 배열 생성

배열의 길이를 cnt로 하여 배열을 선언한다.

 

3. n의 끝자리부터 인덱스 0부터 차례대로 넣기

단순히 뒤집는 거라면 while문을 사용하여 num이 0이 아닐 때까지 반복하면 되지만 배열의 방에 값을 저장해야 하므로 for문을 사용하여 num이 0이 아닐 때까지 반복한다.

answer[i]에 num의 마지막 자릿수를 넣는다. num % 10은 num을 10으로 나누었을 때의 나머지 값으로 1의 자릿수이다. 

다음 1의 자리수를 구하기 위해 num을 10으로 나누어준다. 

num % 10 5 4 3 2 1
num 1234 123 12 1 0

 

 

class Solution {
    public int[] solution(long n) {
        
        long num = n;
        int cnt = 0;
        
        while(num != 0){
            num /= 10;
            cnt++;
        }
        
        int[] answer = new int[cnt];
        
        num = n;
        for(int i = 0; num != 0; i++){
            answer[i] = (int)(num % 10);
            num /= 10;
        }
        
        return answer;
    }
}

속도

다른 좋은 방법들도 많았지만 속도가 괜찮아서 메소드 정리만 ^^V

 

참고 메서드

문자열 뒤집기
StringBuilder sb.reverse()

int → String 타입 변환
String.valueOf(i)

github

programmers

 

 

 

 

반응형

댓글