도구스학업·수학

콜라코스키 수열 계산기

1과 2로만 이루어지는데 자기 자신의 연속길이(런렝스)를 세면 다시 자기 자신이 나오는 자기서술적 수열(OEIS A000002)을 계산합니다. 수열과 런렝스 인코딩을 나란히 보여줘 이 성질을 눈으로 확인할 수 있습니다.

0 ~ 2000까지 계산합니다.

첫 60항

런(뭉치) 40개

1이 30번 · 2가 30번 나왔습니다

폭이 런(연속된 같은 값)의 길이입니다. 색은 값(1·2)을 나타냅니다.

자기서술 검증통과
런(뭉치) 개수40개
122112122122112112212112122112112122122112122121121122122112

1항부터 순서대로.

1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1

위 수열을 «값이 몇 개씩 뭉쳐 있나»로 다시 쓴 것입니다.

런렝스 인코딩이 원래 수열과 같습니다. 위 두 줄을 나란히 비교해 보세요 — «수열»과 «런렝스 인코딩»의 앞부분이 정확히 일치합니다(맨 끝의 런은 배열이 중간에 잘렸을 수 있어 비교에서 뺍니다). 이것이 콜라코스키 수열의 정의 그 자체입니다: 자기 자신의 연속길이를 세면 다시 자기 자신이 나옵니다.
생성은 두 포인터로 합니다. 씨앗 [1,2,2]에서 시작해, «읽기 포인터» k가 가리키는 값을 이번 런의 길이로 쓰고, 1과 2를 번갈아 그만큼 이어 붙입니다. seq[k] 자신이 다음에 몇 개를 쓸지 알려주는 자기참조 구조라, 매 단계 O(1)로 항을 늘릴 수 있습니다.
런의 길이 자체가 수열의 값(1 또는 2)이라, 어떤 런도 길이 3 이상이 될 수 없습니다. 그래서 이 수열에는 같은 값이 세 번 연속 나오는 자리가 존재하지 않습니다 — 블록 그림의 모든 블록이 폭 1칸 또는 2칸짜리뿐인 것으로 확인할 수 있습니다.

계산 방법

  1. 1항수 n을 넣습니다. 1부터 n항까지 계산합니다.
  2. 2블록 그림에서 값(1·2)이 몇 개씩 뭉쳐 있는지(런의 길이) 봅니다.
  3. 3수열과 런렝스 인코딩 두 줄을 나란히 비교해 앞부분이 일치하는 것을 확인합니다.

자주 묻는 질문

1과 2로만 이루어지며, 이 수열을 «값이 몇 개씩 연속으로 뭉쳐 있는가»(런렝스 인코딩)로 다시 쓰면 원래 수열과 정확히 같아지도록 만들어진 자기서술적 수열입니다. 씨앗 [1,2,2]에서 시작해, 이미 만든 항이 다음 런의 길이를 알려주는 방식으로 두 포인터를 굴려 생성합니다.

연속된 같은 값을 하나로 뭉쳐 그 길이만 뽑아낸 것입니다. 예를 들어 [1,2,2,1,1,2]는 1이 1개, 2가 2개, 1이 2개, 2가 1개이므로 런렝스 인코딩은 [1,2,2,1]입니다.

런의 길이 자체가 수열의 값(1 또는 2)이기 때문입니다. 어떤 런도 길이가 3 이상이 될 수 없으므로, 이 수열에는 같은 값이 세 번 연속 나오는 자리가 존재하지 않습니다.

생성된 수열의 런렝스 인코딩을 다시 계산해 원래 수열의 앞부분과 비교하면 됩니다. 다만 배열 끝에서 마지막 런이 중간에 잘렸을 수 있어, 그 부분은 비교에서 제외합니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 항수는 2,000까지 계산합니다.
  • 블록 그림·수열·런렝스 인코딩은 화면에 다 그리기 어려워 일부(각각 전체·120개)까지만 보여 줍니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.