DOJ logoDOJ
Problems
Recently added problemsSaved problems
CategoriesDLCContestsGroupsTeamsBoard
Ranking
Solved Problem RankingStreak rankingDOJ Power ranking
Status
Call for TasksLoginRegister
DOJ logoDOJ

Community online judge with OI-style subtask scoring, Elo ratings, and Discord-backed certification.

Problems
ProblemsCategories
Community
ContestsRankingBoardNoticesHost an external contestGuide
Account
LoginRegisterJudge Status
Policy
Terms of ServiceDLC RulesPrivacyAPI documentationLanguage runtimesContest rank rewardsRating and performance
© 2026 DOJ
All rights reserved
Editorial

Easy Hanoi Problem

Back to problem

Editorial

디스크 i,i+1,⋯ ,Ni,i+1,\cdots,Ni,i+1,⋯,N을 모두 어떤 목표 기둥 ttt로 옮기는 최단 거리를 생각한다. 현재 iii번 디스크가 이미 ttt에 있으면, 이 디스크는 움직일 필요가 없고 나머지 디스크들의 목표 기둥도 그대로 ttt이다.

현재 iii번 디스크가 ttt가 아닌 기둥 aaa에 있으면, iii번 디스크를 ttt로 옮기기 전에 더 작은 모든 디스크가 나머지 기둥에 모여 있어야 한다. 그 뒤 iii번 디스크를 한 번 옮기고, 더 작은 디스크들을 다시 tt로 옮긴다. 따라서 이 경우 거리에는 가 더해지고, 다음에 고려할 더 작은 디스크들의 목표 기둥은 와 가 아닌 나머지 기둥이 된다.

이 과정을 큰 디스크부터 작은 디스크까지 보면 목표 거리는 길이 NNN인 이진수로 표현된다. 각 자리에서 현재 디스크가 현재 목표 기둥에 있으면 그 자리는 000, 아니면 111이다. 같은 목표 거리를 갖는 상태들은 이 이진수 자리가 모두 같다.

어떤 자리가 000이면 그 디스크의 위치는 현재 목표 기둥으로 하나만 정해진다. 어떤 자리가 111이면 그 디스크는 현재 목표 기둥이 아닌 두 기둥 중 하나에 있을 수 있고, 선택한 위치에 따라 다음 목표 기둥이 정해진다. 그러므로 목표 거리의 이진수에서 111인 자리의 개수를 MMM이라 하면 같은 목표 거리를 갖는 상태는 총 2M2^M2M개이고, 입력 상태를 제외하면 개이다.

따라서 2M−1<K2^M-1<K2M−1<K이면 No를 출력한다. 그렇지 않으면 MMM개의 선택을 이진 코드로 보아 서로 다른 코드를 KKK개 고르고, 입력 상태에 해당하는 코드만 건너뛰면 된다. 각 코드를 큰 디스크부터 다시 해석하면 조건을 만족하는 상태가 만들어진다.

출력 크기가 O(NK)O(NK)O(NK)이므로 전체 시간 복잡도는 O(N+NK)O(N+NK)O(N+NK)이고, 메모리 복잡도는 O(N)O(N)O(N)이다.

Solution written by GPT5.5

t
2N−i2^{N-i}2N−i
aaa
ttt
2M−12^M-1
2M−1