작성일 :

문제 링크

13236번 - Collatz Conjecture

설명

시작 값 n에서 콜라츠 규칙을 반복해 1이 될 때까지의 수열을 출력하는 문제입니다.

n이 짝수면 2로 나누고, 홀수면 3을 곱하고 1을 더합니다. 1에서 멈추며, 모든 값을 공백으로 구분해 출력합니다.


접근법

먼저, 현재 값을 출력합니다. 1이면 종료하고, 아니면 규칙에 따라 다음 값을 계산합니다.

다음으로, 공백 처리를 위해 1이 아닌 경우에만 값 뒤에 공백을 추가합니다.

이 과정을 1이 될 때까지 반복합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Text;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var n = long.Parse(Console.ReadLine()!);
      var sb = new StringBuilder();
      while (true) {
        sb.Append(n);
        if (n == 1) break;
        sb.Append(' ');
        if ((n & 1) == 0) n /= 2;
        else n = 3 * n + 1;
      }
      Console.WriteLine(sb.ToString());
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  ll n; cin >> n;
  while (true) {
    cout << n;
    if (n == 1) break;
    cout << ' ';
    if (n % 2 == 0) n /= 2;
    else n = 3 * n + 1;
  }
  cout << "\n";

  return 0;
}