Algorithmic Engagements 2010. Rectangles 2 부분 직사각형의 크기가 $w \times h$ 라면, 그 둘레는 $2(w+h)$ 이고, 등장 횟수는 $(n-w+1)(m-h+1)$ 입니다. 이를 토대로 모든 가능한 경우를 나열한 후 횟수를 합해주면 됩니다. Algorithmic Engagements 2010. Coins 문자열을 수열로 변환합니다. 앞면에 대해서는 $1$ 을, 뒷면에 대해서는 $-k$ 를 적어줍시다. 이렇게 하면, 구간의 합이 $0$ 인 것과 앞면의 수가 뒷면의 수보다 $k$ 배 많이 나온 것이 동치입니다. 고로 구간 합이 0인 가장 긴 구간을 찾아야 합니다. 위 수열의 부분합 $S[i] = \sum_{i = 1}^{n} A[i]$ 를 구해줍시다. 이제 답은 $..

Result Analysis 이번 서울 리저널에서의 각 대학 별 상위 팀은 다음과 같다. 별 일 없다면 상위 3팀이 진출할 것이다. 서울대학교: FSM (World Finals 진출 확정) KAIST: DO Solve (World Finals 진출 확정) 숭실대학교: LongestPathToWF (World Finals 진출 매우 유력) 성균관대학교: iota24 (World Finals 진출 가능성 약간 존재) 고려대학교: TLE NIE TAK 서울대학교의 FSM 팀은 2020년 대회를 우승한 Let Us Win ICPC WF 팀과 동일한 멤버로 출전하였다 (김세빈, 윤교준, 이민제). 2020년에도 신입생 팀으로 ICPC Regional Champion을 차지한 팀으로, UCPC 2021, SCPC ..
작년에 쓴 인예 풀이가 도움이 되었다는 말씀을 전해 주신 분들이 몇 있었다. 이번에도 문제가 백준 온라인 저지에서 상당 부분 채점이 되기 때문에 간단히 풀이를 적어보려고 한다. 자세하게 설명할 여력이 안 되는 점에는 양해를 구한다. 일단 DFG 외에는 백준에 전부 제출해서 맞은 코드들이지만, 풀이가 틀릴 가능성도 있다. A. Best Student 여러 풀이가 있지만 내가 생각하기에 AC받기 제일 쉬운 풀이는 다음과 같다. (대회장 환경에 따라 시간 초과가 날 수도 있지만, 안 날 것 같다.) 구간을 크기 $B = 100$의 버킷 1000개로 쪼개자. 모든 $0 \le i \le j \le N / B$ 에 대해, 구간 $[iB, jB - 1]$ 에서 가장 많이 등장하는 숫자를 $O(N^2/B)$ 에 전처..

가중치 있는 방향 그래프 $G$ 에서 두 정점 $s, t$ 가 쿼리로 주어질 때, $s$ 에서 $t$ 로 가는 최단 경로를 구하는 문제를 흔히 모든 쌍 최단 경로 문제 (All-Pair Shortest Path, APSP) 문제라고 부른다. APSP 문제는 그래프 이론의 기초적인 문제 중 하나로, Floyd-Warshall Algorithm을 사용하여 $O(n^3)$ 시간에 해결하는 방법이 아주 잘 알려져 있으며 알고리즘을 공부하다 보면 누구나 접하게 될 기초 알고리즘 중 하나이다. Floyd Warshall Algorithm은 APSP 문제에 대해서 다음과 같은 자료구조를 만드는 알고리즘이라고 볼 수 있다: 자료 구조의 초기화에는 $O(n^3)$ 이 걸린다. 자료 구조는 $O(n^2)$ 의 메모리를 사..
원래 한 150점 어치 풀이를 적어놓은 게 있었는데, 포맷하다가 글이 사라져서 더 이상 글을 쓰고 싶지 않았다. 그래도 아예 안 적을 수는 없으니 늦게나마 글을 작성해 본다. 문제 풀이 한 줄 요약 육각형 영역: 다각형 내부의 모든 격자점 간의 거리 합을 구하는 문제로 환원할 수 있다. 다각형의 3개의 축을 분리하여 생각하면, 각 축에 대해서 삼각분할과 비슷한 일종의 트리를 형성할 수 있고, 모든 경로가 이 트리 상의 유일한 경로로 환원됨을 관찰할 수 있다. BST에 Plane sweeping을 사용하여 이러한 트리를 빠르게 구성한 후 트리 안에서 동적 계획법을 수행할 수 있다. 밀림 점프: Cartesian tree 형태의 그래프에서 최단 경로 쿼리를 빠르게 해결하는 문제이다. 기본적으로 그래프의 Tr..
https://www.acmicpc.net/problem/19021 트리를 DFS하면서, 노드의 방문을 시작한 시점에 (, 끝내는 시점에 ) 를 붙이는 식으로 올바른 괄호 문자열을 만들어 줄 수 있습니다. 주어진 입력을 트리가 아니라 괄호 문자열이라고 생각하면 1, 2번 연산은 짝이 맞는 괄호 쌍을 추가하는 것이고 3번 연산은 짝이 맞는 괄호 쌍을 제거하는 것 으로 볼 수 있습니다. Edit Distance와 LCS의 관계처럼, 두 괄호 문자열의 최대 공통 부분 괄호 문자열을 찾아 줍시다. $T_1$ 의 모든 괄호를 제거 / $T_2$ 의 모든 괄호를 추가하는 비용을 미리 지불했다고 하면, 두 괄호 $A, B$ 를 매치했을 때의 비용은 $C_3 \times \text{(A, B를 매칭하는 데 드는 비용)..
https://www.acmicpc.net/problem/19616 모든 상태를 중 가중치가 가장 작은 $K$ 개를 탐색할 때 좋은 전략은, 상태 전이 그래프를 Heap과 같이 구성하는 것입니다. 몇 가지 특수 케이스를 탐색해 보고 전체 문제로 확장시켜 봅시다. $M = 1, x_1 = 0, y_1 = N$, 제곱 풀이 우리는 모든 가능한 $2^N$ 개의 집합 중 가중치가 가장 작은 $K$ 개를 탐색해야 합니다. 탐색 트리를 만드는데, 만약에 모든 상태가 가능한 집합에 일대일 대응되고 상태 $X$ 의 자식은 항상 현재 상태 이상의 가중치를 가지며 전이가 트리의 형태를 띈다 라고 하면, 루트 상태를 먼저 우선순위 큐에 넣은 후, 큐에서 현재 상태를 빼고, 현재 상태의 "자식 상태" 를 넣는 식으로 모든 가..
CCC 2017 S2. High Tide Low Tide 입력으로 들어온 수열을 정렬한 후, 만조때는 중앙값부터 감소하는 순서대로, 간조일때는 중앙값부터 증가하는 순서대로 출력합니다. $n = 2k + 1$ 이면: a[k+1] a[k+2] a[k] a[k+3] ... a[2] a[2k+1] a[1] $n = 2k$ 이면: a[k] a[k+1] a[k-1] a[k+2] ... a[1] a[2k] VKOShP 2017 A. Tourism 웬만하면 굉장히 큰 답을 찾을 수 있다는 게 핵심 포인트입니다. 만약 $S[1] = S[N]$ 이면 답은 $[1, N-1], [2, N]$ 입니다. 아니면, $S[1] = S[2] = \ldots = S[i]$ 가 만족하는 최대 $i$ 와 $S[N-j+1] = S[N-j+2..
대회 후기 일단 시작하고 나서 코딩하지 않고 이 글부터 썼다. 이 후 이 글을 따라서 코딩했는데 2번, 4번, 5번을 틀렸다. 2번은 큰 자릿수가 앞에 있다는 걸 몰랐다. 순서를 바꿔서 맞았다. 4번은 88점이 나오기에 풀이가 틀렸나 했다. 5번은 그냥 코딩 실수가 좀 있었고 고쳐서 맞았다. 698/800점을 받고 잤다. R2를 어쨌든 갈 거 같아서 고칠까 말까 하다가, 만점자가 꽤 많아서 무섭기도 하고, 블로그에 "이런 풀이를 짰는데 틀렸더라 ㅎㅎㅋㅋㅈㅅ" 라고 글을 쓰기는 뭐해서 4번을 생각해봤다. 설마 싶은 반례가 있었는데 머릿속으로는 이게 반례인지 아닌지 긴가민가했다. 짜 보다 보니까 반례인게 확실해 보였다. 고쳐서 오후 1시 반쯤 만점 1. 친구들 말이 복잡하지만 이런 뜻입니다. $N$ 개의 정..
- Total
- Today
- Yesterday