[프로그래머스 자바] 콜라츠 수열 만들기
문제
-모든 자연수 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;
}
}
결과
반응형
'자바 문제 풀이 > 기초문제' 카테고리의 다른 글
[프로그래머스 자바]배열 만들기5 (0) | 2024.03.16 |
---|---|
[프로그래머스 자바] 9로 나눈 나머지 (0) | 2024.03.12 |
[프로그래머스 자바] 배열 만들기2 (0) | 2024.03.04 |
[프로그래머스 자바]수열과 구간 쿼리2 (1) | 2024.03.01 |
[프로그래머스 자바] 수조작하기 1 (0) | 2024.02.28 |