본문 바로가기
#DevStudy/문제풀이

[Baekjoon] 5393 콜라츠

by 검은_백조 2016. 9. 22.

https://www.acmicpc.net/problem/5393


3n+1 문제의 응용버전... 으로 보이지만 크게 관련이 있는지는 잘 모르겠다.

관건은 N보다 작은 수에서 얼만큼의 연결고리가 생기냐는 것.


먼저 N보다 작은 짝수의 연결고리를 공식으로 쉽게 구할 수 있다. (N / 2 + N % 2)


그 다음 홀수의 연결고리를 구하는데,

주의해야 할 것은 n이 홀수일 때 3n+1은 무조건 짝수이다. N보다 작은 범위에서는 짝수의 연결고리를 구한 상황이므로 중복된다.

그러므로 3n+1이 N보다 큰 경우에만 수를 세주면 된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
int main() {
    int testCase;
    scanf("%d"&testCase);
    
    for (int i = 0; i < testCase; i++) {
        int N;
        scanf("%d"&N);
 
        int count = N / 2 + N % 2;
        int t = (N - 1/ 3;
        for (int j = 1; j <= N; j += 2) {
            if (j > t) count++;
        }
 
        printf("%d\n", count);
    }
 
    return 1;
}
cs


...라고 짜보았지만 시간초과가 걸렸다.

아무래도 홀수쪽도 수식으로 바꾸어야 될 것 같은데 일단은 패스해야겠다 ㅠㅠ

'#DevStudy > 문제풀이' 카테고리의 다른 글

[Baekjoon] 2579 - 계단오르기  (0) 2016.10.11
[Baekjoon] 1149 - RGB  (0) 2016.10.11
[P.C] 3. 여행 (The trip)  (0) 2016.09.23
[P.C] 2. 지뢰찾기 (Minesweeper)  (0) 2016.09.23
[P.C] 1. 3n+1 문제  (0) 2016.09.22

댓글