0000000000   2년 전

위상정렬로 해 봤는데 93% 부근에서 틀립니다. 반례가 있을까요?

wizardrabbit   2년 전

문제가 좀 애매하고 부실합니다. 문제의 설명과 달리, 테스트케이스에서 주어지는 단어들은 사전순으로 정렬되어 있지 않을 수도 있습니다. 이걸 테스트케이스로 표현하면

입력:
aa
a

정답:
!

출력:
?

와 같은 예를 들 수 있습니다.

aa는 a보다 무조건 사전적으로 나중임이 확실한데 먼저 온 경우이므로, 이런 경우에는 올바르지 않은 입력으로 간주하고 "!" 를 출력해야 합니다.

저는 이 경우를 고려하기 위해 아래와 같은 논리를 적용했습니다:

1. 모든 단어들을 모두 서로 비교한다 (Brute-forcing).
2. 단어 두 개를 각각 A, B라 하자. (단, A가 B보다 먼저 온 단어이다.) 이 때 A, B를 min(A의 길이, B의 길이) 의 길이만큼 비교 (A = 'abc', B = 'abcde' 일 경우 'abc'까지 비교) 한 후, 비교한 부분이 모두 일치할 경우 3번으로 넘어간다.
3. 만약 A의 길이가 B의 길이보다 큰 경우 바로 올바르지 않은 입력으로 간주하고, 무조건 결과를 "!" 로 결정한다.

즉 A = 'abcdef', B = 'abcd' 의 경우 앞의 'abcd' 가 모두 일치하고, A의 길이가 더 길기 때문에 A는 무조건 사전순으로 B보다 뒤임에도 앞에 있으니 '!' 출력, A = 'abccef', B = 'abcd' 의 경우 네 번째 문자에서 c != d 이므로 3번으로 넘어가지 않습니다.

https://www.acmicpc.net/board/... 에 이미 이 얘기에 대해 나온 적이 있습니다.

그냥 문제가 좀 더럽구나, 생각하시고 이 경우를 고려해 주시면 되겠습니다.

0000000000   2년 전

아 여기서 !를 출력해야 되는데 ?를 출력하고 있었네요... 감사합니다!

wizardrabbit   2년 전

오, 이미 구현해 두셨었네요.

사소한 실수여서 정말 다행입니다.

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