Koder / 박성훈
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 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만자 짜리 문자열이 된다. 그러면..

article thumbnail
백준 BOJ 4354 - 문자열 제곱
알고리즘/백준 BOJ 2023. 1. 16. 19:15

오늘의 KMP 그 두번째 문제 https://www.acmicpc.net/problem/4354 4354번: 문자열 제곱 알파벳 소문자로 이루어진 두 문자열 a와 b가 주어졌을 때, a*b는 두 문자열을 이어붙이는 것을 뜻한다. 예를 들어, a="abc", b="def"일 때, a*b="abcdef"이다. 이러한 이어 붙이는 것을 곱셈으로 생각한다 www.acmicpc.net 반복되는 가장 작은 문자열의 길이를 https://blog.koderpark.dev/263 1305번 풀이와 동일하게 구해준 다음, ( 문자열의 길이 / 반복되는 가장 작은 문자열의 길이 ) 로 구해줄 수 있다. 이때, 코너케이스가 있는데, 나눈 나머지를 보는 방법도 있다고 하지만 나는 그냥 입력받은 문자열을 두배로 이어붙여서 나온..

article thumbnail
백준 BOJ 1305 - 광고
알고리즘/백준 BOJ 2023. 1. 16. 18:46

@이화월백 이 골라준 태그 문제풀이 오늘의 태그는 KMP되시겠다 https://www.acmicpc.net/problem/1305 1305번: 광고 세준이는 길 한가운데에서 전광판을 쳐다보고 있었다. 전광판에는 광고가 흘러나오고 있었다. 한참을 전광판을 쳐다본 세준이는 이 광고가 의미하는 것이 무엇인지 궁금해지기 시작했다. 전광 www.acmicpc.net KMP 알고리즘의 실패함수 개념에 대한 이해를 필요로 한다. KMP 알고리즘에서 전처리로 사용되는 실패함수의 값 Fail[K] 는 처음부터 시작하는 길이 K+1짜리 부분 문자열에서 접두사와 접미사가 같아지는 최대 길이 라는 의미를 지닌다. for(int i=0,j=1; j0 && s[i] != s[j]) i = fail[i-1]; if(s[i] == ..

반응형