문제 링크
- http://icpc.me/15367
문제 출처
- 2018 서울 리저널 K번
사용 알고리즘
- 2-SAT
풀이
각 램프에 대해, R이면 true, B이면 false라고 합시다. 갑자기 2-SAT을 쓰고싶어집니다.
조건 A, B, C 중에서 2개 이상 만족한다는 것을 2-CNF로 나타내는 것에서 막힐 수 있는데, (A or B) and (B or C) and (C or A)로 처리할 수 있습니다.
(A or B) and (B or C) and (C or A)
라는 식을 찾아냈으면 단순히 2-SAT을 돌려서 정답을 역추적해주면 됩니다.
CNF를 추가하는 것을 구현하는 것이 귀찮을 수 있는데, 아래 코드처럼 하면 실수하지 않고 깔끔하게 처리할 수 있습니다.
1 |
|