자바 문제 풀이/기초문제

[프로그래머스 자바]콜라츠 수열 만들기

ari0930 2024. 3. 9. 14:17

[프로그래머스 자바] 콜라츠 수열 만들기 

 

문제

-모든 자연수 x에 대해서 현재값이 x 이면 x가 짝수일 때 2로 나누고 홀수 일대에는 3*x+1 하여 x값에 반환하는 과정을 반복하면 언제 가는 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 한다 

위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이며 이 콜라츠 수열을 return 하는 solution 함수를 완성하라 

입력, 출력

풀이

-콜라츠 수가 얼마나 나올지 알 수 없기에 동적 배열이 필요하다고 판단해서 ArrayList를 사용하였다 

문제의 조건에 따라 짝수일 때는 2로 나누고 홀수 일 때에는 3*x+1을  한 값을 ArrayList로 만든 배열에 추가하는 과정을 while 문을 이용하여 반복하였다.

while문의 조건은 x값이 1이 아니면 계속 돌아가도록 하였다 

 

문제에서 public int [] solution(int n) { 뜻은 int 형 배열을 반환하라는 뜻이기에 ArrayList로 만든 배열 안의 값들을 int 형 배열에 담는 과정일 필요하다 만약   public ArrayList <Integer> solution(int n) { 이렇게 바꾸고 코드를 작성한다면 

int형 배열로 바꿀 필요 없이 ArrayList로 만든 배열을 리턴값에 넣으면 된다 

코드

import java.util.ArrayList;

class Solution {
    public int[] solution(int n) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(n);

        while (n!=1) {
            if (n%2==0) {
                n=n/2;
                list.add(n);

            }
            else {
                n=3*n+1;
                list.add(n);
            }

        }

        int[] result = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }

        return result;

    }
}

 

결과

반응형