티스토리 뷰
https://www.acmicpc.net/problem/10266
10266번: 시계 사진들
상근이는 보통의 시계와는 다른 독특한 시계 사진 두장이 있습니다. 시계는 n개의 동일한 길이와 목적을 가진 시계 바늘들을 가지고 있습니다. 애석하게도 시계의 숫자들은 희미해져 각 시계 바
www.acmicpc.net
시계의 침만 주어진 두 시계가 시간이 일치할 확률을 구하는 문제입니다. 주의할 점은 침이 일정한 규칙을 가지고 있지 않기 때문에, 1 2 3 4 와 4 2 1 3 은 possible을 가집니다.
KMP알고리즘을 이용하여 간단히 구할 수 있습니다. (KMP라는 것을 생각하기 좀 어려웠다... 처음에는 각으로 계산하려했다)
우선, 입력값은 0 <= a < 360000 이므로, '0' 만으로 이루어진 360000 길이의 string을 2개 구합니다.
(bool 배열 등을 kmp에 활용하면 더 빠를 것으로 예상. 하지만 전에 string을 기준으로 짰었어서 그냥 string으로 처리했습니다....)
그 다음 입력으로 들어오는 위치의 값을 모두 '1'로 바꿉니다. 그리고 첫 번째 입력의 값들로 구성된 string (s1)을 탐색 당하는 string 이라고 했을 때, 시계는 환형으로 동작하므로, s1을 한 번 더 이어 써준다면 탐색하는 string (s2)를 환형으로 처리한 것과 같은 효과를 얻을 수 있습니다.
그리하여 760000 길이의 s1에 대해 360000 길이의 s2를 탐색하여 끝까지 가기 전 일치하는 부분이 생기면 possible한 경우입니다.
코드는 다음과 같습니다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 20057 마법사 상어와 토네이도 C++ (0) | 2021.09.05 |
---|---|
백준 17609 C++ 회문 (0) | 2021.08.28 |
백준 17143 낚시왕 C++ (0) | 2021.08.21 |
백준 8111 0과 1 C++ (0) | 2021.08.03 |
퀵소트 python3 (0) | 2021.07.21 |