반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12943
- 소요 시간 : 5분
- 난이도 : LV 1
나의 풀이
접근 방법
반복문을 이용한다.
주의할 점 : int 범위를 초과하는 경우가 있어 long으로 타입 변환이 필요하다.
1. 1이면 return
2. 횟수 카운트 증가
3. 짝수일 경우, 홀수일 경우 조건문으로 나눠서 처리
4. 횟수가 500일 경우 -1 리턴 아니면 그냥 횟수 리턴
시간복잡도
O(N)
N = 1로 변경하는 동안 반복하는 횟수 = 최대 500
코드
class Solution {
public int solution(int num) {
int answer = 0;
long num2 = num;
do {
if (num2 == 1)
break;
answer++;
if (num2 % 2 == 0)
num2 /= 2;
else
num2 = num2 * 3 + 1;
} while(answer < 500);
if (answer == 500)
return -1;
return answer;
}
}
결과 : 정답
다른 사람의 풀이
코드
class Solution {
public int solution(int num) {
long n = (long)num;
for(int i=0; i<500; i++){
if(n == 1) return i;
n = (n % 2 == 0) ? n / 2 : n * 3 + 1;
}
return -1;
}
}
결과 : 정답
정리
3항연산자를 이용해 더 짧게 작성할 수 있었다.
500회로 한정되어 있으므로 for문을 사용하는 것도 괜찮아 보인다.
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 월별 잡은 물고기 수 구하기 - MySQL (0) | 2024.11.18 |
---|---|
[프로그래머스] 음양 더하기 - Java (0) | 2024.11.17 |
[프로그래머스] 핸드폰 번호 가리기 - Java (1) | 2024.11.15 |
[프로그래머스] 연도별 대장균 크기의 편차 구하기 - MySQL (2) | 2024.11.13 |
[프로그래머스] 서울에서 김서방 찾기 - Java (0) | 2024.11.10 |