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

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

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

다다스와 모그의 이진수열

문제로 돌아가기

해설

문자열 CCC에 대해 Constraints 섹션에서 정의한 값 H0(C),H1(C),…,HN(C)H_0(C),H_1(C),\ldots,H_N(C)H0​(C),H1​(C),…,HN​(C)를 생각하자. 각 문자를 하나 읽을 때 값은 정확히 111만큼 증가하거나 감소한다.

각 iii (1≤i≤N1 \leq i \leq N1≤i≤N)에 대해

Ei(C)=min⁡(Hi−1(C),Hi(C))E_i(C)=\min(H_{i-1}(C),H_i(C))Ei​(C)=min(Hi−1​(C

로 정의한다. Ei(C)=xE_i(C)=xEi​(C)=x라는 것은 iii번째 문자를 읽을 때 정수 xxx와 x+1x+1x 사이를 한 번 지나갔다는 뜻이다.

구간 [l,r][l,r][l,r]에 000과 111이 같은 개수만큼 들어 있다는 조건은 Hl−1(C)=Hr(C)H_{l-1}(C)=H_r(C)Hl와 같다. 연산을 수행하면 이 구간에서 지나간 경계들의 순서만 반대가 된다. 따라서 의 순서가 뒤집히며, 다른 는 변하지 않는다.

그러므로 각 정수 xxx에 대해 xxx와 x+1x+1x+1 사이를 지나간 횟수는 변하지 않는다. 즉, AAA를 BBB로 바꿀 수 있으려면 다음 두 멀티셋이 같아야 한다.

{E1(A),E2(A),…,EN(A)},{E1(B),E2(B),…,EN(B)}\{E_1(A),E_2(A),\ldots,E_N(A)\},\qquad \{E_1(B),E_2(B),\ldots,E_N(B)\}{E1​(A),E

이 조건은 충분하기도 하다. E(A)E(A)E(A)를 현재 수열, E(B)E(B)E(B)를 목표 수열이라고 하고 왼쪽부터 같은 값으로 만들어 보자.

현재 i−1i-1i−1번째 위치까지 같게 만들었다고 하자. Ei(A)=Ei(B)E_i(A)=E_i(B)Ei​(A)=Ei​라면 그대로 다음 위치로 넘어간다.

두 값이 다르다면 현재 높이에서 Ei(A)E_i(A)Ei​(A)가 나타내는 경계와 Ei(B)E_i(B)Ei​(B)가 나타내는 경계는 서로 반대 방향에 있다. 현재 경로는 먼저 잘못된 방향으로 움직였으므로, 목표 경계를 처음 지날 때에는 현재 높이에서 목표 방향으로 떠난다. 그 목표 경계를 두 번째로 지날 때에는 다시 현재 높이로 돌아온다.

따라서 Ei(B)E_i(B)Ei​(B)가 현재 수열의 iii번째 위치 이후에서 두 번째로 나타나는 위치를 jjj라고 하면, 원래 문자열의 구간 [i,j][i,j][i,j은 시작 높이와 끝 높이가 같다. 즉, 이 구간에는 과 이 같은 개수만큼 들어 있어 연산할 수 있다.

이 구간에 연산하면 Ei(A),Ei+1(A),…,Ej(A)E_i(A),E_{i+1}(A),\ldots,E_j(A)Ei​(A),Ei+1​(A),…,의 순서가 뒤집힌다. 마지막 값이었던 가 번째 위치로 오므로, 새롭게 번째 위치까지 목표와 같아진다.

가능 조건이 성립하면 필요한 두 번째 등장 위치는 항상 존재한다. 각 위치마다 뒤쪽을 선형으로 탐색하고, 찾은 구간을 직접 뒤집으면 된다. 탐색과 뒤집기에 각각 O(N)O(N)O(N) 시간이 들고 이를 NNN번 이하 수행하므로 전체 시간 복잡도는 O(N2)O(N^2)O(N2)이다. 필요한 배열과 답을 저장하는 메모리 복잡도는 O(N)O(N)O이다.

각 위치에서 연산을 많아야 한 번 수행하므로 출력하는 연산 수는 NNN 이하이다.

Solution written by GPT5.6

)
,
Hi​
(
C
))
+
1
−
1
​
(
C
)
=
Hr​(C)
El(C),El+1(C),…,Er(C)E_l(C),E_{l+1}(C),\ldots,E_r(C)El​(C),El+1​(C),…,Er​(C)
Ei(C)E_i(C)Ei​(C)
2
​
(
A
)
,
…
,
EN​
(
A
)}
,
{
E1​
(
B
)
,
E2​
(
B
)
,
…
,
EN​
(
B
)}
(
B
)
]
000
111
Ej​
(
A
)
Ej(A)=Ei(B)E_j(A)=E_i(B)Ej​(A)=Ei​(B)
iii
iii
(
N
)