아 정말 복잡하고 더럽고 어려운 문제.
내가 푼 방법이 위와 같을 수도.
문제정리)
여러 개의 문자열이 주어지는데, 이 중 오버랩 조건(한 문자열의 끝과 다른 문자의 시작점 사이가 같은 것)으로 이어서 그 길이가 가장 최소인 문자열의 길이를 찾아라.
문제를 이해하는데도 오래 걸렸고, 풀다가 잘 못 이해한 부분 때문에도 멘붕
테스트케이스가 주어지지 않으면 풀기 정말 까다로운 문제인거 같다.
문제 풀이)
문자열들이 일렬로 나열되는 모든 경우의 수를 구해야 한다. 한마디로 완전탐색 후 조건에 맞추어 문자열을 정리해야한다.
문제를 이해하면서부터 풀이에 대한 몇 가지 이슈에 대해서 정리해보면
- 주어진 원소들을 이용하여 겹침없이 만들 수 있는 모든 경우의 수를 구해야 한다.
- 두 문자열이 overlap 되는 부분을 어떻게 비교 할지에 대해서
=> 1) 앞 쪽 단어(누적처리된 문자열)를 순회하며 뒤 쪽 단어의 첫 번째 문자와 일치하는 것을 찾는다.
2) 찾았으면 찾아진 앞쪽단어(누적처리된 문자열)의 인덱스부터 뒤쪽단어와 1대1비교한다.
-- 달라지는 게 있다면 실패
-- 달라지는 게 없이 끝까지 간다면 해당 문자열을 더 해주어 갱신해준다.
마지막에 총 합쳐진 문자열의 길이를 통해 최소값을 갱신해주도록 한다.
- 문자열 각 번째와 그 다음번째를 비교하는 것이 아닌 앞까지의 연산이 완료된 축적된 문자열과 그 다음 문자열의 비교를 해야되는 함정이 있는 문제 ㅜㅜ
암걸리는 문제다.
'알고리즘문제풀이' 카테고리의 다른 글
더블릿_골드바하의 추측 (0) | 2015.04.17 |
---|---|
더블릿_색종이 올려놓기 (0) | 2015.04.17 |
더블릿_팔씨름운동회 (0) | 2015.04.14 |
더블릿_13일의 금요일 (0) | 2015.04.14 |
더블릿_어망투망 (0) | 2015.04.14 |