Koder / 박성훈
article thumbnail
백준 BOJ 1787 - 문자열의 주기 예측
알고리즘/백준 BOJ 2023. 1. 25. 20:20

KMP 연습문제 https://www.acmicpc.net/problem/1787 1787번: 문자열의 주기 예측 P8 = 6, P7 = 6, P6 = 4, P5 = 4, P4 = 2, P3 = 2, P2 = 0, P1 = 0 www.acmicpc.net 실패함수를 활용해 구한 값과 정확히 정반대를 요구하는 문제. 접두사와 접미사가 같아지는 최소 길이를 구해서 문자열의 전체 길이와 빼면 문제에서 요구하는 "추정할 수 있는 주기 중 가장 긴 것의 길이" 를 구할 수 있다. 실패함수에서 뒤로 돌아가고자 할때 j = fail[j-1]; 사용하는 이 구문에서 착안하고 while(dp[i] && fail[dp[i]-1]) dp[i] = fail[dp[i]-1]; 계속 뒤로 돌아가게끔 while문을 사용해서 작성해..

article thumbnail
백준 BOJ 7575 - 바이러스
알고리즘/백준 BOJ 2023. 1. 21. 18:12

https://www.acmicpc.net/problem/7575 7575번: 바이러스 첫 번째 줄에는 감염된 프로그램의 개수 N 과 바이러스 코드 추정을 위한 최소 길이를 나타내는 정수 K 가 주어진다. 단, 2 ≤ N ≤ 100이고, 4 ≤ K ≤ 1,000이다. 두 번째 줄부터 각 프로그램에 대한 www.acmicpc.net KMP 3일차 그 두번째 문제 문제가 복잡하게 생겼는데 구현 자체는 그리 복잡하지는 않다. 입력되는 문자열 중 하나에서 길이가 K인 부분문자열 S'를 분리한 뒤, 다른 모든 문자열에 이 S' 이 포함되어있는지 세어주면 되는 문제이다. KMP 알고리즘을 적용하면 생각보다 나이브하게 풀리니까 부분문자열 분리하거나 할때 괜히 복잡하게 고민하지 말고 그냥 O(N)으로 분리해주도록 하자..

article thumbnail
백준 BOJ 1701 - Cubeditor
알고리즘/백준 BOJ 2023. 1. 21. 18:03

https://www.acmicpc.net/problem/1701 1701번: Cubeditor Cubelover는 프로그래밍 언어 Whitespace의 코딩을 도와주는 언어인 Cubelang을 만들었다. Cubelang을 이용해 코딩을 하다보니, 점점 이 언어에 맞는 새로운 에디터가 필요하게 되었다. 오랜 시간 고생한 www.acmicpc.net KMP를 뇌에 박기위한 연습 3일차 실패함수 배열을 활용하는 문제였다. 접두사와 접미사가 같아지는 최대 길이가 fail[k] 일때, 접두사와 접미사가 같아지면서 두번 이상 나오는 문자열의 조건을 충족하기 때문에, 실패함수 배열에서의 최대값이 문제에서 요구하는 정답이 된다. 접미사는 가변적으로 바뀔수 있는 반면 접두사는 문자열의 제일 앞을 항상 포함하고 있기 때..

article thumbnail
백준 BOJ 13705 - Ax+Bsin(x)=C
알고리즘/백준 BOJ 2023. 1. 20. 17:29

https://www.acmicpc.net/problem/13705 13705번: Ax+Bsin(x)=C 첫째 줄에 정수 A, B, C가 주어진다. (0 =B 이므로 f'(x) 는 모든 x에 대하여 0 이상임을 확인할 수 있다. f(x)가 증가하는 함수이기 때문에, 이분탐색을 통해서 답을 구해줄 수 있고, 이렇게 해결할시 보다 쉬운 버전인 14786번을 해결할 수 있다. 웃긴게 요구하는 정확도 자체는 14786이 더 높다;;; 테스트케이스의 ..

article thumbnail
백준 BOJ 11585 - 속타는 저녁 메뉴
알고리즘/백준 BOJ 2023. 1. 18. 15:31

https://www.acmicpc.net/problem/11585 11585번: 속타는 저녁 메뉴 수원이와 친구들은 저녁 메뉴를 잘 선택하지 못한다. 배가 고픈 수원이가 보다 못해 메뉴를 정하곤 하는데 이마저도 반대에 부딪히는 경우에는 수원이가 원형 룰렛을 돌려 결정하곤 한다. 이 원 www.acmicpc.net 바로 전에 풀었던 10266 - 시계 사진들과 상당히 유사한 문제 환형으로 이어지는 문자열에서 다른 문자열이 몇번 포함되는지 체크하는 문제이다. 환형을 일일히 구현하기는 상당히 복잡하기 때문에 그냥 문자열 A와 B가 있을때 A를 두번 이어붙인 A' 속에 B가 몇번이나 포함되는지 세면 된다. 몇번이나 포함되는지 세는것은 kmp 알고리즘의 구현에 해당한다. 조심해야할 부분으로써 1 A A 와 같이..

article thumbnail
백준 BOJ 10266 - 시계 사진들
알고리즘/백준 BOJ 2023. 1. 18. 14:48

KMP 알고리즘을 장기기억에 남기기위해서 텀을 두고 풀고있다 아직까지는 기억해내는듯 https://www.acmicpc.net/problem/10266 10266번: 시계 사진들 상근이는 보통의 시계와는 다른 독특한 시계 사진 두장이 있습니다. 시계는 n개의 동일한 길이와 목적을 가진 시계 바늘들을 가지고 있습니다. 애석하게도 시계의 숫자들은 희미해져 각 시계 바 www.acmicpc.net 시곗바늘의 위치가 36만 등분된 각도값으로 주어질 때, 시계 1번을 적절히 회전하여 시계 2번을 만들 수 있는지 묻는 문제이다. 시곗바늘의 위치를 36만칸 짜리 배열에다 저장해서, 시곗바늘이 있는 곳의 배열 값을 1이라고 했을때 배열을 주우우욱 나열해놓고 보면 0과 1로 만들어진 36만자 짜리 문자열이 된다. 그러면..

반응형