DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제문제집
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

Yet Another Hamiltonian Path Problem

문제로 돌아가기

해설

정점 111에서 A1=0A_1=0A1​=0이면 나가는 간선이 하나도 없다. 따라서 해밀턴 경로가 존재한다면 정점 111은 경로의 마지막 정점이어야 한다.

마찬가지로 정점 NNN에서 AN=1A_N=1AN​=1이면 나가는 간선이 하나도 없다. 따라서 이 경우 정점 NNN도 경로의 마지막 정점이어야 한다.

따라서 A1=0A_1=0A1​=0이고 AN=1A_N=1AN​=1이면 서로 다른 두 정점이 모두 마지막 정점이어야 하므로 해밀턴 경로가 존재하지 않는다.

이제 나머지 경우에는 항상 해밀턴 경로를 직접 만들 수 있다.

AN=0A_N=0AN​=0이라고 하자. Ai=1A_i=1Ai​=1인 정점을 번호의 오름차순으로 모두 출력한 뒤, Ai인 정점을 번호의 내림차순으로 모두 출력한다. 첫 번째 부분에서는 현재 정점의 값이 이고 다음 정점의 번호가 더 크므로 항상 간선이 존재한다. 두 번째 부분에서는 현재 정점의 값이 이고 다음 정점의 번호가 더 작으므로 항상 간선이 존재한다. 두 부분이 모두 비어 있지 않다면 첫 번째 부분의 마지막 정점 번호는 보다 작고, 두 번째 부분의 첫 정점은 이다. 따라서 두 부분 사이에도 간선이 존재한다.

AN=1A_N=1AN​=1이라면 불가능한 경우가 아니므로 A1=1A_1=1A1​=1이다. 이때는 Ai=인 정점을 번호의 내림차순으로 모두 출력한 뒤, 인 정점을 번호의 오름차순으로 모두 출력한다. 각 부분 내부의 간선은 앞의 경우와 같은 이유로 존재한다. 두 부분이 모두 비어 있지 않다면 첫 번째 부분의 마지막 정점 번호는 보다 크고, 두 번째 부분의 첫 정점은 이므로 두 부분 사이에도 간선이 존재한다.

각 정점을 상수 번만 확인하므로 테스트 케이스 하나의 시간복잡도는 O(N)O(N)O(N)이고, 전체 시간복잡도는 O(∑N)O(\sum N)O(∑N)이다. 추가 공간복잡도는 O(N)O(N)O(N)이다.

Solution written by GPT5.6

=0A_i=0
Ai​=0
111
000
NNN
NNN
0A_i=0
Ai​=0
Ai=1A_i=1Ai​=1
111
111