동아리 내에서 진행되는 알고리즘 스터디 정리본입니다.
delena0702
codingstarfish
님과 함께 진행하였습니다.
첫 만남을 통해 스터디의 가이드 라인을 잡았다.
~@id
혹은 !@id
쿼리를 이용하면 해당 id를 가지고 있는 인원이 풀지 않은 문제를 뽑을 수 있습니다.#tag
쿼리를 이용하면 해당 tag를 가진 문제를 뽑을 수 있습니다.Codeforces가 스터디 진행 중에 있고, 모든 팀원이 참여할 수 있는 여건이 되는 경우, 대체될 수 있습니다.
5문제에 대해 문제 풀이를 진행하였습니다.
어느정도의 생각을 통해 특징을 발견할 수 있었다.
각 박스를 조커 박스라고 가정하고, 최소 이동 횟수를 구하여 답을 결정한다.
번 박스가 조커 박스일 때 조커 박스를 제외한 나머지 박스에 대해 아래의 규칙대로 수행한다.
모두가 같은 방식으로 풀어주었습니다.
육각수의 규칙을 찾아 미리 육각수를 구한 후에 진행을 해야했다.
번 육각수를 라 했을 때
위와 같이 일반화가 가능했다.
육각수를 바로 구할 수 있으니 나머지는 DP를 이용하여 N을 만드는 최소 개수를 구하려고 하였다.
를 만드는데 사용한 육각수의 최소 개수를 라고 하자. 는 특정 수에서 어느 육각수를 더해 만든 수일 것이다. 여기서 특정 수를 라고 하자. 그렇다면 를 만드는데 사용한 육각수의 최소 개수는 이다. dp table에 최솟값만 남기면서 갱신을 해주면 된다.
에서 각 에서 보다 작거나 같은 육각수를 모두 돌면서 dp table을 갱신해주었다.
100만 이내의 모든 육각수를 만들고 bfs로 에서 육각수를 빼가면서 0으로 도달할 때까지 탐색을 진행해준다.
delena0702
님이 단순 bfs는 에서 시간 초과가 일어날 가능성이 있어 이미 탐색에 사용한 육각수 보다 작은 육각수는 탐색하지 않도록 최적화를 진행해주었다고 한다.
문제에 1791보다 큰 정수는 ~ 의 설명을 이용하여 각 범위 내에서 미리 구해놓은 육각수를 반복문을 돌려 구하는 방법도 있다.
간선의 제거는 어려운 문제이다. 따라서 간선을 추가하는 문제로 변형하였다. 즉, 제거되는 간선을 제외한 그래프에서 간선을 추가하는 방식으로 해결하고자 하였다.
연결을 제거할 때 통신망이 분리되는 것은 변형된 문제에서 연결을 추가할 때 통신망이 합쳐지는 과정과 같다. union-by-size를 사용해 카운팅까지 진행해주었다.
Offline Query
에 대한 맛보기를 할 수 있었다. union-by-size
가 뭔지 모른다면 찾아보기 바란다. Union-Find
에서 경로 압축을 해도 편향되는 것을 막을 수 없기에 size에 기반하여 구현하면 이를 해결할 수 있다.
KMP
알고리즘의 Failure Function (pi배열)
의 성질을 이용한 문제이다.
pi배열
은 문자열의 번째 문자까지의 부분 문자열(길이가 인 접두사)에서 prefix 와 suffix 가 같은 최대 길이이다.
인 부분 문자열에 대해 생각할 때(문자열의 길이는 이라고 하자)
이때, 인 경우 에서의 반복되는 부분의 길이가 맞아 떨어지므로, 주기적인 문자열이 된다.
BOJ 1498번: 주기문 문제를 먼저 풀어보기 바란다.
delena0702
님이 위의 접근 과정에서의 pi배열
의 property에 대해 설명해주셨다.
처음에는 Union-Find
를 생각하였다. 하지만 해당 풀이로 쉽게 풀리지 않아 다른 풀이를 생각하게 되었다. (Union-Find
로도 풀리더라..)
bipartite matching
과 같은 접근법으로 진행해주었다.
모든 연결 요소를 순회하며, 두 그룹 간의 차이만 저장한다.
두 그룹의 차이를 저장하였으므로 배열의 값들을 두 그룹으로 나누었을 때, 차이가 최소가 되도록 하는 문제가 된다.
dp를 이용해 해결해주었다. 명의 차이로 부서를 배치할 수 있는가? 로 계산을 해주었다.
꽤 난이도가 있는 문제였다. bipartite matching
공부를 한지 별로 안돼서 그런지 어찌저찌 접근을 하였다.
다들 굉장히 잘 푸시더라... well known에 해당하는 문제들이 꽤 있어서 정반대의 풀이방식이 나오지는 않았다.
SCC(Strongly Connected Component)
Maximum Flow Algorithm
동아리 내에서 진행되는 알고리즘 스터디 정리본입니다.
delena0702
codingstarfish
님과 함께 진행하였습니다.