Problem : 거짓말
유형 : 그래프
문제 해석
- 거짓말을 들키지 않고, 최대한 할 수 있는 파티의 수를 구하라.
문제 재해석
- 진실을 아는 자가 속해 있는 파티에는 거짓말을 할 수 없다.
- 진실을 아는 자와 같은 파티에 속했던 사람이 있는 파티에는 거짓말을 할 수 없다.
해결 전략
사람들 간의 연결 그래프
- 파티 참석자들끼리 다 연결해둔다.
DFS
를 통해, 진실을 아는 사람들을 시작으로 순회 해 나간다.
파티, 사람 간의 연결 그래프
- 사람이 어디 파티에 속해 있는지, 파티에서는 어느 사람이 속해 있는지를 기록한다.
- 진실된 사람이 속해있는 파티의, 모든 사람들을 기준으로 DFS를 진행한다.
설계, 구현
- 인접 리스트를 이용하여 관계를 설정하고 DFS를 통해 그래프를 순회 시켰다.
주의할 점
- 관계를 곰곰히 생각해 볼 것
코드
1 |
|
피드백
- 첫번째 풀이가 코드 라인이 다른 사람들에 비해 너무 길어 축약 할 수 없을까 고민하였다.
- 연결 관계를 만들 때, 꼭 사람과 사람간의 관계가 아닌, 사람과 그룹간의 관계로 해도 된다는 것을 깨달았다.
- 그룹을 이용한다면
union find
로도 풀이가 가능해 보인다. - 찾아보니
DP
,Bitmarking
으로도 풀 수 있다고 한다.