시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 256 MB41816611036.667%

문제

종우는 SPC(Saenaegi Programming Contest)의 주최자이다. SPC는 그 이름처럼 새내기만을 대상으로 하는 대회이다. 그런데 종우는 SPC의 참가자에 몰래 헌내기가 섞인 것이 아닌지 의심이 들었다. 따라서 종우는 헌내기 신고를 받기로 했다. 참가자 각자에게 알고 있는 헌내기를 지목해달라고 한 것이다.

그런데 모든 신고를 곧이곧대로 믿을 수는 없다. 헌내기 신고를 한 당사자가 새내기인지 헌내기인지 아직 모르기 때문이다. 새내기가 한 신고라면 괜찮겠지만, 헌내기가 자신은 새내기인 척 다른 사람을 신고할 수도 있다. 이 경우에는 신고를 믿기 어려워진다. 종우는 이를 곰곰이 생각하다가 아래와 같은 규칙이 있다는 것을 깨달았다.

  1. 모든 참가자는 각각 새내기 또는 헌내기 둘 중 하나이다.
  2. 만약 어떤 참가자가 새내기라면, 그 사람이 제보한 신고는 모두 사실이다.
  3. 만약 어떤 참가자가 헌내기라면, 그 사람이 제보한 신고는 모두 거짓이다.

신고가 사실이라는 것은 신고를 당한 대상이 헌내기가 맞다는 것이고, 반대로 거짓이라는 것은 신고를 당한 대상이 새내기라는 것이다. 이제 종우는 최악의 상황, 다시 말해 헌내기가 제일 많을 때를 대비하려 한다. 그렇다면 현재 신고 상황에서 가능한 경우들 내에서 헌내기는 최대 몇 명 존재할 수 있을까? 이를 계산해보자.

입력

첫째 줄에 참가자 수를 의미하는 정수 N(1 ≤ N ≤ 2,000)이 주어진다.

다음 N개의 줄에는 N개의 문자로 현재 신고 상황이 주어진다. x번째 줄의 y번째 문자가 1이면 x번 참가자가 y번 참가자를 신고한 것이고, 0이면 신고하지 않은 것이다.

주어지는 입력이 본문에 제시된 규칙과 모순된 경우는 없다.

출력

본문의 규칙을 따를 때 현재 신고 상황에서 가능한 최대 헌내기 인원수를 출력한다.

예제 입력 1

3
011
000
100

예제 출력 1

2

예제 1에는 아래와 같은 3개의 신고가 존재한다.

  • 1번 참가자가 2번 참가자를 신고
  • 1번 참가자가 3번 참가자를 신고
  • 3번 참가자가 1번 참가자를 신고

3명이 모두 헌내기인 경우는 본문의 규칙과 모순이 생기기 때문에 불가능하다.

2명이 헌내기인 경우로 1번 참가자가 새내기이고 2번, 3번 참가자가 헌내기인 경우가 가능하다.

이 경우 1번이 제보한 신고는 모두 사실이 되고 3번이 제보한 신고는 거짓이 된다.

예제 입력 2

4
0000
0001
0001
0000

예제 출력 2

3

예제 2에는 아래와 같은 2개의 신고가 존재한다.

  • 2번 참가자가 4번 참가자를 신고
  • 3번 참가자가 4번 참가자를 신고

4명이 모두 헌내기인 경우는 본문의 규칙과 모순이 생기기 때문에 불가능하다.

3명이 헌내기인 경우로 4번 참가자가 새내기이고 1번, 2번, 3번 참가자가 헌내기인 경우가 가능하다.

이 경우 2번, 3번이 제보한 신고는 모두 거짓이 된다.

출처

University > 중앙대학교 > 2019 NPC (Newbie Programming Contest) I번