SlideShare a Scribd company logo
1 of 5
Download to read offline
2017 KAIST RUN Spring Contest with HYEA Cup Solution
(한국어)
HYEA (ho94949, hyea@kaist.ac.kr)
Sponsored By:
Startlink
Naver D2
2017 KAIST RUN Spring Contest with HYEA Cup
May 17th, 2017, Sponsored By Startlink, Naver D2
1 Card Game Contest
곱의 정리를 생각합시다. 어떤 일을 하는데 a가지가 가능하고, 다른 일을 하는데 b가지가 가능하다면, 총
가능한 가짓수는 a × b가지 입니다. 답은 max(Ai, 1)을 모두 곱한 값입니다.
M = 1인 경우를, 특히 N = 0인 경우를 잘 생각해야 합니다. N = 0, M = 1인 경우에 답은 0입니다.
주석: N = 0, M = 1인 경우는 의도된 케이스이고, M = 1을 가지고 나머지 연산을 할 때는 조심하도록
합시다.
2 Mahjong
특정 패의 종류가 4장 이하 있다면, 대기패 일수 있습니다. 각각의 패를 추가해서 전체 14장의 패가
완성되었는지 확인하면 됩니다.
머리가 7개인 경우는 예외로 두고, 몸통이 4개이고 머리가 1개인 경우를 생각해 봅시다.
가능한 방법중 하나는 모든 14
2 3 3 3 3 개의 조합을 생각해서, 538137600개의 가짓수를 각각 대기마다
확인하는 것입니다. 이 방법을, 같은 타일은 바꿔도 문제가 없다. 와 모든 몸통의 수의 합은 3으로 나누어
떨어진다. 라는 점을 이용해서 개선할 수 있습니다.
정식 해법에 쓰인 다른 방법은, 몸통 4개를 모두 확인하는 것입니다. 몸통은 16가지 밖에 없다는 사실을
이용해서 머리를 하나 정하고 몸통을 4개 정합니다. 이것은 최대 9 × 9 × 164 = 5308416가지만 생각하면
됩니다. 여기서 더 줄일 수도 있습니다.
아니면, 대기패를 직접 계산하는 방법으로 계산할 수 있습니다. 5가지의 대기 방법이 있습니다. (머리를
완성시키는 대기; 머리 2개가 있고, 둘 중 하나가 몸통이 되는 대기; 연속된 두 수가 있을때 양쪽을 기다리는
대기; 1, 2나 8, 9가 있을때 3, 7을 기다리는 대기; 2 차이나는 수가 있을 때 가운데를 완성시키는 대기.)
주석: 원래는 마작에 어떤 특정 패를 줬을때 점수 계산도 하라는 문제를 내려고 했지만... 혜아컵은 IPSC가
아니기 때문에 관뒀습니다. (2016 M - Mana troubles, 랜드를 탭해서 정해진 마나를 뽑을 수 있는지에 대한
문제.)
3 The Way
왼쪽으로 가는 것은, 세 행중 가운데 행에서만 가능합니다. S모양이나 ㄹ모양의 길을 생각해 보고, 파티션을
나누어 다이나믹 프로그래밍을 계산하면 됩니다.
좀 더 자세하게는, 모든 경로는, S모양이나 ㄹ모양의 길들이 있는 파트로 나눌 수 있고, 그것은 유일합니다.
그래서 D(i, j)의 배열을 (i, j) 격자에서 끝나고 앞으로는 더 이상 뒤로 가지 않는 것들의 배열의 느낌으로
계산하면 됩니다.
주석: 처음에 N = 106이었지만, 문제 크기를 줄였습니다. 이 문제는 행렬 계산을 통해 O(logN)시간에도
해결 할 수 있습니다.
4 The Other Way
S에서 모든 마을까지의 최단경로를 다익스트라 알고리즘으로 계산합시다. 그리고, 최단경로에 사용된
배열들은 DAG를 이룰 것이고, 여기서 동적계획법을 사용하면 됩니다.
사실, 그래프를 명시적으로 만들기 보다는, 두 도시의 차이가 도로의 길이인지 여부를 계산하면 됩니다.
주석: SPFA의 반례 데이터를 넣었기 때문에 잘 동작하지 않을것입니다. 만들어준 alex9801에게 감사합니다.
Page 2 of 5
2017 KAIST RUN Spring Contest with HYEA Cup
May 17th, 2017, Sponsored By Startlink, Naver D2
5 Just as Tic Tac Toe
처음에, 모든 바구니의 Grundy Number를 계산할 수 있습니다. (M + 1로 나눈 나머지) Grundy Number의
신기한 성질은 두 게임을 동시에 진행할 때, 새로운 게임의 Grundy Number는 두 수의 xor이라는 점이죠.
그래서 문제는 3XOR문제로 바뀝니다. 이것은 a xor b = c를 빨리 계산하는 문제고, 모든 n개의 비트에 대해
푸리에 변환을 사용해서 n차원 푸리에 변환을 계산하면 됩니다. 이것을 Hadamard 변환 이라고 부릅니다.
Fast Walsh-Hadamard Transform 행렬은 다음과 같은 모양입니다.:
HN = 1√
2
HN−1 HN−1
HN−1 −HN−1
주석: 원래는, 여러개의 성질이 있는 Set게임을 내려고 했습니다. 그러면 식이 더 복잡해졌지만, 그 문제만
풀 수 있을것 같아서 문제를 좀 더 쉽게 만들었습니다.
6 Balance
문제에 대한 답을 A(N)이라고 합시다. 마지막 단계에서는 N개의 추 중 N − 1개의 가벼운 추 들은
아무쪽에나, 무게 2N 의 추는 오른쪽에만 놓을 수 있습니다. 총 2N − 1가지 경우의 수가 있기 때문에,
A(N) = (2N − 1)A(N − 1) 입니다. (나머지 추에 대해서는 어차피 무거운 추의 무게의 합은 가벼운 추를
넘지 않습니다.)
그래서 답은 1 × 3 × · · · × (2N − 1) 입니다.
주석: O(N2)의 동적 계획법 풀이도 있습니다. 잘 최적화를 해도 TLE가 나지만, 이것을 시간복잡도 측면에서
최적화 하는 등의 다른 여러 방법을 열어놓기 위해 N = 50000으로 정했습니다.
7 Memory
가장 적은 행동 수는 RC/2입니다. 왜냐하면 모든 카드가 적어도 한번은 뒤집어져야 하기 때문입니다. 다음
방법으로 뒤집는것을 생각합시다. 처음에, 뒤집은 두 카드의 모양이 A, B고, 두번째에 뒤집은 첫 카드
모양이 C고 두번째는 A였습니다. 그래서 A두개를 제거했고, 모양 A, C가 남았습니다. 이것은 최악의 경우중
하나입니다. 이 경우에, 두 카드를 없애는데 두 스텝이 걸리고, 이것을 반복하면 (4개일 경우 3번 뒤집어야
한다는 점을 이용해서) 답이 RC−1입니다. 이것이 최적인것은, 어떤 경우에도 RC −1번 을 넘지 않게 뒤집는
방법이 있습니다. RC − 2개의 카드를 RC/2 − 1 행동을 하여 뒤집고, 나머지 두 카드중 하나를 뒤집어서
맞추고, 다른 카드를 뒤집어서 맞추고, 나머지 RC − 4개의 카드에 대해서는 짝이 맞는걸 찾아가면 됩니다.
주석: 이 문제는, Di,j를, i개의 카드가 존재하고 j개의 서로 다른 카드 정보를 알 때 최대 뒤집는 횟수라는
동적계획법 문제로 변활 할 수 있습니다.
8 Too Many Traps
답은, 이불이 보물에 있는 곳을 제외하면 항상 가능합니다. 이 증명에 대해서 수학적 귀납법 풀이가 Con-
structive 하게 존재하고, 이것을 구현하는것이 문제에 대한 답입니다. (이불의 수는 보물의 수 보다 ”작아야”
합니다.)
일반성을 잃지 않고, A1 < A2 < · · · < AN 라고 하고, 수학적 귀납법을 사용합시다. N = 0, 1인 경우에
이불이 존재하지 않습니다.
1. AN 에 이불이 위치 해 있고, A1, · · · , AN−1중 어디에도 이불이 위치하지 않은 경우:
AN 으로 점프를 시작해서, 나머지에 대해 문제를 풀고, 앞의 첫 두 점프를 바꾸면 AN 위치에 있는
이불도 밟지 않을 수 있습니다.
Page 3 of 5
2017 KAIST RUN Spring Contest with HYEA Cup
May 17th, 2017, Sponsored By Startlink, Naver D2
2. AN 에 이불이 위치해 있지 않고. A1, · · · , AN−1 중 한 곳에 이불이 위치한 경우:
AN 으로 점프를 시작해서, 나머지에 대해 문제를 풀고, 끝입니다. AN 이전에 이불 하나를 이미 밟지
않아서, 고려할 필요가 없습니다.
3. AN 에 이불이 위치 해 있고, A1, · · · , AN−1 중 한 곳에 이불이 위치한 경우:
N − 1개의 쌍 (A1, A1 + AN ), · · · , (AN−1, AN−1 + AN )을 고려합시다. 비둘기집의 원리에 의해, AN
을 제외한 N − 2개의 이불이 있고, 적어도 한 쌍은 둘 다 이불이 위치해 있지 않습니다. 그래서 그 i에
대해 Ai, AN 으로 점프를 하면 두개의 이불을 회피 할 수 있고, 나머지 N − 2개의 수에 대해 문제를
해결하면 됩니다.
4. A1, · · · , AN 에 모두 이불이 위치하지 않은 경
AN 으로 시작해서 A1, · · · , AN−1 점프를 하는 대신, 가장 가까운 이불에 대해서는 신경을 쓰지 맙시다.
만약에 가장 가까운 이불 위로 점프를 하게 된다면, 그 다음 점프와 AN 을 바꿉시다. 그러면, AN
이전의 모든 점프는 가장 가까운 이불이라는 점 때문에, 이불 위로 착지하지 않을 거고, AN 점프는 합이
유지되기 때문에, 그리고 앞으로는 기존 점프에 대한 가정 때문에 다른 이불에 착지하지 않습니다.
이걸 적절히 구현하면 됩니다. 가장 시간이 많이 걸리는 부분은 3번째 부분이고 시간복잡도가 O(NlogN)
이겠지만, 평균 시간 복잡도는 O(logN)에 구현할 수 있다는 것을 증명 할 수 있습니다.
그래서 이것을 구현하면 시간 복잡도가 O(N2) 이 나옵니다.
이것을 개선해 봅시다. 두 부분을 개선해야 합니다. 한 부분은 A2, · · · , AN 이 이불이 위치하는지 하고, 4번째
경우에 대해서는 이불 위로 착지하는 경우가 있는지를 확인하는 것입니다.
첫번째는, 처음 몇개의 이불 위치만 확인하는것으로 개선 할 수 있습니다. 증명에서 가장 중요한 부분은, 이불
위에 착지하는지에 여부가 아니라 이불을 스킵해서 앞으로 남은 이불의 갯수를 줄이는 것이기 때문입니다.
두번째는, BIT같은 누적합을 구하고, 갱신을 할 수 있는 자료구조를 사용해서 (swap 하는 부분 때문에 갱신이
필요합니다.), 첫번째 이불에 착지하는 지 여부를 이진 탐색을 하면 됩니다.
이것을 구현하면 O(Nlog2N)시간 복잡도가 나올것이고, 정해가 이 방법으로 구현 되었습니다. 두번째 부분을
더 향상시켜서 O(NlogN)으로 풀 수 있습니다.
주석: 처음 해법은 O(N2) 이고, zlzmsrhak이 O(NlogN)으로 시간을 줄이는 법에 대한 아이디어를 줬습니다.
N = 100000인 이유는, 가장 먼 점프를 아껴두는 등의 랜덤 셔플 알고리즘을 막기 위해서 입니다. (가장
긴 점프는 이 문제에서 굉장히 핵심적입니다.) 이 문제는 대회에서 가장 어려운 문제 입니다. 풀었다면
자랑스러워 해도 좋습니다.
9 Protocol
112345167 ≡ 1(mod 1000000009).
그래서, 선 용량에 대해 167으로 나눈 나머지만 고려하면 됩니다. 행렬 곱셈과 고속으로 지수를 계산하는
알고리즘을 쓰면 됩니다.
좀 더 정확하게는, A(ax2+bx+c,x) = 1 and A(dx2+ex+f,x) = 1 (두 수가 같으면 2) 이고, 나머지가 0인 행렬을
사용하고, AM 은 M년 후에 선 용량의 변화를 나타냅니다.
주석: 대회를 준비한 이유 중 하나입니다. 상수 112345는 멋지거든요!
10 Communism
배열을 절반으로 나누어서 ±(A1 or 0) ± (A2 or 0) ± · · · 을 계산합시다. 두개의 배열을 병합정렬과 비슷한
아이디어로 정렬할 수 있습니다. 그냥 모든 원소를 넣어서 정렬하는 방법은 O(N × 3(N/2))으로 시간 초과가
날 것입니다. 만약 배열의 한 원소가 골라졌다면, 다른 배열에서 D차이 이하로 나기 위한 구간을 계산합시다.
Sliding Window / 2 Pointer 방법을 사용할 수 있고, 총 시간 복잡도는 O(3(N/2))입니다.
Page 4 of 5
2017 KAIST RUN Spring Contest with HYEA Cup
May 17th, 2017, Sponsored By Startlink, Naver D2
주석: O(N×3(N/2))으로 시간을 최대한 줄여서 구현한 풀이에 대한 시간은 1.2초 였습니다. 좀 더 확장성 있게,
C++ STL을 사용한 코딩 방법은 0.6초 였습니다. O(3(N/2))에 돌지 않는다고 생각할 수 있지만 컴퓨터는
빠르더라고요!
11 Thanks
대회를 위해 준비한 모두에게 감사드립니다.
문제에 이름을 사용할 수 있게 해주신 메이지, 리샤, 알렉스, 여우, 토끼, 키르, 리유나, 모래두지, 혜아, 카흐,
린카루, 아드 그리고 래리님 감사합니다.
문제 셋을 준비하고 작업한 제 자신에게 감사합니다.
문제들을 풀고, 문제 디스크립션과 Mahjong, The Other Way, Balance, Memory 문제에 대해 조언을 주신
alex9801님 감사합니다.
RUN@KAIST의 회장으로서, 스폰서와 말하고, 제 이름을 걸고 문제를 낼 수 있게 해주신 wwiiiii님
감사합니다.
문제들을 풀고, 다양한 코너케이스를 처리할 수 있는 틀린 풀이들과, Communism 문제에 대해 조언을 주신
koosaga님 감사합니다.
문제들을 풀고, Too Many Traps문제에 대해서 개선된 백트래킹 알고리즘을 제시하고, 문제 난이도에 대한
평가를 주신 functionx님 감사합니다.
문제들을 풀고, Too Many Traps문제의 개선 아이디어를 주고, Card Game Contest, Just as Tic Tac Toe,
Balance, Too Many Traps에 대해 조언을 주시고 문제 난이도에 대한 평가를 해주신 zlzmsrhak님 감사합니다.
acmicpc.net 온라인 저지 서비스를 대회에 이용할 수 있게 도와주신 최백준님과 Startlink, 감사합니다.
그리고 누구보다 이 대회에 참여해 주시고, 이 대회 솔루션을 보고 계신 당신에게도 감사드립니다.
Page 5 of 5

More Related Content

What's hot

уравнения с модулем
уравнения с модулемуравнения с модулем
уравнения с модулемwalentina67
 
Exploring Simple Siamese Representation Learning
Exploring Simple Siamese Representation LearningExploring Simple Siamese Representation Learning
Exploring Simple Siamese Representation LearningSungchul Kim
 
Collaborative Filtering - MF, NCF, NGCF
Collaborative Filtering - MF, NCF, NGCFCollaborative Filtering - MF, NCF, NGCF
Collaborative Filtering - MF, NCF, NGCFPark JunPyo
 
Deep Learning Theory Seminar (Chap 1-2, part 1)
Deep Learning Theory Seminar (Chap 1-2, part 1)Deep Learning Theory Seminar (Chap 1-2, part 1)
Deep Learning Theory Seminar (Chap 1-2, part 1)Sangwoo Mo
 
Social network analysis: Quadratic assignment procedure
Social network analysis: Quadratic assignment procedureSocial network analysis: Quadratic assignment procedure
Social network analysis: Quadratic assignment procedureMatthew Gwynfryn Thomas
 
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Hongjun Jang
 
Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)NAVER Engineering
 
선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합AHRA CHO
 
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmno U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmChristian Robert
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)홍배 김
 
統計ソフトRの使い方_2015.04.17
統計ソフトRの使い方_2015.04.17統計ソフトRの使い方_2015.04.17
統計ソフトRの使い方_2015.04.17hicky1225
 
CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...
CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...
CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...Joonhyung Lee
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Ricardo Terra
 
Variational Inference
Variational InferenceVariational Inference
Variational InferenceTushar Tank
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】Kazuhide Okamura
 

What's hot (20)

уравнения с модулем
уравнения с модулемуравнения с модулем
уравнения с модулем
 
Exploring Simple Siamese Representation Learning
Exploring Simple Siamese Representation LearningExploring Simple Siamese Representation Learning
Exploring Simple Siamese Representation Learning
 
Skip List
Skip ListSkip List
Skip List
 
Collaborative Filtering - MF, NCF, NGCF
Collaborative Filtering - MF, NCF, NGCFCollaborative Filtering - MF, NCF, NGCF
Collaborative Filtering - MF, NCF, NGCF
 
Deep Learning Theory Seminar (Chap 1-2, part 1)
Deep Learning Theory Seminar (Chap 1-2, part 1)Deep Learning Theory Seminar (Chap 1-2, part 1)
Deep Learning Theory Seminar (Chap 1-2, part 1)
 
Social network analysis: Quadratic assignment procedure
Social network analysis: Quadratic assignment procedureSocial network analysis: Quadratic assignment procedure
Social network analysis: Quadratic assignment procedure
 
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)
 
선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합선형대수 06. 영벡터공간과 해집합
선형대수 06. 영벡터공간과 해집합
 
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmno U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)
 
BERT
BERTBERT
BERT
 
統計ソフトRの使い方_2015.04.17
統計ソフトRの使い方_2015.04.17統計ソフトRの使い方_2015.04.17
統計ソフトRの使い方_2015.04.17
 
CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...
CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...
CutMix: Regularization Strategy to Train Strong Classifiers with Localizable ...
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)
 
Variational Inference
Variational InferenceVariational Inference
Variational Inference
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】遺伝的アルゴリズム(Genetic Algorithm)を始めよう! 【簡略版】
遺伝的アルゴリズム (Genetic Algorithm)を始めよう! 【簡略版】
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 

Viewers also liked

[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced partNAVER D2
 
[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner part[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner partNAVER D2
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced partNAVER D2
 
[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제NAVER D2
 
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner partNAVER D2
 
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제NAVER D2
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이NAVER D2
 
[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOSNAVER D2
 
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이NAVER D2
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promiseNAVER D2
 
Papago/N2MT 개발이야기
Papago/N2MT 개발이야기Papago/N2MT 개발이야기
Papago/N2MT 개발이야기NAVER D2
 
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님NAVER D2
 
[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선NAVER D2
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신NAVER D2
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅NAVER D2
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
 
텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님NAVER D2
 
데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님NAVER D2
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functionsNAVER D2
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generatorNAVER D2
 

Viewers also liked (20)

[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
 
[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner part[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제 풀이_Beginner part
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
 
[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제
 
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
 
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
 
[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS[D2CAMPUS] Algorithm tips - ALGOS
[D2CAMPUS] Algorithm tips - ALGOS
 
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이
[고려대 ALPS&ALKOR] 프로그래밍 경진대회 문제 풀이
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
 
Papago/N2MT 개발이야기
Papago/N2MT 개발이야기Papago/N2MT 개발이야기
Papago/N2MT 개발이야기
 
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
 
[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선
 
[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신[D2 오픈세미나]4.네이티브앱저장통신
[D2 오픈세미나]4.네이티브앱저장통신
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님텀 프로젝트에서 제품 프로젝트로 - 성준영님
텀 프로젝트에서 제품 프로젝트로 - 성준영님
 
데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
 

Similar to [KAIST - RUN] 프로그래밍 경진대회 문제 풀이

[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 
알고리즘 연합캠프 세미나 3-B (LCA)
알고리즘 연합캠프 세미나 3-B (LCA)알고리즘 연합캠프 세미나 3-B (LCA)
알고리즘 연합캠프 세미나 3-B (LCA)HYUNJEONG KIM
 
각론 최단경로문제
각론 최단경로문제각론 최단경로문제
각론 최단경로문제대환 정
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3KoChungWook
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
입체충돌처리
입체충돌처리입체충돌처리
입체충돌처리quxn6
 
PNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHM
PNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHMPNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHM
PNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHMSang Woon Park
 
IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)Jaehyun Koo
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Jae-yeol Lee
 
세미나
세미나세미나
세미나Dongyi Kim
 
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제NAVER D2
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programmingskku_npc
 

Similar to [KAIST - RUN] 프로그래밍 경진대회 문제 풀이 (17)

[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
알고리즘 연합캠프 세미나 3-B (LCA)
알고리즘 연합캠프 세미나 3-B (LCA)알고리즘 연합캠프 세미나 3-B (LCA)
알고리즘 연합캠프 세미나 3-B (LCA)
 
각론 최단경로문제
각론 최단경로문제각론 최단경로문제
각론 최단경로문제
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
2016 UCPC 풀이
2016 UCPC 풀이2016 UCPC 풀이
2016 UCPC 풀이
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
입체충돌처리
입체충돌처리입체충돌처리
입체충돌처리
 
PNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHM
PNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHMPNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHM
PNU ALCALL 2017 SUMMER STUDY - CH07. DIVIDE & CONQUER ALGORITHM
 
IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)
 
분할정복
분할정복분할정복
분할정복
 
internetinternet
internetinternetinternetinternet
internetinternet
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]
 
세미나
세미나세미나
세미나
 
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
 
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

[KAIST - RUN] 프로그래밍 경진대회 문제 풀이

  • 1. 2017 KAIST RUN Spring Contest with HYEA Cup Solution (한국어) HYEA (ho94949, hyea@kaist.ac.kr) Sponsored By: Startlink Naver D2
  • 2. 2017 KAIST RUN Spring Contest with HYEA Cup May 17th, 2017, Sponsored By Startlink, Naver D2 1 Card Game Contest 곱의 정리를 생각합시다. 어떤 일을 하는데 a가지가 가능하고, 다른 일을 하는데 b가지가 가능하다면, 총 가능한 가짓수는 a × b가지 입니다. 답은 max(Ai, 1)을 모두 곱한 값입니다. M = 1인 경우를, 특히 N = 0인 경우를 잘 생각해야 합니다. N = 0, M = 1인 경우에 답은 0입니다. 주석: N = 0, M = 1인 경우는 의도된 케이스이고, M = 1을 가지고 나머지 연산을 할 때는 조심하도록 합시다. 2 Mahjong 특정 패의 종류가 4장 이하 있다면, 대기패 일수 있습니다. 각각의 패를 추가해서 전체 14장의 패가 완성되었는지 확인하면 됩니다. 머리가 7개인 경우는 예외로 두고, 몸통이 4개이고 머리가 1개인 경우를 생각해 봅시다. 가능한 방법중 하나는 모든 14 2 3 3 3 3 개의 조합을 생각해서, 538137600개의 가짓수를 각각 대기마다 확인하는 것입니다. 이 방법을, 같은 타일은 바꿔도 문제가 없다. 와 모든 몸통의 수의 합은 3으로 나누어 떨어진다. 라는 점을 이용해서 개선할 수 있습니다. 정식 해법에 쓰인 다른 방법은, 몸통 4개를 모두 확인하는 것입니다. 몸통은 16가지 밖에 없다는 사실을 이용해서 머리를 하나 정하고 몸통을 4개 정합니다. 이것은 최대 9 × 9 × 164 = 5308416가지만 생각하면 됩니다. 여기서 더 줄일 수도 있습니다. 아니면, 대기패를 직접 계산하는 방법으로 계산할 수 있습니다. 5가지의 대기 방법이 있습니다. (머리를 완성시키는 대기; 머리 2개가 있고, 둘 중 하나가 몸통이 되는 대기; 연속된 두 수가 있을때 양쪽을 기다리는 대기; 1, 2나 8, 9가 있을때 3, 7을 기다리는 대기; 2 차이나는 수가 있을 때 가운데를 완성시키는 대기.) 주석: 원래는 마작에 어떤 특정 패를 줬을때 점수 계산도 하라는 문제를 내려고 했지만... 혜아컵은 IPSC가 아니기 때문에 관뒀습니다. (2016 M - Mana troubles, 랜드를 탭해서 정해진 마나를 뽑을 수 있는지에 대한 문제.) 3 The Way 왼쪽으로 가는 것은, 세 행중 가운데 행에서만 가능합니다. S모양이나 ㄹ모양의 길을 생각해 보고, 파티션을 나누어 다이나믹 프로그래밍을 계산하면 됩니다. 좀 더 자세하게는, 모든 경로는, S모양이나 ㄹ모양의 길들이 있는 파트로 나눌 수 있고, 그것은 유일합니다. 그래서 D(i, j)의 배열을 (i, j) 격자에서 끝나고 앞으로는 더 이상 뒤로 가지 않는 것들의 배열의 느낌으로 계산하면 됩니다. 주석: 처음에 N = 106이었지만, 문제 크기를 줄였습니다. 이 문제는 행렬 계산을 통해 O(logN)시간에도 해결 할 수 있습니다. 4 The Other Way S에서 모든 마을까지의 최단경로를 다익스트라 알고리즘으로 계산합시다. 그리고, 최단경로에 사용된 배열들은 DAG를 이룰 것이고, 여기서 동적계획법을 사용하면 됩니다. 사실, 그래프를 명시적으로 만들기 보다는, 두 도시의 차이가 도로의 길이인지 여부를 계산하면 됩니다. 주석: SPFA의 반례 데이터를 넣었기 때문에 잘 동작하지 않을것입니다. 만들어준 alex9801에게 감사합니다. Page 2 of 5
  • 3. 2017 KAIST RUN Spring Contest with HYEA Cup May 17th, 2017, Sponsored By Startlink, Naver D2 5 Just as Tic Tac Toe 처음에, 모든 바구니의 Grundy Number를 계산할 수 있습니다. (M + 1로 나눈 나머지) Grundy Number의 신기한 성질은 두 게임을 동시에 진행할 때, 새로운 게임의 Grundy Number는 두 수의 xor이라는 점이죠. 그래서 문제는 3XOR문제로 바뀝니다. 이것은 a xor b = c를 빨리 계산하는 문제고, 모든 n개의 비트에 대해 푸리에 변환을 사용해서 n차원 푸리에 변환을 계산하면 됩니다. 이것을 Hadamard 변환 이라고 부릅니다. Fast Walsh-Hadamard Transform 행렬은 다음과 같은 모양입니다.: HN = 1√ 2 HN−1 HN−1 HN−1 −HN−1 주석: 원래는, 여러개의 성질이 있는 Set게임을 내려고 했습니다. 그러면 식이 더 복잡해졌지만, 그 문제만 풀 수 있을것 같아서 문제를 좀 더 쉽게 만들었습니다. 6 Balance 문제에 대한 답을 A(N)이라고 합시다. 마지막 단계에서는 N개의 추 중 N − 1개의 가벼운 추 들은 아무쪽에나, 무게 2N 의 추는 오른쪽에만 놓을 수 있습니다. 총 2N − 1가지 경우의 수가 있기 때문에, A(N) = (2N − 1)A(N − 1) 입니다. (나머지 추에 대해서는 어차피 무거운 추의 무게의 합은 가벼운 추를 넘지 않습니다.) 그래서 답은 1 × 3 × · · · × (2N − 1) 입니다. 주석: O(N2)의 동적 계획법 풀이도 있습니다. 잘 최적화를 해도 TLE가 나지만, 이것을 시간복잡도 측면에서 최적화 하는 등의 다른 여러 방법을 열어놓기 위해 N = 50000으로 정했습니다. 7 Memory 가장 적은 행동 수는 RC/2입니다. 왜냐하면 모든 카드가 적어도 한번은 뒤집어져야 하기 때문입니다. 다음 방법으로 뒤집는것을 생각합시다. 처음에, 뒤집은 두 카드의 모양이 A, B고, 두번째에 뒤집은 첫 카드 모양이 C고 두번째는 A였습니다. 그래서 A두개를 제거했고, 모양 A, C가 남았습니다. 이것은 최악의 경우중 하나입니다. 이 경우에, 두 카드를 없애는데 두 스텝이 걸리고, 이것을 반복하면 (4개일 경우 3번 뒤집어야 한다는 점을 이용해서) 답이 RC−1입니다. 이것이 최적인것은, 어떤 경우에도 RC −1번 을 넘지 않게 뒤집는 방법이 있습니다. RC − 2개의 카드를 RC/2 − 1 행동을 하여 뒤집고, 나머지 두 카드중 하나를 뒤집어서 맞추고, 다른 카드를 뒤집어서 맞추고, 나머지 RC − 4개의 카드에 대해서는 짝이 맞는걸 찾아가면 됩니다. 주석: 이 문제는, Di,j를, i개의 카드가 존재하고 j개의 서로 다른 카드 정보를 알 때 최대 뒤집는 횟수라는 동적계획법 문제로 변활 할 수 있습니다. 8 Too Many Traps 답은, 이불이 보물에 있는 곳을 제외하면 항상 가능합니다. 이 증명에 대해서 수학적 귀납법 풀이가 Con- structive 하게 존재하고, 이것을 구현하는것이 문제에 대한 답입니다. (이불의 수는 보물의 수 보다 ”작아야” 합니다.) 일반성을 잃지 않고, A1 < A2 < · · · < AN 라고 하고, 수학적 귀납법을 사용합시다. N = 0, 1인 경우에 이불이 존재하지 않습니다. 1. AN 에 이불이 위치 해 있고, A1, · · · , AN−1중 어디에도 이불이 위치하지 않은 경우: AN 으로 점프를 시작해서, 나머지에 대해 문제를 풀고, 앞의 첫 두 점프를 바꾸면 AN 위치에 있는 이불도 밟지 않을 수 있습니다. Page 3 of 5
  • 4. 2017 KAIST RUN Spring Contest with HYEA Cup May 17th, 2017, Sponsored By Startlink, Naver D2 2. AN 에 이불이 위치해 있지 않고. A1, · · · , AN−1 중 한 곳에 이불이 위치한 경우: AN 으로 점프를 시작해서, 나머지에 대해 문제를 풀고, 끝입니다. AN 이전에 이불 하나를 이미 밟지 않아서, 고려할 필요가 없습니다. 3. AN 에 이불이 위치 해 있고, A1, · · · , AN−1 중 한 곳에 이불이 위치한 경우: N − 1개의 쌍 (A1, A1 + AN ), · · · , (AN−1, AN−1 + AN )을 고려합시다. 비둘기집의 원리에 의해, AN 을 제외한 N − 2개의 이불이 있고, 적어도 한 쌍은 둘 다 이불이 위치해 있지 않습니다. 그래서 그 i에 대해 Ai, AN 으로 점프를 하면 두개의 이불을 회피 할 수 있고, 나머지 N − 2개의 수에 대해 문제를 해결하면 됩니다. 4. A1, · · · , AN 에 모두 이불이 위치하지 않은 경 AN 으로 시작해서 A1, · · · , AN−1 점프를 하는 대신, 가장 가까운 이불에 대해서는 신경을 쓰지 맙시다. 만약에 가장 가까운 이불 위로 점프를 하게 된다면, 그 다음 점프와 AN 을 바꿉시다. 그러면, AN 이전의 모든 점프는 가장 가까운 이불이라는 점 때문에, 이불 위로 착지하지 않을 거고, AN 점프는 합이 유지되기 때문에, 그리고 앞으로는 기존 점프에 대한 가정 때문에 다른 이불에 착지하지 않습니다. 이걸 적절히 구현하면 됩니다. 가장 시간이 많이 걸리는 부분은 3번째 부분이고 시간복잡도가 O(NlogN) 이겠지만, 평균 시간 복잡도는 O(logN)에 구현할 수 있다는 것을 증명 할 수 있습니다. 그래서 이것을 구현하면 시간 복잡도가 O(N2) 이 나옵니다. 이것을 개선해 봅시다. 두 부분을 개선해야 합니다. 한 부분은 A2, · · · , AN 이 이불이 위치하는지 하고, 4번째 경우에 대해서는 이불 위로 착지하는 경우가 있는지를 확인하는 것입니다. 첫번째는, 처음 몇개의 이불 위치만 확인하는것으로 개선 할 수 있습니다. 증명에서 가장 중요한 부분은, 이불 위에 착지하는지에 여부가 아니라 이불을 스킵해서 앞으로 남은 이불의 갯수를 줄이는 것이기 때문입니다. 두번째는, BIT같은 누적합을 구하고, 갱신을 할 수 있는 자료구조를 사용해서 (swap 하는 부분 때문에 갱신이 필요합니다.), 첫번째 이불에 착지하는 지 여부를 이진 탐색을 하면 됩니다. 이것을 구현하면 O(Nlog2N)시간 복잡도가 나올것이고, 정해가 이 방법으로 구현 되었습니다. 두번째 부분을 더 향상시켜서 O(NlogN)으로 풀 수 있습니다. 주석: 처음 해법은 O(N2) 이고, zlzmsrhak이 O(NlogN)으로 시간을 줄이는 법에 대한 아이디어를 줬습니다. N = 100000인 이유는, 가장 먼 점프를 아껴두는 등의 랜덤 셔플 알고리즘을 막기 위해서 입니다. (가장 긴 점프는 이 문제에서 굉장히 핵심적입니다.) 이 문제는 대회에서 가장 어려운 문제 입니다. 풀었다면 자랑스러워 해도 좋습니다. 9 Protocol 112345167 ≡ 1(mod 1000000009). 그래서, 선 용량에 대해 167으로 나눈 나머지만 고려하면 됩니다. 행렬 곱셈과 고속으로 지수를 계산하는 알고리즘을 쓰면 됩니다. 좀 더 정확하게는, A(ax2+bx+c,x) = 1 and A(dx2+ex+f,x) = 1 (두 수가 같으면 2) 이고, 나머지가 0인 행렬을 사용하고, AM 은 M년 후에 선 용량의 변화를 나타냅니다. 주석: 대회를 준비한 이유 중 하나입니다. 상수 112345는 멋지거든요! 10 Communism 배열을 절반으로 나누어서 ±(A1 or 0) ± (A2 or 0) ± · · · 을 계산합시다. 두개의 배열을 병합정렬과 비슷한 아이디어로 정렬할 수 있습니다. 그냥 모든 원소를 넣어서 정렬하는 방법은 O(N × 3(N/2))으로 시간 초과가 날 것입니다. 만약 배열의 한 원소가 골라졌다면, 다른 배열에서 D차이 이하로 나기 위한 구간을 계산합시다. Sliding Window / 2 Pointer 방법을 사용할 수 있고, 총 시간 복잡도는 O(3(N/2))입니다. Page 4 of 5
  • 5. 2017 KAIST RUN Spring Contest with HYEA Cup May 17th, 2017, Sponsored By Startlink, Naver D2 주석: O(N×3(N/2))으로 시간을 최대한 줄여서 구현한 풀이에 대한 시간은 1.2초 였습니다. 좀 더 확장성 있게, C++ STL을 사용한 코딩 방법은 0.6초 였습니다. O(3(N/2))에 돌지 않는다고 생각할 수 있지만 컴퓨터는 빠르더라고요! 11 Thanks 대회를 위해 준비한 모두에게 감사드립니다. 문제에 이름을 사용할 수 있게 해주신 메이지, 리샤, 알렉스, 여우, 토끼, 키르, 리유나, 모래두지, 혜아, 카흐, 린카루, 아드 그리고 래리님 감사합니다. 문제 셋을 준비하고 작업한 제 자신에게 감사합니다. 문제들을 풀고, 문제 디스크립션과 Mahjong, The Other Way, Balance, Memory 문제에 대해 조언을 주신 alex9801님 감사합니다. RUN@KAIST의 회장으로서, 스폰서와 말하고, 제 이름을 걸고 문제를 낼 수 있게 해주신 wwiiiii님 감사합니다. 문제들을 풀고, 다양한 코너케이스를 처리할 수 있는 틀린 풀이들과, Communism 문제에 대해 조언을 주신 koosaga님 감사합니다. 문제들을 풀고, Too Many Traps문제에 대해서 개선된 백트래킹 알고리즘을 제시하고, 문제 난이도에 대한 평가를 주신 functionx님 감사합니다. 문제들을 풀고, Too Many Traps문제의 개선 아이디어를 주고, Card Game Contest, Just as Tic Tac Toe, Balance, Too Many Traps에 대해 조언을 주시고 문제 난이도에 대한 평가를 해주신 zlzmsrhak님 감사합니다. acmicpc.net 온라인 저지 서비스를 대회에 이용할 수 있게 도와주신 최백준님과 Startlink, 감사합니다. 그리고 누구보다 이 대회에 참여해 주시고, 이 대회 솔루션을 보고 계신 당신에게도 감사드립니다. Page 5 of 5