cjswo4034   3년 전

초기 감염자일 경우는 다음과 같습니다.

1. 초기 감염자가 참여한 모든 모임의 참가자는 감염된다. 
   (모임의 참여자 중 한 명이라도 최종 감염자가 아니라면 해당 모임의 참가자들은 초기 감염자가 아니다.)
2. 초기 감염자는 최종 감염자 리스트에 기록된다.

그리고 역추적이 불가능한 경우는 다음과 같습니다.

1. 초기 감염자가 최종 감염자가 아닌 경우
2. 초기 감염자에 의해 감염된 참가자들이 이후 참여한 모임의 전원이 감염되지 않은 경우
3. 시작 전 감염된 참가자가 없는데 모임 후 감염된 사람이 있는 경우

따라서 다음과 같이 코드를 짰습니다.

1. 참가자 전원이 최종 감염자인 모임을 구한다.

2. 참가자 i가 참가한 모든 모임의 전원이 최종 감염자라면 i는 최초 감염자이다.

3. 2를 토대로 0번째 모임부터 시뮬레이션을 한다.

4. 3의 결과와 입력된 최종 감염자 리스트를 비교하여 일치하면 결과를 출력하고 다르면 No를 출력한다.

그런데 20% 즈음에서 틀렸다고 나오네요.. 

이것저것 바꿔봐도 결과가 달라지는 일이 없는데 제가 놓친 경우나 반례를 주시면 감사하겠습니다

cjswo4034   3년 전

"모임의 참여자 중 한명이라도 최종 감염자가 아니라면 해당 모임의 참가자들은 초기 감염자가 아니다" 라는 조건을 기반으로 처음부터 다시 구현했는데 통과했네요

따라서 "참가한 모든 모임이 집단 감염됐을 경우 최초 감염자이다"가 틀렸다라는 걸로 보이는데 잘못된 가정인가요?? 아니면 구현을 잘못한 것일까요..

ckdgus2482   3년 전

잘못된 가정입니다. 최초 감염자가 아닌데 처음 참가한 모임에서 감염되기만 하면 그 이후로는 감염자이므로 나머지 모든 모임에서도 집단 감염이 발생할 수 밖에 없죠.

cjswo4034   3년 전

이해가 어렵네요ㅜㅜ

최초 감염자가 아닌 참가자가 처음 참가한 모임에서 감염되었다고 하더라도 결과를 토대로 역추적을 하는 것이기 때문에

처음 참가한 모임에서 초기 감염자나 다른 감염자에 의해 감염됐는지 알 수 없으므로 초기 감염자로 의심(예측)할 수 있지 않을까요??

ckdgus2482   3년 전

가정한다라는 의미를 제가 다르게 받아들인것 같습니다

우선 초기 감염자일 것이라고 용의선 상에 두고 주어진 정보를 토대로 용의자(?)를 제거하는 방식으로 하는게 맞습니다

ckdgus2482   3년 전

첨언하자면 0번째부터 시뮬레이션 하는 과정은 불필요합니다

역방향 스캔 한번으로 답을 구할 수 있습니다

댓글을 작성하려면 로그인해야 합니다.