
https://www.acmicpc.net/problem/31421
적당한 난이도의 애드훅 문제였다.
앞면을 0, 뒷면을 1이라한다.
000000000..00 부터 시작하고, 목표배열에서 앞뒤가 바뀌는 부분쪽을 뒤집어 준다는 아이디어는 어렵지 않다. 0일때 뒤집는 것이므로 인덱스 1~ n까지 뒤집는 것이다.

목표배열이
110011100 일때 다음의 순서대로 뒤집을 수 있다. (2, 4 , 7 번째 뒤집기)

그런데 이러한 경우는 배열의 끝이 0일때만 가능하다. N - 1번째 , N번째 목표배열 모두 0일때 1 ~ N - 1 번째를 뒤집는 것이 마지막이고, 뒤집었을 때 N - 1번째는 1 , N번째는 0 으로 N번째 가 1이 될 수는 없기 때문이다.
이점을 해결하기 위해선 지금까지는 x , x + 1번째 모두 0일때만 골라서 뒤집었고, x, x + 1번째 모두 1일때도 뒤집어야 한다.
목표숫자가 110011111 , 즉 맨뒤가 1일때 다음과 같이 뒤집을 수 있다.

x번 째, x+1번째 숫자가 다를때의 x배열을 x1,x2,x3.... 이라하면
맨뒤자리가 0이면 -> x1,x2,x3,x4... 순서대로 뒤집기
맨뒷자리가 1이면 -> X1,X2,X3...X N,X N-1 순으로 뒤집기 (1을 뒤집는 경우엔 x+1 ~ N까지 뒤집으므로)
반드시 예외가 있을것 같지 않은가.
예외는 목표 배열의 모든 수가 1(뒷면)일때, x배열크기가 1인데 맨뒤가 1인 경우가 있다. 이 경우는 목표배열로 만들 수 없다.
또 한개 예외는 모든 수가 0(앞면)일때 0번뒤집기 이다.
'알고리즘 > baekjoon(boj)' 카테고리의 다른 글
| [platinum4] [해설,분류 미확인]9520 NP-hard (0) | 2026.02.24 |
|---|---|
| [platinum5][풀이,해설 안봄] 14451 안개 낀 스피드러너 (0) | 2026.02.22 |
| [platinum5][해설분류 미확인] 1413 박스안의 열쇠 (0) | 2026.02.16 |
| [platinum5] [풀이,분류 안봄]1231 주식왕 동호 (0) | 2026.02.12 |
| [platinum3] [풀이, 분류 미확인] boj2873 롤러코스터 (0) | 2026.02.09 |