위상 정렬을 하기 위하여 dfs 를 수행합니다.
2-1. 첫번째 dfs 수행 결과를 결과 리스트인 orders 에 추가합니다. 알파벳 순서이기 때문에 g-k-l-h 가 반환됩니다.
2-1. 두번째 dfs 를 수행하면 o 가 반환 됩니다. 이 것을 orders 의 '앞' 에 붙입니다.
최종적으로 나온 o-g-k-l-h 리스트를 순회하며 반대 경로가 있는지 확인하여 cycle 이 있는지 검토 합니다. 아래 순서로 체크할 것 입니다.
g->o
k->o
k->g
l->o
l->g
l->k
h->o
h->g
h->k
h->l
위상 정렬 상에 없는 알파벳들을 orders 뒤에 순차적으로 붙입니다.
o-g-k-l-h-a-b-c-d-.......-w-x-y-z
결과 출력.
알고리즘 결과는 아래와 같이 나옵니다.
INVALID HYPOTHESIS
ogklhabcdefijmnpqrstuvwxyz
deiotabcfghjklmnpqrsuvwxyz
순서 관계가 있으면 먼저 출력이 되므로 세번째 예제 같은 경우 책과는 다르게 deiotabcd.....로 출력이 됩니다.
문제에는 가능한 순서가 여러 개일 경우 아무거나 출력해도 된다고 해서 마지막 문제 답을 그냥 놔두었는데 혹시 문제가 되는지요??
kwangswei
안녕하세요.
DICTIONARY 검토 요청 드립니다.
알고리즘은 아래와 같습니다.
gg
kia
lotte
lg
hanhwa
를 예로 들어 설명하겠습니다.
입력 문자열로부터 문자 간의 순서 그래프를 만듭니다.
g->k
k->l
o->g
l->h
위상 정렬을 하기 위하여 dfs 를 수행합니다.
2-1. 첫번째 dfs 수행 결과를 결과 리스트인 orders 에 추가합니다. 알파벳 순서이기 때문에 g-k-l-h 가 반환됩니다.
2-1. 두번째 dfs 를 수행하면 o 가 반환 됩니다. 이 것을 orders 의 '앞' 에 붙입니다.
최종적으로 나온 o-g-k-l-h 리스트를 순회하며 반대 경로가 있는지 확인하여 cycle 이 있는지 검토 합니다. 아래 순서로 체크할 것 입니다.
g->o
k->o
k->g
l->o
l->g
l->k
h->o
h->g
h->k
h->l
위상 정렬 상에 없는 알파벳들을 orders 뒤에 순차적으로 붙입니다.
o-g-k-l-h-a-b-c-d-.......-w-x-y-z
결과 출력.
알고리즘 결과는 아래와 같이 나옵니다.
INVALID HYPOTHESIS
ogklhabcdefijmnpqrstuvwxyz
deiotabcfghjklmnpqrsuvwxyz
순서 관계가 있으면 먼저 출력이 되므로 세번째 예제 같은 경우 책과는 다르게 deiotabcd.....로 출력이 됩니다.
문제에는 가능한 순서가 여러 개일 경우 아무거나 출력해도 된다고 해서 마지막 문제 답을 그냥 놔두었는데 혹시 문제가 되는지요??
검토 부탁 드립니다.
11년 전