쉬움 0명 해결 정답률 0%

콜라츠 수열

1에 도달할 때까지 반으로 나누거나 세 배 후 1을 더하는 규칙을 따르세요.

배우게 될 내용

  • 조건이 충족될 때까지 규칙 적용하기
  • 거친 단계 수 세기
  • 짝수와 홀수로 분기하기

문제

원문 보기 (영어)

n에서 시작합니다. n이 짝수라면 2로 나누고, 홀수라면 3을 곱한 뒤 1을 더합니다. 값이 1이 될 때까지 이 과정을 반복합니다. 시작 값과 마지막 1 모두를 답에 포함하세요.

collatz_sequence(n)을 구현하세요.

입력

n: 양의 정수 시작값입니다.

출력

전체 수열을 순서대로 반환하세요.

제약 조건

1 ≤ n ≤ 10,000. 이 범위의 입력은 모두 해당 규칙으로 1에 도달합니다. 수열의 모든 값은 부호 있는 64비트 정수 범위에 포함됩니다.

예시

예시 1
입력:
n = 6

예상 출력:
expected = [6, 3, 10, 5, 16, 8, 4, 2, 1]
입력:
long long n = 6;

예상 출력:
std::vector<long long> expected = {6, 3, 10, 5, 16, 8, 4, 2, 1};
입력:
long n = 6;

예상 출력:
long[] expected = new long[] {6, 3, 10, 5, 16, 8, 4, 2, 1};

설명

6은 짝수이므로 3이 됩니다. 그 다음 3은 10이 됩니다. 1이 될 때까지 계속 규칙을 적용하세요.

예시 2
입력:
n = 1

예상 출력:
expected = [1]
입력:
long long n = 1;

예상 출력:
std::vector<long long> expected = {1};
입력:
long n = 1;

예상 출력:
long[] expected = new long[] {1};

설명

시작 값이 이미 1이므로 변환이 필요하지 않습니다.

접근 방법

먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.

힌트 1

현재 수가 짝수인지 홀수인지에 따라 하나의 규칙을 반복 적용해 수열을 만든다.

힌트 2

1에 도달할 때까지 새 값을 계속 덧붙인다.

힌트 3

시작값과 마지막 1이 결과에 둘 다 포함되어야 한다.

예상 복잡도

O(k) time, O(k) extra space, where k is the sequence length

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.