2022. 1. 19. 17:05ㆍ알고리즘/프로그래머스
<문제>
<코드 & 설명>
class Solution {
public int solution(int n) {
long num = n; // 오버플로우 방지를 위한 형변환 필요
int count = 0;
while (num != 1) {
if (num % 2 == 0) { /* 짝수일 경우 */
num /= 2; // num = num / 2;
} else { /* 홀수일 경우 */
num = num * 3 + 1;
}
count++; // count값을 먼저 사용한 후 1 증가
if (count > 500) // count값이 500을 넘으면 -1로 리턴
return -1;
}
return count;
}
}
1. 매개변수로 입력 받은 int형 n 값을 long으로 바꿔주지 않으면 오버 플로우가 나와서,
음수로 한 번 바뀌기 때문에 결과 값이 꼬여 long으로 형변환을 해준다.
2. if문으로 짝수일 경우 2로 계속 나눈 값을 구한다.
3. else로 홀수일 경우 3을 곱하고 1을 더한 값을 구한다.
4. count++; 카운트 값을 저장해준다.
5. if문으로 count값이 500을 넘어가면 -1을 리턴해준다.
6. 최종 카운트 값을 리턴한다.
<참고>
<자바의 비교 연산자 (==, !=, <, >, <=, >=)>
a == b : 두 값이 같으면 true, 아니면 false
a != b : 두 값이 다르면 true, 아니면 false
a < b : 좌변 값이 작으면 true, 아니면 false
a > b : 좌변 값이 크면 true, 아니면 false
a <= b : 좌변 값이 작거나 같으면 true, 아니면 false
a >= b : 좌변 값이 크거나 같으면 true, 아니면 false
<증감 연산자>
++x : x를 먼저 1증가시킨 후 그 값을 사용
--x : x를 먼저 1감소시킨 후 그 값을 사용
x++ : x값을 먼저 사용한 후 1 증가
x-- : x값을 먼저 사용한 후 1 감소
ex)
int a = 10;
a++; // a = a + 1 과 같다.
double b = 1.0;
b++; // b = b + 1과 같다.
<대입 연산자>
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘 : 프로그래머스 : JAVA : 제일 작은 수 제거하기 (0) | 2022.01.19 |
---|---|
알고리즘 : 프로그래머스 : JAVA : 정수 제곱근 판별 (0) | 2022.01.19 |
알고리즘 : 프로그래머스 : JAVA : 하샤드 수 (0) | 2022.01.19 |
알고리즘 : 프로그래머스 : JAVA : 정수 내림차순으로 배치하기 (0) | 2022.01.19 |
알고리즘 : 프로그래머스 : JAVA : 완주하지 못한 선수 (0) | 2022.01.17 |