https://programmers.co.kr/learn/courses/30/lessons/12943
문제
주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측. 예를 들어, 입력된 수가 6이라면 6->3->10->5->16->8->4->2->1이 되어 총 8번 만에 1이 된다. 이 작업을 몇 번이나 반복해야하는지 반환하는 함수를 완성하시오. 단, 작업을 500번을 반복해도 1이 되지 않는다면 -1을 반환하시오.
1-1. 입력된 수가 짝수라면 2로 나눈다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더한다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다.
제한조건
입력된 수, num은 1이상 8000000미만인 정수
.java
class Solution {
public int solution(int num) {
int count=0;
//계산 도중 숫자가 커지면 int의 범위를 벗어나 오류가 발생했음.
//그래서 long타입으로 변경
long lnum=num;
//1.1이 될 때까지 반복
while(lnum!=1){
//짝수일 경우
if(lnum%2==0){
lnum=lnum/2;
}
//홀수일 경우
else{
lnum=lnum*3+1;
}
//몇번 작업했는지 세기
count++;
}
//반복 작업이 500회를 넘을 경우 -1 반환
if(count>500){
return -1;
}
return count;
}
}
실행 결과
'공부하자 > 알고리즘' 카테고리의 다른 글
[프로그래머스] Lv.1 자연수 뒤집어 배열로 만들기 java (0) | 2022.04.21 |
---|---|
[프로그래머스] Lv.1 문자열 내림차순으로 배치하기 java (0) | 2022.04.21 |
[프로그래머스] Lv.1 자릿수 더하기 java (0) | 2022.04.21 |
[프로그래머스] Lv.1 직사각형 별찍기 java (0) | 2022.04.19 |
[프로그래머스] Lv.1 하샤드 수 java (0) | 2022.04.19 |