토기 글귀
문제
한 발굴 현장에서 토기 조각이 여러 개 나왔고, 조각마다 소문자 알파벳으로 된 글귀 하나가 적혀 있다. 긴 세월을 묻혀 있었으므로 글자가 한두 개 섞여 들어간 조각도 있다.
연구자는 글귀를 세 가지로 나눈다. 글귀를 앞에서 읽은 것과 뒤에서 읽은 것이 같으면 온전한 글귀이고, 이 경우 0으로 적는다. 앞에서 읽은 것과 뒤에서 읽은 것이 다르지만 글자 하나를 지우면 앞뒤로 같아지는 글귀는 한 글자 깨진 글귀이고, 이 경우 1로 적는다. 글자를 하나 지워도 앞뒤로 같아지지 않으면 알 수 없는 글귀이고, 이 경우 2로 적는다. 지우는 글자는 글귀의 어느 자리에 있어도 되지만, 지울 수 있는 글자는 하나뿐이다.
글귀가 T개 주어졌을 때, 글귀마다 0과 1과 2 가운데 어느 것인지 차례대로 판정하는 프로그램을 작성하여라.
예를 들어 글귀 세 개가 주어졌다고 해보자. 각 글귀를 뒤에서 읽은 것과 판정 결과를 적으면 다음의 표와 같다.
| 글귀 | 뒤에서 읽은 것 | 판정 | 답 |
|---|---|---|---|
| abcba | abcba | 그대로 같다 | 0 |
| abca | acba | b를 지우면 aca가 되어 앞뒤로 같다 | 1 |
| abcab | bacba | 어느 글자를 지워도 앞뒤로 같아지지 않는다 | 2 |
두 번째 글귀 abca를 좀 더 보자. 첫 글자와 마지막 글자는 둘 다 a라서 맞지만, 두 번째 글자 b와 끝에서 두 번째 글자 c가 다르다. 여기서 b를 지우면 aca가 되고 이것은 앞뒤로 같다. c를 지우면 aba가 되는데 이것도 앞뒤로 같다. 둘 가운데 하나만 되어도 한 글자 깨진 글귀이므로 답은 1이다.
세 번째 글귀 abcab은 첫 글자가 a이고 마지막 글자가 b라서 처음부터 어긋난다. 첫 글자 a를 지우면 bcab이 되고 뒤에서 읽으면 bacb이므로 다르다. 마지막 글자 b를 지우면 abca가 되고 뒤에서 읽으면 acba이므로 다르다. 가운데 글자를 지워도 첫 글자와 마지막 글자가 그대로 어긋나 있으므로 답은 2이다.
글자 수가 하나인 글귀는 앞에서 읽어도 뒤에서 읽어도 같으므로 답이 0이다.
입출력 예시
예시 1
입력
2 ccacbzbcabaaaabacbbcacc abcccaacbbcaacccba
출력
1 0
예시 2
입력
1 aaacaabbaaabbaacaaa
출력
0
예시 3
입력
1 qccbyaabaccabaazbccw
출력
2
입력 조건
가장 먼저 글귀의 수 T가 첫째 줄에 주어진다. T는 1 이상 30 이하의 자연수다.
이어서 둘째 줄부터 T+1번째 줄까지 글귀가 한 줄에 하나씩 주어진다. 각 글귀는 소문자 알파벳으로만 이루어져 있으며, 글귀 하나의 길이는 1 이상 100,000 이하다. 글귀 안에 공백이나 대문자나 숫자는 들어 있지 않다. 한 줄에 글귀가 하나씩 오므로 입력은 모두 T+1줄이다.
출력 조건
글귀마다 한 줄씩, 판정 결과를 입력에 주어진 순서대로 출력한다. 온전한 글귀는 0, 한 글자 깨진 글귀는 1, 둘 다 아닌 글귀는 2를 출력한다.
한 줄에 수 하나를 출력하고 줄을 바꾼다. 앞뒤에 다른 글자나 공백은 붙이지 않으며, 마지막 줄 다음에 빈 줄을 더 붙이지도 않는다.
요구사항
- 입력은 표준 입력으로 받고 답은 표준 출력으로 내보냅니다
- 지울 수 있는 글자는 하나뿐입니다. 두 글자 이상을 지워야 앞뒤로 같아지는 글귀는 2입니다
- 이미 앞뒤로 같은 글귀는 0입니다. 글자를 지우지 않아도 되는 경우에 1을 적으면 틀린 답이 됩니다
- 글귀마다 한 줄씩, 입력에 주어진 순서대로 출력합니다
- 글귀 하나의 길이가 100,000까지 올라가므로 지울 자리를 하나씩 모두 시험해 보는 방법으로는 시간 안에 끝나지 않습니다
- 채점은 출력을 기대값과 글자 하나까지 견줍니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 케이스는 14개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 14개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 14개를 전부 통과해야 해결입니다.
1 aaacaabbaaabbaacaaa
0
1 qccbyaabaccabaazbccw
2
2 ccacbzbcabaaaabacbbcacc abcccaacbbcaacccba
1 0
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.