문제 링크
- http://icpc.me/2848
문제 출처
- 2010/2011 COCI Contest #6 4번
사용 알고리즘
- 위상정렬
- 플로이드 와샬 알고리즘
풀이
N개의 단어가 주어지면 미리 등장하는 알파벳들의 사전순 순서를 저장해둡시다. 이것은 O(N2 * 길이)에 할 수 있습니다.
g[i][j] = 1은 알파벳 i보다 알파벳 j가 뒤에 나와야 한다는 것을 의미할 때, 플로이드 와샬 알고리즘을 돌려주면 모든 알파벳 쌍에 대해 순서를 알 수 있습니다.
만약 g[i][j]와 g[j][i] 모두 1이라면 !를 출력하면 됩니다.
모든 알파벳 K에대해서 g[K][i] = 1인 i의 개수를 저장해둡시다.
단어에 등장한 알파벳이 M개라고 하면, g[K][i] = 1을 만족하는 i의 개수는 0, 1, 2, 3, … , M-1이 나와야 합니다. 그렇지 않다면 ?를 출력해주면 됩니다.
!도 아니고 ?도 아니라면 잘 정렬을 해서 출력하면 됩니다.
전체 코드
1 |
|