-
[프로그래머스] 콜라츠 추측프로그래머스 2025. 3. 23. 19:07
JAVA
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12943CODE
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측이다.
조건
- 입력된 수가 짝수라면 2로 나눕니다.
- 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
- 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
- 주어진 수가 1인경우 0으로 반납합니다.
- 위의 반복 횟수가 500번 이상이면 -1을 반환합니다.
- 입력된 수(num)은 1 이상 8,000,000이하이다.
풀이
▶ while문이 시작 전에 입력 받은수(num)이 1일경우 그자리에서 즉시 반환한다.
▶ while문으로 조건은 입력 받은수(num)이 1이 될때까지 이니까 1일 아닐때는 무한 반복 시킨다.
▶ 입력 받은수(num)이 %2를 한 결과 나머지가 0인 경우 num /2 아니면 (num *3) +1을 진행한다.
▶ 반복되는 Count가 500번이넘지 않았는지 확인한다.
▶ 입력 받은수(num)이 8,000,000이하를 넣게 되면 num의 자료형 int의 범위를 넘어서 중간에 음수로 되는 경우가 있다.
반드시 long 자료형을 권장한다.
입력 받은수(num)이 626331을 int인체로 작업 했을경우의 중간 결과 값.
CODE
public int solution(int num) { int answer = 0; //int 형때문에 중간에 이상하게 계산됨. long value = Long.valueOf(num); //주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1 if(value == 1){ //주어진 수가 1인 경우에는 0 return 0; } while (value != 1){ //입력된 수가 짝수라면 2로 나눕니다. //입력된 수가 홀수라면 3을 곱하고 1을 더합니다. value = (value % 2 == 0) ? value /2: (value * 3) +1; answer ++; if(answer >= 500){ //결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. answer = -1; break; } } return answer; }
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 상품 별 오프라인 매출 구하기 (0) 2025.04.02 [프로그래머스] 내적 (0) 2025.04.02 [프로그래머스] 두 정수 사이의 합 (0) 2025.03.23 [프로그래머스] 조건에 맞는 회원수 구하기 (0) 2025.03.21 [프로그래머스] 하샤드 수 (0) 2025.03.21