시뮬레이션에서 사이클 감지하기
상태가 반복되면 앞서 건너뜁니다
시뮬레이션에서 사이클 감지하기은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
단계가 반복될 때
일부 모의 실행에서는 1조 번처럼 엄청나게 많은 단계가 지난 뒤의 상태를 묻습니다. 한 번에 한 단계씩 진행하면 제한 시간 안에 끝나지 않습니다. ⏳
상태는 유한합니다
가능한 상태의 수가 제한되어 있다면 모의 실행은 결국 같은 상태를 다시 만나게 됩니다. 그때부터는 순환이 영원히 반복됩니다.
순환은 어떤 모습일까요
경로에는 순환으로 들어가는 꼬리가 있고, 그 뒤에는 반복되는 고리가 있습니다. 고리를 찾으면 수십억 단계를 빠르게 건너뛸 수 있습니다.
지나온 곳을 기억하세요
각 상태를 사전에 저장하고, 그 상태를 처음 본 단계 번호와 연결하세요. 같은 상태를 다시 보면 순환을 알아낼 수 있습니다.
seen = {}반복을 감지하세요
각 단계 전에 현재 상태가 이미 확인된 상태 집합에 있는지 확인하세요. 이미 있다면 방금 순환이 완성된 것입니다.
if state in seen:
start = seen[state]순환 길이 측정하기
길이는 현재 단계에서 이 상태를 처음 본 단계의 번호를 뺀 값입니다. 그만큼의 단계가 지나면 상태가 정확히 다시 돌아옵니다.
length = step - seen[state]나머지 연산으로 건너뛰기
꼬리 부분을 뺀 다음, 남은 단계 수를 순환 길이에 대한 나머지로 계산하세요. 이제 아주 조금 남은 단계만 모의 실행하면 됩니다.
rem = (N - start) % length남은 단계 마무리하기
순환 시작점에서 그 남은 단계만큼 모의 실행하세요. 최종 상태는 정확히 N번째 단계의 상태와 일치합니다.
for _ in range(rem):
state = step_fn(state)상태를 해시 가능하게 유지하기
사전의 키는 해시 가능해야 하므로 저장하기 전에 목록을 튜플로 바꾸세요. 변경 가능한 상태는 키가 될 수 없습니다.
key = tuple(row)기억 공간 없이 Floyd 알고리즘 사용하기
상태가 너무 커서 저장할 수 없다면 Floyd의 거북이와 토끼 알고리즘이 두 개의 포인터를 사용해 추가 기억 공간을 거의 쓰지 않고 순환을 찾습니다.
이 방법이 문제를 해결하는 이유
순환 감지는 불가능해 보이는 1조 단계의 반복을 수천 단계로 바꿉니다. 반복을 알아차리는 것이 이 방법의 핵심입니다.
빠른 확인
현재 상태를 단계 s에서 처음 보았고, 지금은 단계 t에 있습니다.
복습
상태가 반복되면 각 상태를 사전에 기록하고, 순환 길이를 찾은 뒤, 나머지 연산으로 건너뛰고 남은 단계만 모의 실행하세요. 🚀
자주 묻는 질문
“시뮬레이션에서 사이클 감지하기” 강의는 무료인가요?
네 — “시뮬레이션에서 사이클 감지하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“시뮬레이션에서 사이클 감지하기”에서 뭘 배우나요?
상태가 반복되면 앞서 건너뜁니다 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“시뮬레이션에서 사이클 감지하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 상태를 모델링하고 한 단계 나아가기
- 격자 이동과 방향 벡터
- 시뮬레이션에서 사이클 감지하기
- 까다로운 예외 상황 다루기