Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🔎 문제 소개
🖊️ 풀이
모든 단어의 길이는 같고, 각 단어의 시작과 끝끼리 연결하며, 단어는 반드시 좌상단부터 읽습니다.
이 규칙을 이용해서, 각 단어의 시작과 끝의 알파벳을 정점으로 갖지며 단어가 각 정점간의 연결관계를 나타낸다고 보고 이를 방향그래프로 치환해서 풀었습니다.
가령 다음과 같은 예시가 있다면,
다음과 같이 치환 할 수 있습니다.
각 단어들에서 중간에 위치한 글자들을 모두 지우고 보면 중복되는 간선들이 발생할 수도 있습니다. 가령
HLAD
와HCBD
가 있다면 둘은 모두H
→D
로 치환이 되는 것이죠.간선의 가중치를 해당 간선으로 치환된 단어의 개수로 두고 보아 이러한 점을 해결합니다.
따라서 다음과 같은 Weighted Directed Graph 가 나오게 되죠.
이 때, 가능한 경우의 수는 각 간선들의 가중치의 곱과 같습니다.
$(2 \times 1) \times (2 \times 4)$
이와 같이 나올 수 있는 모든 방향가중치그래프의 경우의 수를 구하고(브루트포스), 약간의 중복 처리(${}_nC_r$ )를 해주면 문제의 답을 구할 수 있습니다.
그래프를 어떻게 구성할 것인가...
정점$V$ 에 대해여 $|V| = 26$ 입니다. (알파벳의 개수)
정점의 수가 충분히 적으므로, 이 정도면 인접행렬로 가중치를 표기해도 공간 제약을 충분히 여유롭게 지킬 수 있겠습니다.
위와 같은 자료형으로 유사-인접행렬을 구현하겠습니다.
Python3의 경우
collections
모듈을 이용하면 좀 더 야매로 편하게 구현할 수 있습니다.그럼 시간복잡도를 구해봅시다.
시작 노드와 끝 노드가 있고, 중간에 하나의 노드를 경유하는 경로 쌍 2개를 구하면 됩니다.$T(N) = (a) + (b) \times (c) \times (d) \times (e)$ 가 됩니다.
따라서, (a) 문제에서 주어지는 입력을 받아 그래프를 만드는 시간 (b)시작 노드를 구하는 경우의 수, (c)마지막 노드를 구하는 경우의 수, (d) 두 개의 경유지를 고르는 경우의 수, (e) 선택한 경로에 대한 경우의 수를 구하는 시간...가 있을 때,
(a)는$O(N)$ 입니다.
(b), (c)는 알파벳 글자의 개수와 같으므로 각각$26$ 이죠.${}_nP_r$ 이라고 볼 때, $n = 26$ , $p = 2$ 입니다. 따라서 $26 \times 25$ 이 되겠습니다.
(d)는 n개의 글자 중 r개를 선택하는 것이므로,
(e) 는 4개의 간선과 이들의 가중치에 대한 단순한 산술연산으로 상수 시간$O(1)$ 에 해결이 됩니다.
종합하면 약$T(N) = O(N) + 26^4$ 정도가 되겠습니다.