문제 링크
- https://icpc.me/26640
사용 알고리즘
- 해싱
시간복잡도
- $O(N)$
풀이
주어진 문자열이 팰린드롬인지 확인하는 간단한 문제인데… 문제는 메모리 제한이 너무 작아서 문자열 전체를 저장할 수 없습니다. 문자열의 길이가 입력으로 주어지지 않고 최대 $2 \times 10^7$인 것만 알고 있을 때, 메모리를 $4MB$ 이하만 사용해서 주어진 문자열이 팰린드롬인지 확인해야 합니다.
문자열을 저장할 수 없으면 해시값을 저장하면 됩니다. 두 가지 해시값을 저장할 건데, 하나는 해시값을 $f(s_0s_1\cdots s_{n-1}) = \sum s_iP^i$ 함수를 이용해 계산하고, 다른 하나는 $g(s_0s_1\cdots s_{n-1}) = \sum s_iP^{n-i-1}$을 이용합니다. 어떤 문자열 $S$가 팰린드롬인 것과 $f(S) = g(S)$인 것은 동치이므로 정수 2개만 이용해 문제를 해결할 수 있습니다.
전체 코드
1 |
|