알고리즘 : 프로그래머스 : JAVA : 자연수 뒤집어 배열로 만들기

2022. 1. 19. 23:15알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

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;
    }
}

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) {

        String str = "" + n;

        int sum = str.length();

        int[] answer = new int[sum];

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

1. "" + n = 문자열 + 숫자면  문자열로 인식하고 문자열 타입의 str 선언  
2. 문자열 str 길이를 int 타입에 sum으로 선언 
3. 입력값 배열의 크기는 문자열의 길이이다.
4. for문으로 문자열의 길이를 sum으로 하여 배열을 생성하고 
5. 주어진 실수를 10으로 나누기를 반복하여 마지막 자릿수 를 10으로 나눠 1의 자리를 반환 

반응형