<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>unordered_map이 PS하는 블로그</title>
    <link>https://unorderedmap.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 2 Jun 2026 18:16:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>unordered_map</managingEditor>
    <item>
      <title>HLD (Heavy Light Decomposition)</title>
      <link>https://unorderedmap.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://justicehui.github.io/hard-algorithm/2020/01/24/hld/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://justicehui.github.io/hard-algorithm/2020/01/24/hld/&lt;/a&gt; : 이 글이 이론의 전반적인 이해에 큰 도움이 되었다. GOAT.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오일러 투어 테크닉, LCA 등의 쉬운 트리 이론은 &lt;a href=&quot;https://www.acmicpc.net/problem/13309&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;트리&lt;/a&gt; 문제 하나로 전부 정리된다고 생각한다. 해당 문제를 풀 수 있으면 심화 트리 이론을 공부할 수 있는 것이고, 해당 문제를 풀 수 없다면 기초부터 다시 다지고 올라와야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 쉬운 트리 이론과 심화 트리 이론을 당당하게 나누어 말할 수 있는 이유는 난이도 차이가 실제로 매우 크기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심화 트리 이론의 첫 단계라고도 말할 수 있는 HLD는 쉬운 트리 이론은 물론이거니와 세그먼트 트리까지 완벽하게 장착하고 있어야 이해할 수 있는 이론이다. 반대로 말하면, 쉬운 트리 이론과 세그먼트 트리에 대한 이해도만 있다면 HLD를 이해하는 것은 그렇게 어렵지 않다. 2년 전에는 공부하는 과정에서 많이 허둥댔는데, 오랜만에 다시 보니 난해하지 않음을 새삼 깨닫는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IDEA MOTIVATION&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HLD(Heavy Light Decomposition) : 트리의 경로에서 쿼리를 처리하는 방법론이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 오일러 투어 테크닉을 통해 서브트리에 대한 쿼리를 세그먼트 트리로 처리한 적은 있으나, 경로는 조금 이야기가 다르다. 서브트리는 정확히 N개이지만, 경로는 N(N-1)/2개가 나온다는 점부터 처리하기가 매우 까다로울 것으로 예상된다. 이를 조금 특이한 하나의 아이디어로, 시간복잡도 O(lgN)을 추가소비하여 해결하는 방법이라고 설명하는 것이 가장 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HLD의 Idea Motivation은 오일러 투어 테크닉을 그대로 계승하는 것에서 시작한다. 만약 루트에서 시작해서 가장 왼쪽으로만 계속 내려가는 경로였다면, 이미 세그먼트 트리 상에 해당 경로가 구간으로 존재할 것이다. 그렇다면 계속 왼쪽으로만 내려간다는 것의 확률을 높이면 되지 않을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 HLD는 DFS를 2번 돌린다. 2번째 DFS는 오일러 투어 테크닉의 DFS와 동일하지만, 1번째 DFS는 자식 정점들을 정렬하는 과정이다. 사실 정렬까지 하지 않아도, 가장 size가 큰 서브트리를 가지는, Heavy한 자식 정점을 가장 왼쪽에 배치하면 우리가 원하는 바를 이룰 수 있다. 이렇게 정렬해주면, 어떤 노드에서 왼쪽으로 계속 내려가는 것은 '트리의 경로'이자, '세그먼트 트리의 구간'이 된다. 이를 하나의 '사슬'로 잡자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, 임의의 경로에서 이용하는 '사슬'의 수는 최대 O(lgN)개임이 수학적으로 증명되며, 자세한 내용은 생략한다. 따라서 세그먼트 트리에 적절히 쿼리를 O(lgN)번 날림으로써 해결하는 것이 HLD의 풀이이다. 오일러 투어 테크닉을 그대로 계승했기에, 세그먼트 트리를 건드리지는 않았다. 그저 DFS order를 약간 손봐주었을 뿐이다. 이에 따라 일반적인 경우 전체 시간복잡도 O(Nlg^2N)에 문제가 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장단점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현이 생각보다 간단하다. 물론 당연히 하나의 문제에 DFS와 세그먼트 트리를 동시에 써야하니 미관상 간결하다고 말할 수는 없지만, 그래프와 세그먼트 트리가 완전히 분리되어있기 때문에 머리가 덜 아픈 편이다. 원하는 세그먼트 트리를 구현해주면 되고, 그래프와 연결할 때 in[ ]만 적용해주면 된다. 사실 이는 HLD 이전의 오일러 투어 테크닉의 장점이기도 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점은 아이디어가 기가 막히게 좋은 문제가 많지 않다. 그저 모르면 못 풀기에 공부하는 이론이며, 코드가 길지만 처음부터 끝까지 기계적으로 짜야한다. 다른 문제와 융합되면 하나로 합쳐지지 않고 그냥 1+1으로 따로 논다. 스킬 하나를 더 배웠지만 스킬콤보가 이루어지지 않는 느낌. 자신이 팀의 트리 담당이라면 잠자코 공부하도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HLD 연습문제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남극 탐험 [BOJ 2927] (D5)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HLD 기본 문제. 오프라인 쿼리임을 이용하면 추가 단계가 어렵지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 온라인 쿼리 버전도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국제 메시 기구 [BOJ 17429] (D4)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HLD + Lazy Propagation&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HLD의 장점, seg에서 lazyseg로 바꿔주기만 하면 동일한 구현으로 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- mod 2^32는 unsigned int를 사용하고 자연스럽게 overflow가 일어나도록 두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안전한 비상연락망 [BOJ 10169] (D4)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HLD + Lazy Minimum&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 디테일이 좀 많으니 컨디션 좋은 날, 흐름 끊기지 않고 구현할 것!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 경로의 간선에 쿼리를 칠 때는 LCA를 제외하고 구간 쿼리를 적용해야한다. (쿼리를 한 번만 날리는 간단한 방법이 없을지 고민해보았으나 찾지는 못했다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트리와 쿼리 10 [BOJ 13519] (D3)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HLD + Lazy Mine&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HLD에서 교환법칙이 성립하지 않는 요소들을 적용하기 위해서는 순서와 방향을 잘 고려해주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- HLD의 기본 방법론은 건드리지 않지만 기본 코드를 건드릴 수 있어야 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이 문제에서 Trouble Shooting의 필요성과 해결책을 혼자 떠올렸다면 HLD를 다룰 수 있다고 말할 수 있을 것 같다.&lt;/p&gt;</description>
      <category>Graph/Tree</category>
      <category>heavy light decomposition</category>
      <category>HLD</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/49</guid>
      <comments>https://unorderedmap.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 8 Oct 2024 01:12:14 +0900</pubDate>
    </item>
    <item>
      <title>1일 1트리 기록장</title>
      <link>https://unorderedmap.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1일 1트리란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 고등학교 2학년에서 3학년으로 넘어가는 겨울방학에 1일 1수쿼 프로젝트를 진행하여 하루에 수열과 쿼리 문제를 하나 이상 해결하거나 풀이를 정리하는 과제를 스스로에게 부여하여 1달 조금 넘게 진행하였다. 당시의 기억이 행복하게 남아있기도 하고, PS를 거의 2년간 쉰 지금 아직도 수쿼 관련된 자구들은 기억에 남아있는 것을 보아 학습효과도 상당히 좋았던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이를 이어 오늘부터 1일 1트리를 진행하려고 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 는 아니고... 사실 지금 학기 중이고 곧 시험기간이라 많이 바쁘다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아직 PS를 본격적으로 공부해보지 않은 친한 친구들과 팀을 꾸려 ICPC에 나가게 되었다. 나도 PS를 오래 쉬었으니 인터넷 예선을 통과하여 리저널을 찍먹하는 것이 목표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 팀원 중 한 명이 원래 수학을 잘하기도 하고, 요즘 자구와 DP에 빠져있다. 그리고 고등학교 시절 PS를 했을 때도 그래프가 약점이기도 했어서, 이번 기회에 그래프 위주, 그 중에서도 트리 알고리즘 위주로 공부하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 1일 1수쿼 마냥 매일 풀거나 기록하는 것은 사실상 불가능하다. 학업 등 더 우선순위인 것들이 있기 때문.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 몇 달이 걸릴지 모르겠지만 HLD, CD 등 예전에 알고 있었지만 감이 떨어진 개념들부터 트리와 관련된 &quot;그들만의 웰노운&quot;까지 전부 정복하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 대부분의 글은 나의 독자적인 설명의 비율보다는 kks227 / JusticeHui 등 유명한 블로그의 내용을 보고 정리한 것의 비율이 높을 것이라는 사실을 밝힌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 시작~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;공부 기록&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Heavy Light Decomposition&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;교과서 : &lt;a href=&quot;https://justicehui.github.io/hard-algorithm/2020/01/24/hld/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://justicehui.github.io/hard-algorithm/2020/01/24/hld/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기록장 : &lt;a href=&quot;https://unorderedmap.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://unorderedmap.tistory.com/49&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10/7 : 남극 탐험(D5), 국제 메시 기구(D4), 안전한 비상연락망(D4)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10/8 : 트리와 쿼리 10(D3)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Centroid Decomposition&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;교과서 : &lt;a href=&quot;https://justicehui.github.io/hard-algorithm/2020/08/25/centroid/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://justicehui.github.io/hard-algorithm/2020/08/25/centroid/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기록장 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10/8 : UCPC 만들기(D5)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10/10 : 공장들(D4)&lt;/p&gt;</description>
      <category>기타</category>
      <category>HLD</category>
      <category>센트로이드</category>
      <category>트리</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/48</guid>
      <comments>https://unorderedmap.tistory.com/48#entry48comment</comments>
      <pubDate>Wed, 2 Oct 2024 12:46:25 +0900</pubDate>
    </item>
    <item>
      <title>2023 SCPC 2차 예선 후기 + 본선 진출 컷 분석</title>
      <link>https://unorderedmap.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;총점 : 100/200/90/180/60 = 630 [본선 진출]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;세 줄 요약&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 동아리의 아주 중요한 일정과 겹쳐 대회를 정상적으로 치지 못했다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 1/2번이 쉬웠고 4/5번의 최대 서브태스크가 자명이었는데, 3번과 4번의 점수에 따라 갈릴 것 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 본선 진출 컷은 630점 또는 585점의 상위권 어딘가 될 확률이 높다. [실제로 585에서도 본선 진출 소식이 들려왔다]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 블로그에 게시글이 올라오는 빈도가 줄어든 것으로도 알 수 있듯이, 대학 진학 후 PS를 거의 손에서 놨다. 친구들과 많이 놀러다니기도 하고, 동아리 활동도 열심히 하면서 세상에서 제일 한가하다는 새내기의 삶을 맘껏 체험했다. 그럼에도 PS는 앞으로 과외를 위해서라도 아예 놓을 수는 없었고, SCPC와 같이 상금이 큰 대회를 위해서라도 놓지 않는 것이 이득이었다. 하지만 안타깝게도, 동아리 필수 일정이 15시-21시로 잡혀서 대회에 제대로 참여할 수 있는 시간은 절반 남짓이었다. 본선은 당연히 갈거라고 생각했는데, 자칫하면 본선 진출이 위험해진 상황이 된 것이다. 그래도 주어진 환경에서는 최선을 다해 풀었다고 자부할 수 있고, 컷 분석을 해본 결과 본선에 진출할 확률이 진출하지 못할 확률보다는 높은 것 같다. 우선 컷 분석을 하기 전, 문제 요약 및 나의 접근 과정, 풀이를 소개하자면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 타이젠 윷놀이 : 보자마자 한숨을 내쉬었다. 더 쉽게 접근했으면 좋았을텐데 이 문제에서 1시간이나 허비했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 이동과 관련해서 변수가 너무 많기 때문에, 각 시점에서 말이 새로 출발했을 때 1바퀴를 도는 시점을 찾아 모두 저장했다. 말 하나가 1바퀴를 도는 데에는 최대 19번이 걸리기 때문에 시간복잡도도 안전했는데, 문제는 그 다음이었다. 이를 가지고 시간복잡도에 로그를 붙여, 스파스테이블 느낌으로 내리려고 했는데 log(N*M)이 33이었고 TC가 87개여서 33*87*10만이 TLE가 났다. 도대체 어떤 대회에서 TC 개수를 시간복잡도에 고려해야하는지는 모르겠으나 아무튼 그렇게 됐다... 결국 N*M이 1e10이니 이 값의 루트가 1e5라는 점을 이용해 스파스테이블을 절반만 만들었고, 1e5번 전진하는 동안 N*M의 이동횟수를 모두 사용했다면, 그 범위 안에서 파라메트릭을 실행하는 것을 1&amp;lt;&amp;lt;16번 반복했더니 풀렸다. 즉, 1번 문제를 스파스 + 루트질 + 파라메트릭으로 풀었고 제출횟수도 6번이었어서 이미 멘탈이 어느 정도 갈린 상태였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 당연히 이 문제의 의도 풀이는 이렇게 더럽지 않다. 그냥 이동에 관련된 큰 배열을 하나 노가다로 만들어서 푸는게 제일 깔끔한 풀이였던 것 같다. 백도가 없었던 것을 감사하게 생각하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 괄호 문자열 : 문자열 혐오증이 있지만, 그래도 SCPC에서 자주 출제되는 문자열이 3번이 아닌 2번에 나온 것에 안심했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 문제 자체는 어렵지 않았고, 1번보다 빨리 푼 것 같다. 가장 중요한 관찰은 열린괄호와 닫힌 괄호의 쌍이 정해져있다는 점이었고, 이를 stack을 이용해서 O(N)에 구해준다음 이웃해있는 괄호들끼리만 경우의 수를 늘려주면 되는 문제였다. 저 관찰이 마냥 쉽지는 않아서 생각보다 100솔이 나오는 데에 오래 걸렸고, 나도 구현에서 이상한 짓을 많이 해서 7번이나 제출하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 루머 : 본선 진출에 갈림길이 되었던 문제이다. 81솔이 나왔는데, 난이도에 빗대어 생각하면 상당히 많이 풀렸다고 말할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크의 점수 분포는 45점/90점/180점/300점이었다. 순서대로 나이브 / N^3 / N^2logN / N^2을 요구하는 서브태스크인데, 누군가가 N^3, N^4으로도 풀태를 뚫었다는 소문도 들었다. 솔직하게 말하면 3번을 풀고 나머지 문제에서 자명한 서브태스크를 긁으면 진출할 수 있을 것이라고 생각해서 풀태를 시도했고, 풀태가 어렵지 않게 떠올랐다. 우선 어떤 사람이 감염자면 그 사람이 T초 후에 어디까지 영향을 미칠 수 있는지는 정해져있었다. 귀가 얇지 않은 사람, 즉 A[i]=2인 점들이 마치 벽처럼 작용하기 때문이었다. 따라서 사람이 아니라 구간으로 접근했고, dp[i][j]를 j번째 구간까지 i개의 구간을 사용하여 덮을 수 있는 부분의 최대 길이로 놓은 후 O(1)에 갱신해주면 되는 문제였다. dp[i][j]를 갱신할 때에는 총 3가지를 갱신해주면 되었는데, 1번째는 앞선 구간과 벽을 끼고 벽까지 감염시키는 경우였다. 이는 dp2[i][j]를 i개의 구간을 사용하여 j번째 위치를 끝으로 하며 벽을 잠재적으로 감염시킬 수 있는 상황에서 덮을 수 있는 부분의 최대 길이로 놓은 후 스위핑해주면 시간복잡도의 소모 없이 구할 수 있었다. 2번째는 벽과 관계없이 현재 관찰하는 구간과 겹치지 않게 앞 구간을 선택하는 경우였고, 이는 dp3[i][j]를 dp[i][1]~dp[i][j]의 최댓값으로 저장하면 쉽게 해결되었다. 3번째는 현재 관찰하는 구간과 겹치게 앞 구간을 선택하는 경우였는데, 이 경우는 덱dp를 사용해주면 구할 수 있다고 한다. 나는 boj.kr/11003과 같은 덱dp 문제들을 풀어본 적이 없어서 여기서 세그를 썼고, 180점을 노리는 풀이를 작성했다. 동아리 일정 중간중간에 틈틈이 코드를 작성하여 완성했으나 당연히 집중 안되는 환경에서 작성한 코드가 한 번에 돌아갈리가 없었고, 디버깅을 하는 도중 시간이 끝날 것 같아서 갱신을 O(N)에 하는 dp로 안전하게 수정하여 90점만을 획득하였다. 동아리 활동 없이 편한 환경에서 코딩했다면 180점 이상은 받았을 것 같다. 이 문제도 제출을 8번이나 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 막대기 연결 : 전체 풀이는 모르겠고 최대 서브태스크인 180점 풀이는 자명했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B[i][j]를 i번째 막대기와 j번째 막대기로 만들 수 있는 사다리꼴의 넓이의 2배로 저장해놓고, C[i][j]를 B[i][i] ~ B[j][j] 사각형에 있는 최솟값으로 저장해둔 다음에 풀면 O(N^2)에 안전하게 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 스마트 아파트 건설 : 문제가 기억도 안나는데 시간복잡도 O(N!)에 next_permutation을 이용해 나이브를 구현하면 최대 서브태스크인 60점을 얻을 수 있었던 것으로 기억한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; 컷 분석 &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zGtGa/btssarI5rAu/DRBQnGscPgJLa4F6DxMBP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zGtGa/btssarI5rAu/DRBQnGscPgJLa4F6DxMBP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zGtGa/btssarI5rAu/DRBQnGscPgJLa4F6DxMBP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzGtGa%2FbtssarI5rAu%2FDRBQnGscPgJLa4F6DxMBP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;924&quot; height=&quot;383&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 컷 분석의 근거는 이 통계이다. 우선 1번과 2번은 만점을 받아야 본선 진출이 가능한 것이 당연하고, 나머지 3문제에서 사람들이 평균적으로 어느 정도의 서브태스크를 긁었는지가 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 4번은 0점을 x명, 40점을 y명, 180점을 z명, 400점을 9명으로 놓고 방정식을 세우면 x+y+z=180, 2y+9z=1191이 된다. 2y+9z=1191의 디오판토스 방정식을 풀면 아래와 같이 나온다. 가장 윗줄은 입력이고 왼쪽이 y, 오른쪽이 z인데 y+z&amp;lt;=180이기 때문에 적어도 119명 이상은 180점을 받은 것으로 추측된다. 아마 0점이 1명 밖에 없지는 않을 것이기 때문에 180점을 받은 사람은 120명 대일 것 같다. &lt;b&gt;만점자까지 합치면 130~140명 사이인데, 본선 진출 인원이 130명 정도인 것으로 예측했을 때 여기서 180점을 받았다면 진출 확률이 매우 높아진다.&lt;/b&gt; 180점의 하위 섭테가 40점이기 때문에 3번에서 받은 점수보다 4번에서 받은 점수가 더 크게 작용할 것으로 생각된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;533&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Buvow/btsr64t8K8U/3x2D0Qwk3ZPukN6M4UdAdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Buvow/btsr64t8K8U/3x2D0Qwk3ZPukN6M4UdAdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Buvow/btsr64t8K8U/3x2D0Qwk3ZPukN6M4UdAdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBuvow%2Fbtsr64t8K8U%2F3x2D0Qwk3ZPukN6M4UdAdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;303&quot; height=&quot;343&quot; data-origin-width=&quot;533&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5번은 점수가 0점 60점 400점 뿐이라 계산하기 쉽다. 60점을 받은 사람은 154명이고, 워낙 쉬웠기 때문에 당락에는 영향을 미치지 못했을 것으로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 3번은 점수가 너무 다양해서 방정식을 풀기보다는, 만점을 제외한 평균을 구하는 것이 더 의미가 있을 것이다. 만점을 제외하면 평균이 51점 정도로, 90점을 받았다면 진출하기 쉽다. 아마 180점을 받았다면 300점도 받았을 확률이 높아서 3번 90점 + 4번 180점이면 안전하게 붙을 것 같다. 약간 문제가 되는 것은 3번 45점 + 4번 180점인데, 이 점수도 상위권까지는 잘하면 붙을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이번 본선이 온라인이라는 소문도 있고 애초에 인원이 유동적이라서 내가 운영진이라면 제출 페널티를 가지고 컷을 자를 것 같지는 않아서, 깔끔하게 630점 또는 585점이 컷이 될 것 같다. 아직 결과가 나온 것은 아니니 본선에 가기를 기도해야겠다.&lt;/p&gt;</description>
      <category>대회 후기</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/47</guid>
      <comments>https://unorderedmap.tistory.com/47#entry47comment</comments>
      <pubDate>Thu, 24 Aug 2023 14:25:31 +0900</pubDate>
    </item>
    <item>
      <title>2022 나코더 송년대회 후기</title>
      <link>https://unorderedmap.tistory.com/46</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vVRZT/btrVebNOAdv/yfWotyr91Be8sWNz9wSdc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vVRZT/btrVebNOAdv/yfWotyr91Be8sWNz9wSdc1/img.png&quot; data-alt=&quot;2022 나는 코더다 송년대회 스코어보드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vVRZT/btrVebNOAdv/yfWotyr91Be8sWNz9wSdc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvVRZT%2FbtrVebNOAdv%2FyfWotyr91Be8sWNz9wSdc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2880&quot; height=&quot;1540&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1540&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2022 나는 코더다 송년대회 스코어보드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결과 : 2위 (6솔, 시간페널티 803분)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://unorderedmap.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://unorderedmap.tistory.com/9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672754635255&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;2021 나코더 송년대회 후기&quot; data-og-description=&quot;결과 : 2위 (7솔,시간페널티 922분) 나코더 송년대회는 경기과학고등학교의 PS 동아리 '나는코더다'에서 주최하는 연례 행사이다. 카카오, 넥슨 등의 후원을 받아 진행되어 상품도 푸짐하여 경기과&quot; data-og-host=&quot;unorderedmap.tistory.com&quot; data-og-source-url=&quot;https://unorderedmap.tistory.com/9&quot; data-og-url=&quot;https://unorderedmap.tistory.com/9&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kmPXX/hyQ87mAlNh/cImSfBG6JOn4tIGK6O4Ld1/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/4vFWF/hyQ85I24UQ/BP3HOP4Wp8HqFqplgXqpA0/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/Grrz2/hyQ835xUNO/WpXZcimbncIKw83s4hKhM1/img.png?width=1903&amp;amp;height=770&amp;amp;face=0_0_1903_770&quot;&gt;&lt;a href=&quot;https://unorderedmap.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://unorderedmap.tistory.com/9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kmPXX/hyQ87mAlNh/cImSfBG6JOn4tIGK6O4Ld1/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/4vFWF/hyQ85I24UQ/BP3HOP4Wp8HqFqplgXqpA0/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/Grrz2/hyQ835xUNO/WpXZcimbncIKw83s4hKhM1/img.png?width=1903&amp;amp;height=770&amp;amp;face=0_0_1903_770');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2021 나코더 송년대회 후기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;결과 : 2위 (7솔,시간페널티 922분) 나코더 송년대회는 경기과학고등학교의 PS 동아리 '나는코더다'에서 주최하는 연례 행사이다. 카카오, 넥슨 등의 후원을 받아 진행되어 상품도 푸짐하여 경기과&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;unorderedmap.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년에는 온라인으로 진행되었던 나코더 송년대회가 학교 강당에서 오프라인으로 진행되었다. 많은 친구들이 강당에 모여서 피자도 먹고 코딩도 하니 대회보다는 축제 분위기에 더 가까웠던 것 같다. 출제를 해준 &lt;a href=&quot;https://solved.ac/profile/mathking1021&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;mathking1021&lt;/a&gt;, &lt;a href=&quot;https://solved.ac/profile/jbkmath48128&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jbkmath48128&lt;/a&gt;, &lt;a href=&quot;https://solved.ac/profile/donghwa722&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;donghwa722&lt;/a&gt;, &lt;a href=&quot;https://solved.ac/profile/ftkbrian&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ftkbrian&lt;/a&gt;, &lt;a href=&quot;https://solved.ac/profile/sciencepark&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;sciencepark&lt;/a&gt;은 모두 같은 기수 친구들이다. 학창시절의 마지막에서 두 번째 날 좋은 추억을 선물해주기 위해 노력 많이 해준 친구들에게 고맙다는 말을 전하고 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자가 속한 팀은 &quot;ISTP&quot; 팀으로, 놀랍게도 세 팀원의 MBTI가 모두 ISTP이다. 나머지 두 팀원은 2학년 &lt;a href=&quot;https://codeforces.com/profile/windva&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이성호&lt;/a&gt; 학생과 3학년 &lt;a href=&quot;https://codeforces.com/profile/leinad2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;최다니엘&lt;/a&gt; 학생으로, 작년 우승 팀이 올해도 우승하는 것을 막기 위해 학년의 경계를 넘어 뭉쳤&lt;s&gt;으나 실상은 3등한테 따일 뻔 했&lt;/s&gt;다. CF 레드인 두 학생이 못난 필자를 데리고 같이 대회를 나가준 점을 고맙게 생각하고 있다. 1위를 차지한 팀은 작년에도 1위를 차지했던 2학년 팀으로, 올해 NYPC에서도 전부 본상에 입상한 친구들이다. 쉽게 말하면 경기과고 PS의 &quot;현재&quot;이며, 이 셋 중에서 적어도 세 명 정도는 국대가 나와야하지 않나 생각하고 있다. 3위를 한 [BIG SHOT] 팀도 무난하게 3위 안으로 들어올 수 있다고 생각하고는 있었는데, 대회 당일 생각보다 너무 잘해서 놀랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대회는 생각보다 문제가 굉장히 느린 속도로 풀렸고, 거의 좌셋이 되는 수준으로 팀들이 푼 문제들이 각각 달랐다. 실제로 오픈 콘테스트까지 합쳐놓고 보면 안 풀린 문제는 D밖에 없었고, D도 다5이기 때문에 못 풀 수준은 아니었다. 필자도 프리즈 직전에 D를 잡아서 거의 완성된 풀이를 얻었는데, 마지막 실타래를 풀지 못했다. 그 전까지의 접근 과정은 모두 맞았다고 하니, 필자보다 더 뛰어난 실력의 누군가가 D를 잡았다면 충분히 풀렸을 것 같다. 4시간 경과 후 우리 팀과 1등 팀이 각각 6솔, [BIG SHOT] 팀이 5솔인 상태로 프리즈에 진입했고, 순위가 변하지 않은 상태로 대회가 마무리 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 팀은 다니엘이 ADGJ, 성호가 BEHK, 내가 CFIL을 관찰하기로 했고, 넥슨 후원이 달린 문제가 보이면 그 문제부터 풀기로 했다. 넥슨 후원 문제인 A와 I는 1위, 2위, 3위 팀을 제외하고 남은 팀 중 가장 빨리 푼 팀에게 특별상을 주는 문제였는데, 우리는 1위, 2위, 3위 팀을 제외한다는 사실을 모르고 A와 I를 퍼솔하려고 노력했다. 시작하자마자 다니엘은 A를 잡고 나는 I를 잡았으며, 둘 모두 어려운 문제가 아니어서 빠르게 풀었다. A는 풀다가 한 번 틀렸고, I는 10초 차이로 아쉽게 퍼솔을 뺏겼다. 그 다음으로 각자 잡은 문제가 다니엘은 J(P1), 성호는 H(P1), 나는 L(D4)인데 공교롭게도 세 명 모두 각자 담당한 문제 중에서 더 쉬운 문제가 있음에도 불구하고 그냥 생각없이 잡았다. 사실 L은 전형적인 잘 알려진 센트로이드 분할 문제였고, 팀노트에 센트로이드 분할 코드를 적어왔기 때문에 문제가 최소 D4라는 것을 알면서도 풀이를 시작하긴 했다. 고맙게도 다니엘과 성호는 문제를 길지 않은 시간 내에 풀어주었고, 센트로이드 구현한지 한 세월이 되어버린 나는 코드를 완성하는 데에도 오래걸렸고 결과적으로 풀지도 못했다. 5시간 중 L을 잡고 있던 시간만 어림잡아 3시간은 되는 것 같은데, 끝내 풀지 못한 것에 대해 미안한 마음을 가지고 있다. 내가 L을 잡고 헛고생하는 사이 많은 다른 팀들이 B와 E를 풀었고, 다니엘과 성호가 그걸 보고 각각 하나씩 잡아서 풀었다. 내 기억에는 다니엘이 B, 성호가 E를 풀었던 것 같다. 여기까지가 우리 팀의 6솔의 전부였고, 타임페널티도 적지 않아 조금은 아쉬운 결과이다. 이후 F와 G는 거들떠보지도 않았고, 다니엘이 C, 내가 D, 성호와 내가 K를 같이 잡으며 추가 솔브를 따내려고 노력했지만 D와 K는 풀이에 근접했을 뿐 정해를 찾지 못했고, C는 정해를 찾았다고 생각하고 17번이나 제출했으나 끝내 솔브를 따내지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뇌절을 많이 해서 조금 아쉬운 대회였으나, 팀노트도 처음 만들어보는 등 좋은 경험이 된 것 같다. 요즘 PS 감이 많이 죽어있는데, 시간도 많은 만큼 OI Checklist로 실력을 올려야할 것 같다.&lt;/p&gt;</description>
      <category>대회 후기</category>
      <category>Iamcoder</category>
      <category>Iamcoder 송년대회</category>
      <category>나는코더다</category>
      <category>나는코더다 송년대회</category>
      <category>나코더 송년대회</category>
      <category>송년대회</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/46</guid>
      <comments>https://unorderedmap.tistory.com/46#entry46comment</comments>
      <pubDate>Wed, 4 Jan 2023 10:20:48 +0900</pubDate>
    </item>
    <item>
      <title>PS/수학 과외합니다</title>
      <link>https://unorderedmap.tistory.com/notice/45</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;** 현재는 과외 자리가 전부 찼습니다. 과외 신청은 불가하며, 관련 문의는 편하게 주시면 감사하겠습니다. **&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;1. 강사 소개&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9b943bec-ef1a-46fb-9172-0b87a65d893a&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2318238b-59bb-49b9-8317-8c635aa01cec&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 경기과학고등학교 38기 졸업&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-94ef0f50-24bc-41f2-9f5a-ebafe71115c8&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 서울대학교 통계학과 23학번 재학&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9be40f13-3d9c-4597-a73b-c59fbcc041f8&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2243fb07-56a1-46f0-b9e3-39b2b28fd480&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 서울대학교 통계학과 일반전형 최초합&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-04b4d2eb-e538-4999-ab04-130056159d72&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- KAIST 일반전형 최초합&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-11698002-8e6b-403e-b29f-24fa7e8eb857&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 연세대학교 컴퓨터과학과 논술전형 합격&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0a81ef00-1171-4abd-8c8c-a17203c6376d&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 고려대학교 컴퓨터학과 계열적합형 최초합&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ee3e81e2-e541-4e32-bdc3-da9915ea156b&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(이상 4개 대학 지원 전부 합격)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7778bd22-f0c6-4e1a-a9d8-3465bddb70c1&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-00aa2a7f-72d5-4c3b-8f8b-427703e94b45&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 2016 초등부 KOI 1차 금 / 2차 은&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f9e79bec-e49e-4102-8cb1-1f201aa201d8&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 2021 고등부 KOI 1차 은 / 2차 동&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-32c87ffa-07a2-4dd7-9a46-eee91402dce5&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 2022 고등부 KOI 1차 은 / 2차 동&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bfc417d0-04c2-4e67-92f0-d922c3d4bfa3&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- NYPC 2021 1519부문 특별상(레벨업상)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d5774fbc-8d1f-4d0f-bf34-89df89b91f9b&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- NYPC 2022 1519부문 동상&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1a8f6533-b2a5-44d8-9ef9-94f02c5d967f&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 국제정보올림피아드 계절학교 처음반/계속반 이수&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-15768a2b-79ab-46bd-a2c3-fcbe21dba862&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- Codeforces Handle : unordered_map (Master) / solved.ac Handle : vector (D1)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-10358c0d-643b-4391-9894-0435404da9b5&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d8c2bda3-138c-4c96-8b99-512d07801939&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 2017 KMO 중등부 1차 동 / 2차 동&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-31130e3d-3df2-48e2-a49d-7a5a79948317&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 2018 KMO 중등부 1차 은 / 2차 은&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4daf7e62-73ee-495a-9ad8-71f1858f4149&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 2022 KMO 고등부 1차(가우스부) 금상 / 2차 미응시&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-3c7fe2c8-e718-4e7a-b27e-df3493d8cfb9&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​ &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;- 정보올림피아드와 수학올림피아드 모두 학원에서 기초 이론만 배운 뒤 심화 내용들을 독학하였고, 영재고 입시 과정에서도 모든 이론을 독학한 후 마지막에만 잠깐 학원의 도움을 받았습니다. 학원 없이 공부하는 시간동안 효율적으로 내용을 구성하여 공부하는 방법을 터득했고, 저만의 공부 팁들을 많이 얻게 되었습니다. '선생'보다는 '멘토'처럼 다가가 학생의 공부를 도와드리겠습니다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-645f130a-4f70-42c5-8ae0-da13747cbdab&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-30132278-ece6-49f5-9729-adf99bca5c30&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;2. 과외 내용&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1. 정보과학(코딩)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;C/C++을 기반으로 한 PS 내용들을 수업합니다. 수업 대상은&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중/고등 정보올림피아드 대비 알고리즘 수업을 원하는 학생&lt;/li&gt;
&lt;li&gt;기본적인 문법은 알지만 백준 골드, 플래티넘 이상 문제가 풀리지 않는 학생&lt;/li&gt;
&lt;li id=&quot;SE-6a795eb1-f50d-462d-a22a-c2fcfa3d80be&quot;&gt;영재고/과학고 내신 정보과학 中 PS 영역에 도움을 얻고자 하는 학생&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이며, 코딩테스트 대비 성인 과외 경험도 몇 차례 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;코딩은 같은 것을 배우더라도 사람에 따라 목적이 다양합니다. 많은 내용을 공부하고 많은 분들을 가르쳐보면서 목적에 따라 어떻게 공부하는 것이 적합한지 알게 되었습니다. 위 항목들에 해당되지 않더라도 과외의 목적을 확실히 해주시면 제가 도울 수 있는지 판단해드리도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;2. 수학&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다양한 분야의 수학 내용들을 수업합니다. 수업 대상은&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고등수학 공부에 도움을 받고자 하는 학생 (수능, 선행학습, 영재고/과학고 포함 고등학교 내신 등)&lt;/li&gt;
&lt;li&gt;중등 수학올림피아드를 공부하고 있는 학생&lt;/li&gt;
&lt;li&gt;대학 입시 심층논술면접을 대비하는 학생&lt;/li&gt;
&lt;li&gt;정수론 / 선형대수학 대학수학에 도움을 받고자하는 학생&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;수학은 때로는 이해가 중요하고, 때로는 반복이 중요하며, 때로는 조급해하지 않고 기다리는 것이 중요합니다. 공부 방법에 특히 더 많은 도움을 드리도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-86549bf6-15cf-4716-ab39-fdf1e855a3fb&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-a05254fe-04d1-41aa-9cf9-e995859471e3&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;3. 과외 신청 [ 현재는 신청을 받지 않습니다 ]&lt;/span&gt;&lt;/b&gt;​&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;대면 수업과 비대면 수업 모두 가능합니다.&lt;/li&gt;
&lt;li&gt;대면 과외 가능 지역 : 경기도 부천시 &amp;amp; 서울시 관악구 및 인근 지역&lt;/li&gt;
&lt;li&gt;시급은 정보과학 5~6.5, 수학 5~5.5, 대학수학 6.5~이며, 수업의 내용 및 종류에 따라 다를 수 있습니다.&lt;/li&gt;
&lt;li&gt;과외를 신청하고자하시는 분들은 아래로 연락 주시면 시급 및 일정을 조율하실 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-07bf6e07-2074-4059-bba3-5c769bd13646&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5c9c0000-7ba7-48ca-9654-e31e902720c3&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;[과외 신청 링크]&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4d7f5fd4-9dde-4493-bd04-ac91825285d2&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://open.kakao.com/o/sSaql3Ve&quot;&gt;https://open.kakao.com/o/sSaql3Ve&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/notice/45</guid>
      <pubDate>Tue, 3 Jan 2023 22:45:31 +0900</pubDate>
    </item>
    <item>
      <title>한국정보올림피아드(KOI 2022) 2차 시험 후기</title>
      <link>https://unorderedmap.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;총점: 100/100/14/34=248 (동상, 13.37%, 25위)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;세 줄 요약&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 1, 2번이 쉽지만은 않았던 시험&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2. 마지막 득점 시간 &quot;2시간 24분&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. TC35에서 TLE&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;보통 KOI 2차 시험에는 1번, 2번에 조금의 노력만으로 100점을 받을 수 있는 문제가 나오고, 3번, 4번에 변별력 있는 서브태스크들을 가진 문제가 나온다. 그래서 수상권에서의 등수는 3번, 4번에서 부분점수를 얼마나 긁었느냐에 따라 결정된다. 그런데 최근 들어 1번, 2번의 문제 난이도가 심상치 않다. 물론 조금 고민하면 풀 수 있는 문제이긴 하지만, 문제를 처음 읽고 나서 조금 당황하게 되는 수준이다. 이에 따라 나는 집중력이 가장 높은 초반부에 3번, 4번 서브태스크들을 잡고, 조금 집중력이 떨어진 시기에 1번, 2번을 푸는 작전을 세웠다. 애초에 은상이 목표였기 때문에 긁어야하는 서브태스크들을 실수 없이 긁고 거기에 추가로 더 긁는다면 목표를 달성할 수 있을 것이라고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;3번 문제는 이번 시험에서 가장 언급이 많이 되고 있는 문제인 &amp;lt;레벨 업&amp;gt;이다. 원래 기존 3번은 풀태스크가 불가능한 다4-다3 수준의 문제가 나오는 것이 일반적이었는데, 이번에 이례적으로 3번 문제의 정답자가 상당히 많이 나왔고 이 중 일부는 3번이 2번보다 쉽다는 의견을 제시하기도 했다. 아무튼 나는 3번이 절대 풀태스크를 할 수 없는 문제라고 생각하고 있었기 때문에 문제를 읽자마자 서브태스크 긁을 궁리부터 했다. 나이브하게 풀면 4점을 받고, K=1인 경우에 처리를 적절하게 하면 10점을 더 받는다. 40분 정도 투자하여 14점을 긁고 넘어갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;4번 문제는 &amp;lt;외곽 순환 도로&amp;gt; 문제이다. 이 문제 역시 읽자마자 서브태스크에 집중하였다. 1번 서브태스크부터 차례대로 6점, 8점, 5점, 15점, 57점, 9점이었다. 57점까지 긁는다는 것은 사실상 풀태스크를 하겠다는 것이기에, 4번 서브태스크까지는 어떤 일이 있어도, 무조건 긁어야겠다고 생각했다. 실제로 이는 어렵지 않았다. 1번 서브태스크는 쿼리의 시작점이 정해진 경우였고, 이는 1번 정점에 대한 다익스트라를 미리 돌려놓으면 된다. 2번 서브태스크는 성게 트리로, 1번 서브태스크에서 이어지는 내용이었다. &quot;리프 사이클을 따라 회전&quot; or &quot;1번 정점을 거쳐가기&quot;를 선택해야하므로 전자의 경우 누적합 전처리를 통해, 후자의 경우 1번 정점에 대한 다익스트라를 통해 해결할 수 있었다. 3번 서브태스크는 리프 사이클 간선의 가중치가 비정상적으로 크게 설정된 경우로, 트리 간선만 사용하는 경우였다. 이는 스파스 테이블을 기반으로 한 LCA를 통해 해결할 수 있다. 4번 서브태스크는 반대로 리프 사이클 간선의 가중치가 모두 0인 경우였고, 이는 &quot;가까운 리프 거쳐가기&quot; or &quot;트리 간선만 이용하기&quot; 중에 선택하라는 의미였다. 전자는 리프 정점들을 출발점으로 보고 다익스트라와 비슷하게 계산해줄 수 있고, 후자는 3번 서브태스크와 동일하다. 이렇게 40분 정도 투자하여 34점을 긁고 넘어갔다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;1번 문제는 &amp;lt;트리와 쿼리&amp;gt; 문제이다. 사실 문제 읽고 아이디어가 쉽게 떠오르지 않아 조금 당황했다. 개인적으로 아이디어 자체는 자명했던 2번보다는 어려운 문제라고 생각하는데, 전체적으로 제공된 정보가 1번이 더 많아서 사람에 따라 1번을 더 쉽게 느꼈을 수도 있을 것 같다. 1번 문제에서는 각 컴포넌트를 이루는 정점들의 수를 세기 위해서 먼저 1번 정점을 루트로 DFS를 돌려주었다. 그 다음 S에 속하는 정점을 깊이순 오름차순 정렬한 뒤, 자신의 부모가 S에 속해있다면 부모가 속해있는 컴포넌트로, 속해있지 않다면 새로운 컴포넌트로 배정하였다. 이 풀이가 성립하는 것은 상당히 직관적으로 확인할 수 있으며, 정렬까지 해서 총 시간복잡도는 O(QKlogK)가 된다. 20분 정도 투자하여 어렵지 않게 100점을 받았다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;2번 문제는 &amp;lt;식사 계획 세우기&amp;gt; 문제이다. 아이디어는 보자마자 자명한 문제이다. 우선 '사전 순'이라는 것에서 그리디 기반임이 자명하다. 그렇다면 언제 그리디를 포기해야하는가? 어쩔 수 없이 포기해야할 때 포기하면 된다. 이는 아직 방문하지 않은 식당이 M개일 때, 남은 식당 중 (M+1)/2개가 같은 종류의 음식을 판매하여 지금부터는 어쩔 수 없이 이 식당들을 2번에 1번 꼴로 방문해야하는 경우이다. 이걸 그대로 구현해주면 된다. 구현 과정에서 현재 가장 많이 남아있는 종류의 식당이 무엇인지 파악하기 위해 세그먼트 트리를 활용한 친구들이 많던데, 이는 크게 돌아가는 풀이이다. 현재 값들의 최댓값을 저장하고 싶다면, &quot;C[i] : 현재 값들 중 i인 것의 개수&quot;로 배열을 하나 잡아 이를 관리해줄 수 있다. 이를 통해 세그먼트 트리를 사용하지 않을 수 있으며, 이는 시간복잡도와 구현 시간을 모두 줄여준다. 나는 이를 알고 있었음에도 불구하고 더 쉬운 구현 방법이 없을까 고민했고, 없다는 것을 깨닫고 고민하다가 구현에서 실수를 많이 해서 시간을 날려먹었다. 40분 정도 투자한 끝에 100점을 받았다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 해서 시험이 시작하고 2시간 24분이 지난 시점에 248점을 완성했다. 여기까지만 해도 문제 풀이의 순서를 바꾼 내 작전이 성공했다고 느꼈다. 하지만 내 점수를 자세히 본 사람들은 알 수 있듯이, 248점은 내 최종 점수이다. 그렇다면 나는 남은 2시간 6분 동안 무얼했는가?&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;4번 문제는 더 이상 긁을 서브태스크가 없다는 것을 알고 있었고, 3번이 풀태스크가 불가능하다는 것도 알고 있었다. 그렇다면 남은 서브태스크는 단 하나, 3번의 세 번째 서브태스크였다. 32점짜리였고, 맞히면 280점이기 때문에 여기서 은상 안정권이 갈릴 것이라고 생각했다. 그래서 남은 2시간 동안 이 서브태스크를 긁는 것에 올인하겠다고 다짐했다. 근데 하필이면 내가 이 서브태스크를 풀기 위해 장착한 도구가, 스플레이 트리이다. 1번부터 K번까지 1씩 더하는 것은 Lazy Propagation을 통해 처리해줄 수 있고, 그렇다면 크기 순서가 바뀌는 경우만 잘 처리해주면 된다. 그 순서가 바뀌는 것은 중앙부에 x+1 x+1 ... x+1 x x ... x 부분을 구간 뒤집기 쿼리를 통해 처리함으로써 해결된다. 어떤 구간을 뒤집을지 찾는 것도 함수를 이용해 적절히 탐색하며 찾을 수 있다. 그렇게 코드 작성만 1시간 30분을 하여 209줄짜리 스플레이 트리 풀이를 완성했다. 스플레이 트리 특성상 구현이 길어 오류가 엄청 나는데, 1시간 30분 정도면 아무 것도 보지 않은 상태에서 짠 스플레이 트리 코드치고 상당히 빠르게 완성된 편이다. 그리고 이 209줄짜리 코드는 TC35에서 TLE를 받았다. 시간복잡도는 O(MlogN)으로 원래 같았으면 통과가 되어야 정상이지만, 스플레이 트리의 상수가 너무 큰 나머지 1초라는 시간제한을 넘겼던 것 같다. 결국 더 이상 점수 받기를 포기했고, 248점으로 시험을 마무리하게 되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;사실 스플레이 트리를 시험에서 외워서 짜는 사람은 흔하지 않다. 나도 이번에 처음 짜봤고, 솔직히 짜기 시작할 때만 해도 내가 제대로 돌아가는 코드를 짤 수 있을 것이라고 생각하지 않았다. 스플레이 트리 지지자로서 시험 중에 스플레이 트리를 사용하는 시간복잡도가 보장된 풀이를 떠올려 이를 시간 안에 구현했다는 사실 자체가 굉장히 뿌듯했고, 재미있었다. 그 209줄의 실체와 자세한 코드가 궁금하신 분들을 위해 스플레이 트리 코드만 따로 첨부해두겠다. 비록 은상은 날아간 것 같지만 재미있는 시험이었다. 실제 이번 시험의 1등 점수인 334점이 10명이 넘어서 대상-금상-은상의 점수가 모두 같은 초유의 사태가 벌어질 것 같다고 하는데, 내 얘기는 아니니 팝콘 들고 지켜봐야겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;3-3 스플레이 트리 코드, TC35에서 TLE)&lt;/p&gt;
&lt;pre id=&quot;code_1657989197884&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;
#define SIZE 100010
using namespace std;
struct node
{
    int id,al,lz;
    node *l,*r,*p;
    bool fl;
    node(int x,node *q){
        l=r=nullptr,p=q;
        id=x,al=1,lz=0,fl=false;
    }
};
int N,M,K,L[SIZE];
node *ptr[SIZE],*root;
void push(node *x)
{
    if(x-&amp;gt;fl){
        swap(x-&amp;gt;l,x-&amp;gt;r);
        if(x-&amp;gt;l)x-&amp;gt;l-&amp;gt;fl=!x-&amp;gt;l-&amp;gt;fl;
        if(x-&amp;gt;r)x-&amp;gt;r-&amp;gt;fl=!x-&amp;gt;r-&amp;gt;fl;
        x-&amp;gt;fl=false;
    }
    if(x-&amp;gt;lz){
        x-&amp;gt;id+=x-&amp;gt;lz;
        if(x-&amp;gt;l)x-&amp;gt;l-&amp;gt;lz+=x-&amp;gt;lz;
        if(x-&amp;gt;r)x-&amp;gt;r-&amp;gt;lz+=x-&amp;gt;lz;
        x-&amp;gt;lz=0;
    }
}
void upd(node *x)
{
    push(x);
    x-&amp;gt;al=1;
    if(x-&amp;gt;l){
        push(x-&amp;gt;l);
        x-&amp;gt;al+=x-&amp;gt;l-&amp;gt;al;
    }
    if(x-&amp;gt;r){
        push(x-&amp;gt;r);
        x-&amp;gt;al+=x-&amp;gt;r-&amp;gt;al;
    }
}
void rot(node *x)
{
    node *p=x-&amp;gt;p;
    node *b=nullptr;
    push(x);push(p);
    if(p-&amp;gt;l==x){
        p-&amp;gt;l=b=x-&amp;gt;r;
        x-&amp;gt;r=p;
    }
    else{
        p-&amp;gt;r=b=x-&amp;gt;l;
        x-&amp;gt;l=p;
    }
    x-&amp;gt;p=p-&amp;gt;p;
    p-&amp;gt;p=x;
    if(b)b-&amp;gt;p=p;
    if(x-&amp;gt;p){
        if(x-&amp;gt;p-&amp;gt;l==p)x-&amp;gt;p-&amp;gt;l=x;
        else x-&amp;gt;p-&amp;gt;r=x;
    }
    else root=x;
    upd(p);upd(x);
}
void splay(node *x,node *g=nullptr)
{
    while(x-&amp;gt;p!=g){
        node *p=x-&amp;gt;p;
        if(p-&amp;gt;p==g){
            rot(x);
            break;
        }
        node *pp=p-&amp;gt;p;
        if((p-&amp;gt;l==x)==(pp-&amp;gt;l==p)){
            rot(p);
            rot(x);
        }
        else{
            rot(x);
            rot(x);
        }
    }
    if(!g)root=x;
}
void kth(int k)
{
    node *x=root;
    push(x);
    while(1){
        while(x-&amp;gt;l&amp;amp;&amp;amp;x-&amp;gt;l-&amp;gt;al&amp;gt;k){
            x=x-&amp;gt;l;
            push(x);
        }
        if(x-&amp;gt;l)k-=x-&amp;gt;l-&amp;gt;al;
        if(!k--)break;
        x=x-&amp;gt;r;
        push(x);
    }
    splay(x);
}
node *gather(int s,int e)
{
    kth(e+1);
    node *tmp=root;
    kth(s-1);
    splay(tmp,root);
    return root-&amp;gt;r-&amp;gt;l;
}
void flip(int s,int e)
{
    if(s&amp;gt;=e)return;
    node *z=gather(s,e);
    z-&amp;gt;fl=!z-&amp;gt;fl;
}
node *F(int k,node *x)
{
    if(!x)return nullptr;
    push(x);
    if(x-&amp;gt;id&amp;lt;k){
        if(x-&amp;gt;r)return F(k,x-&amp;gt;r);
        else return nullptr;
    }
    else{
        if(x-&amp;gt;l){
            node *z=F(k,x-&amp;gt;l);
            if(z)return z;
            else return x;
        }
        else return x;
    }
}
node *G(int k,node *x)
{
    if(!x)return nullptr;
    push(x);
    if(x-&amp;gt;id&amp;gt;k){
        if(x-&amp;gt;l)return G(k,x-&amp;gt;l);
        else return nullptr;
    }
    else{
        if(x-&amp;gt;r){
            node *z=G(k,x-&amp;gt;r);
            if(z)return z;
            else return x;
        }
        else return x;
    }
}
void print(node *x)
{
    push(x);
    if(x-&amp;gt;l)print(x-&amp;gt;l);
    if(x-&amp;gt;id&amp;gt;0&amp;amp;&amp;amp;x-&amp;gt;id&amp;lt;2000000001)cout&amp;lt;&amp;lt;x-&amp;gt;id&amp;lt;&amp;lt;' ';
    if(x-&amp;gt;r)print(x-&amp;gt;r);
}
void init()
{
    for(int i=1;i&amp;lt;=N;i++)ptr[i]=nullptr;
    root=new node(-1,nullptr);
    node *x=root;
    for(int i=1;i&amp;lt;=N;i++){
        ptr[i]=x-&amp;gt;r=new node(L[i],x);
        x=x-&amp;gt;r;
    }
    x-&amp;gt;r=new node(2000000001,x);
    for(int i=N;i&amp;gt;=1;i--)upd(ptr[i]);
    splay(ptr[N+1&amp;gt;&amp;gt;1]);
}
int main()
{
    ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin&amp;gt;&amp;gt;N;
    for(int i=1;i&amp;lt;=N;i++)cin&amp;gt;&amp;gt;L[i];
    sort(L+1,L+N+1);
    cin&amp;gt;&amp;gt;M&amp;gt;&amp;gt;K;
    init();
    while(M--){
        node *z=gather(1,K);
        z-&amp;gt;lz++;
        kth(K);
        int a=0,b=0;
        node *z1=F(root-&amp;gt;id,root);
        node *z2=G(root-&amp;gt;id-1,root-&amp;gt;r);
        if(z1&amp;amp;&amp;amp;z2){
            if(z1-&amp;gt;l)a+=z1-&amp;gt;l-&amp;gt;al;
            while(z1-&amp;gt;p!=nullptr){
                node *p=z1-&amp;gt;p;
                if(p-&amp;gt;r==z1){
                    a++;
                    if(p-&amp;gt;l)a+=p-&amp;gt;l-&amp;gt;al;
                }
                z1=p;
            }
            if(z2-&amp;gt;l)b+=z2-&amp;gt;l-&amp;gt;al;
            while(z2-&amp;gt;p!=nullptr){
                node *p=z2-&amp;gt;p;
                if(p-&amp;gt;r==z2){
                    b++;
                    if(p-&amp;gt;l)b+=p-&amp;gt;l-&amp;gt;al;
                }
                z2=p;
            }
            flip(a,b);
        }
    }
    print(root);
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>대회 후기</category>
      <category>Koi</category>
      <category>KOI 2022</category>
      <category>레벨 업</category>
      <category>스플레이 트리</category>
      <category>식사 계획 세우기</category>
      <category>정올</category>
      <category>정올2차</category>
      <category>트리와 쿼리</category>
      <category>한국정보올림피아드</category>
      <category>한국정올</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/43</guid>
      <comments>https://unorderedmap.tistory.com/43#entry43comment</comments>
      <pubDate>Sun, 17 Jul 2022 01:34:34 +0900</pubDate>
    </item>
    <item>
      <title>아시아 태평양 정보올림피아드(APIO 2022) 후기</title>
      <link>https://unorderedmap.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;총점 : 14 + 60 + 93.7 = 167.7 (한국 기준 10등, Unofficial 동상)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;세 줄 요약&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 2번과 3번은 변별력이 크지 않아서 1번 점수에 따라 시험의 성패가 갈렸다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 그런데 1번이 딱히 좋은 문제인지는 모르겠다...&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 작년보다 쉬운 난이도로 숨통은 좀 트이는 시험이었다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;APIO 2021에서 5시간 동안 머리를 싸매고 얻은 결과가 40점대였기에, APIO라는 시험에 대해 그렇게 좋은 기억이 있지는 않았다. 또한 한국 6등까지만 수상이 가능한데 수많은 계절학교 모의고사 및 선발고사에서 한 셋 기준으로 6등 안에 들어본 기억이 없기에, 참가에 의의를 두고 즐겁게 참여했다. 원래는 KMO 다음 날 보려고 했는데, KMO를 생각보다 잘 봐서 머리 컨디션이 좋다고 판단하고 당일 밤에 응시하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 점수에 대한 코멘트를 하자면, 2번은 그냥 다 60점이라고 보아도 무방하다. 3번도 다 100-a점 (a&amp;lt;10)이라고 보아도 무방하다. 그래서 1번에 그 쪼개져있는 섭테들에서 얼마나 많은 섭테를 긁었는지만으로 시험의 성패가 갈렸다. 이 과정에서 2번의 60점이라는 점수가 매우 크다는 것도 한 몫을 했다. 2번에서 100점을 받은 사람이 세계에서 3명인데, 이 3명 모두 1등을 차지하지 못했다. 100/60/100이 1등이라고 한다. 이는 2번에서 60점을 너무 쉽게 줘서, 2번에서 100점을 맞아도 1번에서 60점 이상 긁기 힘들었기 때문이었다. 그래서 개인적으로 1번보다는 2번의 배점 선정이 조금 아쉬웠던 것 같다. 현재 60점을 받을 수 있는 풀이의 배점을 조금 더 낮췄으면 더 좋았을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 문제 요약 및 코멘트, 그리고 나의 접근이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1번. Mars&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2n+1)*(2n+1)의 배열이 주어지고, 각 칸은 1 또는 0으로 이루어져있다. 결과적으로 1로 이루어진 컴포넌트의 개수를 구하는 것이 목표인데, 쓸 수 있는 메모리가 한정되어있다. 우리에게 주어지는 것은 100자리 이진수열 (2n+1)*(2n+1)개이며, 이들은 각각 1000...000 또는 0000...000으로 초기화되어있다. 전자는 초기 배열의 칸이 1인 경우, 후자는 초기 배열의 칸이 0인 경우이다. 그리고 k단계에 걸쳐 이 배열에 덮어쓰기를 할 수 있다. (k=0부터 n-1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 k번 단계에서는 (0, 0)부터 (M, M)까지 순회하며, 여기서 M=2(n-k-1)이다. (i, j)를 순회할 때는 현재 (i, j)부터 (i+2, j+2)까지 9개의 이진수열이 주어진다. 그러면 이 9개의 이진수열 정보를 이용하여 (i, j)번 칸의 이진수열을 업데이트하는 문제이다. 이렇게 해서 모든 단계가 종료되면 (0, 0)의 이진수열에는 초기 배열에서 1로 이루어진 컴포넌트의 수가 들어있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 읽는 데에 10분이 넘게 걸렸고, 테스트 케이스가 대충 아래와 같이 생겼다. &lt;s&gt;출제자 나와&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zWn2d/btrDwPnsp4N/tk0idlEImatTbsN79NO61k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zWn2d/btrDwPnsp4N/tk0idlEImatTbsN79NO61k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zWn2d/btrDwPnsp4N/tk0idlEImatTbsN79NO61k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzWn2d%2FbtrDwPnsp4N%2Ftk0idlEImatTbsN79NO61k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;136&quot; height=&quot;243&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 뇌가 하얘졌고, 풀기가 싫어졌다. 나는 즐겁게 대회를 하기로 했으니 즐겁지 않은 문제는 안 풀기로 하여 2번, 3번에서 긁을 수 있는만큼 긁고 나서 1번으로 돌아왔다. 실제로 1번에 투자한 시간은 그렇게 많지 않은 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 정보들을 잘 저장해서 초기 배열 (2n+1)*(2n+1)의 모든 칸의 정보를 (0, 0)의 이진수열로 옮길수만 있다면 마지막 단계에서 단순 컴포넌트 세기 DFS로 문제를 해결할 수 있다. 이 풀이가 14점이고, 자꾸 전역변수에서 이상한 짓 하지 말라고 경고해서 나는 DFS도 stack을 이용해서 짜서 한 번에 긁었다. 여기서 생각을 조금 더 확장해보면, 결국 마지막 단계에서 다룰 수 있는 칸은 총 9칸이다. 그러면 각 칸에 100개씩, 총 900개의 칸을 저장할 수 있지 않을까? 이걸 잘 짜면 최대 54점까지 노릴 수 있을 것 같은데, 실제로 54점을 받은 친구가 없어서 잘 모르겠다. 몇몇 친구들은 54점 혹은 100점부터 짜다가 결국 0점 받고 끝냈다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2번. Game&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N개의 정점으로 이루어진 그래프를 다룰건데, 초기에는 0번부터 K-2번 정점에 대해 i-&amp;gt;i+1 간선만 그어져있다. 0번부터 K-1번 정점을 지나면 스탬프를 받을 수 있으며, 만약 이 점들 중 하나를 포함하는 사이클이 있다면 스탬프를 무한히 받을 수 있다. 여기서 이 그래프에 방향 간선이 하나씩 추가되는데, 어느 시점에서 스탬프를 무한히 받는 사이클이 처음으로 생기는지 알아내면 되는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N-K개의 정점에 대해 in[x]를 x번 정점에서 갈 수 있는 스탬프가 있는 정점 번호의 최솟값, out[x]를 x번 정점으로 갈 수 있는 스탬프가 있는 정점 번호의 최댓값이라고 하자. 어떤 x에 대해서도 in[x]&amp;lt;=out[x]가 되는 순간 스탬프를 무한히 받는 사이클이 생긴다. 그 외의 경우 K개의 정점 안에서 역방향으로 가는 간선이 추가될 경우 바로 스탬프를 무한히 받는 사이클이 생긴다. 이를 나이브하게 구현하여, 간선이 추가될 때마다 DFS로 in과 out을 갱신해주면 시간복잡도 O(NM)이 되어 30점을 받을 것 같았는데, 무려 60점을 줬다. 여기서 60점은 최종 섭테를 제외한 모든 점수이다. 알고보니 각 N-K개의 점들마다 in과 out은 최대 K번까지만 갱신되며, 갱신되지 않는 경우 바로 return을 갈겨주었으므로 시간복잡도가 O(NK)로 보장이 되는 것이다. 암튼 이걸 모르고 60점을 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 이 문제에서 만점을 받은 학생은 전 세계에서 3명이라고 한다. 그런데 최종 섭테를 제외한 점수인 60점이 너무 쉽게 떠서, 문제의 변별력이 삭제된 것 같다. 오히려 이 문제에 시간을 오래 투자한 학생들만 손해를 본 느낌인데, 난 그다지 많이 투자하지 않아서 큰 피해를 본 것 같지는 않다. 친구가 &lt;a href=&quot;https://koosaga.com/271&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://koosaga.com/271&lt;/a&gt; 이 글을 통해 이 문제의 100점 풀이를 구상했다는데, 시간 내에 짜지는 못했다고 한다. 나도 아직 저 글을 다 읽어보지는 못해서 틀린 풀이일 수도 있는데, 도전해보고 싶은 사람들은 저 글을 참고하면 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3번. Permutation&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증가하는 부분수열의 개수가 정확히 K개 있는 permutation을 만들면 되는 간단한 문제이다. K&amp;lt;=1e18이고, permutation의 길이가 90 이하면 만점을 준다. 배점표는 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EY6Ia/btrDyFdjhou/Q3KGHBLGJkCbyoRysQrc21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EY6Ia/btrDyFdjhou/Q3KGHBLGJkCbyoRysQrc21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EY6Ia/btrDyFdjhou/Q3KGHBLGJkCbyoRysQrc21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEY6Ia%2FbtrDyFdjhou%2FQ3KGHBLGJkCbyoRysQrc21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;726&quot; height=&quot;390&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 Constructive type의 문제들을 좋아해서 재미있게 풀었다. 이런 방법, 저런 방법들을 시도해보며 점수를 조금씩 올렸다. 결과적으로 100점은 받지 못했지만 재미있게 풀어서 아쉽지는 않다. 아래는 내가 접근했던 과정들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10점 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길이 N의 permutation을 N-1, N-2, ... , 0으로 적으면 증가하는 부분수열의 개수는 N+1개이다. 따라서 주어지는 K에 대해 길이 K-1의 순열을 역순으로 만들면 부분문제 1에 해당하는 점수인 10점을 받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;71.2점 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10점을 긁으면서 큰 것들을 앞에 사용하고 작은 것들을 뒤에 사용하면 두 수열을 더하는 효과를 가져올 수 있다는 사실을 관찰하였다. 또한 길이 N의 permutation을 0, 1, ..., N-1로 적으면 공집합 제외 2^N-1개의 증가하는 부분수열이 나온다. 따라서 K가 주어지면 K-1을 2^N-1의 합들로 나누어 수열을 구성해줄 수 있다. 정확히는 아니지만 대충 로그 스케일이고, 구현하면 71.2점을 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;91.36점 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순열을 여러 개로 분리해서 사용하는 것은 너무 길이 낭비 같아보인다. 이에 따라 기본 수열을 잡고, 중간중간에 숫자를 끼워넣는 방식을 생각할 수 있다. 구체적으로는, K를 이진수로 표현하여 최대 크기의 비트를 1&amp;lt;&amp;lt;k라고 하자. 그러면 우선 길이 k의 증가하는 순열을 하나 적는다. x, x+1, ..., x+k-1과 같이 말이다. 그런 다음 K의 켜져있는 비트 1&amp;lt;&amp;lt;i에 대해, 뒤의 i개의 수 앞에 x보다 작은 수를 하나 추가하면 1&amp;lt;&amp;lt;i개의 증가하는 부분수열을 더 만들 수 있다. 따라서 켜져있는 비트의 개수만큼 수를 더 추가해주면 된다. 예를 들어, K=11인 경우 1&amp;lt;&amp;lt;3이 가장 큰 비트이므로 0, 1, 2, 3을 적어둔다. 그런 다음 1&amp;lt;&amp;lt;1과 1&amp;lt;&amp;lt;0이 켜져 있으므로 각각 수를 하나씩 추가하여 0, 1, 2, -1, 3, -2로 적어주면 된다. 추가한 숫자만큼 모든 항에 더해주면 증가하는 부분수열의 개수가 정확히 K개인 순열이 된다. 개수는 최대 60+59=119개를 사용한다. 이론상 90.33점이고, 저격 tc가 없어서 91.36점을 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;93.7점 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 주변에서 같은 점수를 받은 사람을 못봤고, 이 풀이를 생각한 사람은 나밖에 없을 것 같다. 여태껏 이진수로 접근했으니 이제 삼진수로 접근하자. 1 0 3 2 5 4 .... 하는 식으로 순열을 만들면 2N개의 수로 3^N을 표현할 수 있다. 삼진수는 0, 1, 2를 포함하기 때문에 +2*3^i, +3^i을 할 방법이 필요한데, 그 방법은 생각보다 간단하다. 이진수를 넣을 때처럼 삼진수에서도 1 -1 0 3 2 5 4 ... 를 하면 +2*3^(N-1)이 되고 1 0 -1 3 2 5 4 ...를 하면 +3^(N-1)이 된다. 같은 방식으로 모든 3^i에 대해 처리해줄 수 있다. 3^38&amp;gt;1e18이므로 N이 최대 37이고, 개수는 최대 37*2+36=110개를 사용한다. 이론상 93.33점이고, 저격 tc가 없어서 93.7점을 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100점을 받은 친구들도 많은 것을 보니 이 문제는 백준 티어 기준 플래인 것 같다. 다양한 풀이를 생각해볼 수 있어서 재미있었다.&lt;/p&gt;</description>
      <category>APIO</category>
      <category>APIO 2021</category>
      <category>APIO 2022</category>
      <category>아시아 태평양</category>
      <category>아시아 태평양 정보올림피아드</category>
      <category>아시아태평양</category>
      <category>정보올림피아드</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/42</guid>
      <comments>https://unorderedmap.tistory.com/42#entry42comment</comments>
      <pubDate>Mon, 30 May 2022 22:39:01 +0900</pubDate>
    </item>
    <item>
      <title>한국수학올림피아드(KMO 2022) 고등부 가우스부 1차 시험 후기</title>
      <link>https://unorderedmap.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;총점 : 1교시 46 + 2교시 40 = 86 (상위 5%, 금상)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;세 줄 요약&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 문제들이 쉬워서 금컷을 90점대로 예상한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 계산 실수를 하지 않아서 준비를 안했음에도 점수가 잘 나왔다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 6점은 다 맞혔지만 4점은 하나 틀렸다...&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unordered_map이 PS하는 블로그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이지만 나는 중학교 때까지 수올러였다. (이 블로그의 첫 글인 소개 글을 보면 알 수 있다.) 3년 동안 수올에 손을 놓고 있다가, 문득 이번이 수올을 볼 마지막 기회라는 걸 깨달았다. 그래서 준비 단 1분도 하지 않고, 오로지 참가에 의의를 두고 마지막 수올을 응시했다. 그렇게 부담 없이 봐서 그런지 계산실수도 하나도 안했고, 점수가 생각보다 잘 나와서 2차에는 갈 것 같다. 상의 색은 7월 4일에 결과가 발표하는 대로 이 글 맨 마지막 부분을 수정할 것이다(수정 완료).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4점은 쉬웠고, 킬러 문제가 6점이 아닌 5점에 배치된 느낌이었다. 그리고 킬러 문제라고 하더라도 기존 킬러 문제만큼 어려운 문제는 딱히 없었던 것 같다. 수올 공부를 평소에 열심히 한 친구가 컨디션까지 좋았다면 만점도 노려볼만한 시험이었던 것 같고, 금컷은 90점대에서 형성될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1교시하고 2교시 둘다 3분씩만 더 있었으면 95점인데 시험에서 만약이라는 가정은 별로 좋지 않은 거 같아서 그렇게 아쉽지는 않다. 오랜만에 잡생각 없이 수학문제 푸니까 재미있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20문항을 다 적기 귀찮아서 아래에는 내가 틀린 문제와 어려웠을 법한 문제들만 골라 풀이를 적었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 내가 틀린 문제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 4점 조합 - Q) A 3개 B 2개 C 2개를 나열하는데, A끼리 인접하지 않는 경우의 수는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A) A들 사이사이에 문자를 배치하는 경우의 수 4H2, B 2개와 C 2개를 나열하는 경우의 수는 4C2여서 곱하면 60이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4H2가 뭐가 어려운 거라고 중복조합 안쓰고 손으로 개수 세다가 2개 빼먹어서 답을 48이라고 썼다. 이걸 시험이 끝나고 3초 후에 깨달았다. 나는 바보...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 5점 정수론 - Q) 21^9508+21^5+1=소수*소수인데, 이 중 작은 소수를 구하여라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A) f(x)=x^9508+x^5+1에서 mod x^2+x+1을 취하자. x^3==1 (mod x^2+x+1)이므로 f(x)==0 (mod x^2+x+1)이다. 따라서 답은 21^2+21+1=463이다. 솔직히 수올 공부를 꾸준히 했으면 눈에 보였을 것 같다. 찍어서 맞힌 친구도 있던데 그 친구는 좀 대단한 것 같다. 암튼 현재 내 실력에서는 틀릴만한 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 5점 기하 - Q) 삼각형 ABC가 있고, AB=4, AC=9, BC=12이다. AB의 중점을 D, AC의 2:1 내분점을 E라고 하고 ADE의 외접원을 그리자. A에서 BC에 평행하게 그은 직선이 ADE의 외접원과 만나는 점을 F라고 했을 때, 30AF를 구하여라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A) 개인적으로 난이도 상 제일 어려웠던 문제인 것 같다. FD와 FE를 연장해서 BC와 만나는 점을 D', E'이라고 하자. 여기서 각 잘 돌려주면 ADE랑 FD'E'이랑 합동이고 FDE랑 ABC가 합동이다. 여기서 길이 잘 잡아서 미지수 2개 넣고 톨레미 정리까지 쓰면 식 2개 미지수 2개라 풀린다. 풀이 완성이 끝나기 1분 30초 전에 되어서 계산을 못해서 못풀었다. 시험 끝나고 3분 정도 투자하니 답이 나왔고, 답은 115가 나온다. (사실 시험 중에는 톨레미 정리라는 말은 생각이 안나고 톨레미 정리 식만 생각이 났다 ㅎㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 어려운 문제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 틀린 21^9508 문제와 기하 문제가 가장 어려웠던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 문제에서 어려웠을 법한 문제는 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 29m^2+34mn+10n^2=170의 정수해 개수는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(5m+3)^2+(2m+n)^2=170=13^2+1^2=11^2+7^2이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 이 식이 쉽게 보여서 쉬웠다고 생각했는데 막상 돌이켜보면 이를 완전제곱식으로 못 묶었을 수도 있겠구나... 라는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 정15각형에 색칠하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간공을 R, 파란공을 B라고 하자. 정삼각형이 5개 있는데, 이 중 하나의 정삼각형에만 R이 2개 들어간다. 이 정삼각형을 기준으로 잡고, 이 중 B를 1번 공으로 잡자. 그러면 원순열이 직순열로 정렬이 된다. 그리고 나머지 정삼각형에 공 색을 정하는 경우의 수가 3^4가지인데, 이 중 B로 인해 정오각형이 생기는 2^4만 빼주면 된다. 따라서 81-16=65이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 아폴로니우스 원 각 돌리기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 아폴로니우스 원 그리고 각 돌리면 된다. 개인적으로 1교시 중에 제일 어려운 문제였던 거 같고, 나도 끝나기 8분 전에 풀었다. 아폴로니우스 원을 생각했냐 못했냐의 차이인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. f, g, h 함수 세기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;g, h의 뜻이 뭔지 알면 쉽게 셀 수 있다. g의 가능성이 8개라는 것은 f(1)=1, f(2)=2, f(3)=3 중 정확히 2개만 성립한다는 것이고, h의 가능성이 12개라는 것은 f(x)=1, f(y)=2, f(z)=3인 x, y, z의 개수 중 하나는 3개이고 나머지 2개는 2개라는 뜻이다. 여기까지 파악했으면 세는 것은 어렵지 않다. 답은 132이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 결과 (7월 4일 수정됨)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1083&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GZk8u/btrGn9cfkYe/zeBrH9cmztyKUM0p5Mmf1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GZk8u/btrGn9cfkYe/zeBrH9cmztyKUM0p5Mmf1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GZk8u/btrGn9cfkYe/zeBrH9cmztyKUM0p5Mmf1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGZk8u%2FbtrGn9cfkYe%2FzeBrH9cmztyKUM0p5Mmf1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1083&quot; height=&quot;758&quot; data-origin-width=&quot;1083&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;86점이 금...? 상위 5%인 것을 보니 턱걸이 금상인 것 같다. 극상위권 중에 5점 2개 4점 1개를 틀린 사람은 나밖에 없었을 것 같은데 운 안 좋았으면 상 색 하나 내려갔을 것 같다. 준비를 하나도 안한 시험 치고 과분한 결과라 당황스럽긴 한데, 그래도 좋은 결과니까 기분 좋게 넘어가려고 한다. 물론 시간 거의 안 들이기는 했지만 그래도 돈과 시간 들여서 보는 시험이니 2차 시험은 조금이라도 준비해서 보는 것이 좋을 것 같다.&lt;/p&gt;</description>
      <category>대회 후기</category>
      <category>1차</category>
      <category>2022 KMO 1차</category>
      <category>KMO</category>
      <category>KMO 2022</category>
      <category>KMO 2022 가우스부</category>
      <category>가우스부</category>
      <category>고등부 가우스부</category>
      <category>금상</category>
      <category>수학 올림피아드</category>
      <category>한국 수학 올림피아드</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/41</guid>
      <comments>https://unorderedmap.tistory.com/41#entry41comment</comments>
      <pubDate>Mon, 30 May 2022 12:43:57 +0900</pubDate>
    </item>
    <item>
      <title>한국정보올림피아드(KOI 2022) 1차 시험 후기</title>
      <link>https://unorderedmap.tistory.com/40</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;총점 : 1교시 139 + 2교시 213 = 352 (가채점 결과 3.467%, 77등, 은상)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;세 줄 요약&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 1교시가 어려웠다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 2교시가 많이 망한줄 알았으나 생각만큼 망한건 아니었다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 2교시 3번은 &lt;a href=&quot;https://www.acmicpc.net/problem/16182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Dumae&lt;/a&gt;와 거의 같은 문제이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년에 &lt;a href=&quot;https://www.acmicpc.net/problem/21762&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;플5짜리 문자열 문제&lt;/a&gt;를 못 풀고 1차 탑골드를 놓쳐 많이 아쉬웠다. 비버챌린지는 196.xx점이어서 실수한 소문제 2개에서만 감점이 있었기에, 이번에도 2교시가 지난 해와 비슷한 난이도로 나오면 만점에 가까운 점수로 탑골드를 노릴 수 있다고 생각하고 시험에 들어갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1교시. 비버챌린지형(200점) - 킬러 문제 및 배점이 큰 문제에는 굵은 글씨를 해두었다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;총평 - 단답형 12번이 어려웠고, 시뮬레이션형 문제 17, 19, 20번 난이도가 작년 기준 가장 어려운 문제의 난이도 정도였던 것 같다. 즉, 킬러 문제의 개수에 따라 시간이 부족했고, 내 점수도 50점 이상 떨어졌다. 평균도 많이 떨어질 것 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 달리기&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CDAEB 또는 DCAEB만 가능하여 A가 항상 3등이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 거스름돈&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7원 9원 11원 세 가지 종류의 동전으로 x원 이상의 정수인 금액을 모두 만들 수 있을 때, 최소의 x&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 노가다 해보면 x=27&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 블록 쌓기&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록을 쌓는데, 쌓는 맞닿는 면 중에 밑에 있는 면이 위에 있는 면을 완전히 포함해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2,5,8), (4,4,9), (3,2,4)를 가장 높이 쌓는 문제인데, 가장 큰 9를 버리고 8+4+4=16을 해버리면 최대이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 점 잇기&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원주 상의 8개의 점을 선분이 교차하지 않도록 4개의 선분으로 짝짓는 경우의 수를 구하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카탈란 수 문제인 것을 알고 있었고, C4=14라는 것을 알고 있어서 바로 고르고 넘어갔다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 구슬 뽑기 &lt;b&gt;-7점&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건부 확률 문제이다. P(A교B)/P(A)를 해주었어야 하는데 P(A)를 구해놓고도 나누는 것을 까먹어서 틀렸다. 그래서 원래 답은 2/3인데 1/3을 답으로 제출해버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 -7점&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 막대기 세우기&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bad Hair Day의 조건을 만족하는 배치를 찾으면 되는데, 6이 각각 3번째, 4번째, 5번째 위치에 있을 때 경우의 수를 구하여 더해주면 105가지가 된다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 세 수의 곱&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12개의 정수로 이루어진 수열에서 서로 다른 세 수를 곱하여 그 곱이 최대가 되도록 하는 문제이다. 절댓값이 가장 큰 걸 다 곱해버리면 운 좋게 양수가 되어서 쓰면 된다. 답은 (-6)*6*(-7)=252&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 2310&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 다른 세 양의 정수 a&amp;lt;b&amp;lt;c에 대해 abc=2310인 a, b, c의 순서쌍을 구하는 것이다. 2310=2*3*5*7*11이어서 답은 (3^5-3)/(3!)=40이다. 빼기 3을 해준 이유는 a, b, c 중 2개가 1이 되는 경우가 3번 있기 때문이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 초콜릿&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14칸짜리 초콜릿이 있는데 중간에 결함이 있는 칸이 4칸 있다. 초콜릿은 2개 또는 3개로 잘라서 판매할 수 있는데, 결함이 있는 초콜릿과 없는 초콜릿은 가격이 다르다. 해당 초콜릿을 팔아서 얻을 수 있는 최대 금액을 묻는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순 손DP이다. 8번째 칸까지는 대충 아무렇게나 잘라도 금액이 똑같고, 말짱한 초콜릿 3개인 9, 10, 11을 하나로 묶어 판매하는 것이 중요한 부분이다. 답은 25이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 순열 거듭제곱&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 순열 사이클 분할을 하여 주기를 구해주면 된다. 순열 사이클이 총 4개가 묶이고, 이에 따라 m에 대한 정보를 얻을 수 있다. 내가 얻은 정보는 m=1(mod 2), m=0(mod 3), m=3(mod 4), m=1(mod 5)였고 이를 연립하면 m=51(mod 60)이 나온다. 따라서 m의 최솟값은 51이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 동전 게임&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7의 배수 칸은 동전을 놓을 수 없으며, 0번 칸에 놓인 동전을 1, 2, 3칸을 영희와 철수가 번갈아 옮겨 k번째 칸에 도착하면 승리한다. k=22, k=24, k=32일때 필승 전략이 있는 사람을 묻는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제 역시 초콜릿과 같이 손DP이다. 게임이론 문제를 많이 풀어본 사람이라면 나와 똑같이 접근했을 것 같다. dp[k]를 k번째 칸에 도착하면 승리하는 게임에서 필승 전략을 가지고 있는 사람이라고 할 때, 일반적인 경우 dp[k]=dp[k-4]이다. 하지만 k-4번째 칸이 7의 배수인 경우 dp[k]=dp[k-5]가 된다. 초항 몇 개 구하고 이 식을 가지고 모든 32번째 dp값까지 빠르게 구할 수 있다. (그런데 나는 중간에 뇌절을 해서 빠르게,,, 는 못 구했다.) 답은 영희, 철수, 영희이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;12. 아이템 배치(15점) -15점&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단답형 마지막 문제인만큼 어려웠다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biDxaK/btrCivhxYfk/ZBWGbbc1vZTcDm1ZL8IPnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biDxaK/btrCivhxYfk/ZBWGbbc1vZTcDm1ZL8IPnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biDxaK/btrCivhxYfk/ZBWGbbc1vZTcDm1ZL8IPnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiDxaK%2FbtrCivhxYfk%2FZBWGbbc1vZTcDm1ZL8IPnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;327&quot; height=&quot;284&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 생긴 7*8 격자의 빈칸 46개에 ITEM을 적절히 설치하여, 시작-&amp;gt;끝으로 가는 모든 최단 경로에 ITEM이 정확히 1개만 되도록하는 경우의 수를 구하는 문제이다. X표시가 되어있는 구간은 방문할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 x행 y열이라고 부르면 x+y가 같은 곳끼리만 생각해주면 되고, 테트리스 S자 블록과 Z자 블록으로 막혀있는 부분만 따로 고려해주면 된다. 그리고 5행 2열과 6행 4열은 절대 방문할 수 없는 곳이므로, ITEM의 여부가 중요하지 않다. 따라서 마지막 구한 답에 *4를 해주어야한다. 나는 대충 이 풀이와 비슷한 것을 떠올리긴 했으나 시간이 오래걸릴 것 같아 나중으로 미루었고, 결국 풀지 못해 784라고 찍었다. 답은 888이다. 풀려고 노력했으면 풀 수는 있었겠으나, 시간이 좀 오래걸렸을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 -15점&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 한붓 그리기&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwho9A/btrCiaY1wjK/iq2GoKL1VlMs9tuHVXDN80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwho9A/btrCiaY1wjK/iq2GoKL1VlMs9tuHVXDN80/img.png&quot; data-alt=&quot;13&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwho9A/btrCiaY1wjK/iq2GoKL1VlMs9tuHVXDN80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwho9A%2FbtrCiaY1wjK%2Fiq2GoKL1VlMs9tuHVXDN80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;419&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;13&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;한붓 그리기의 가능 조건은 차수가 홀수인 정점이 2개 또는 0개라는 사실은 잘 알려져있다. 여기서는 간선 3개를 적절히 그어 차수가 홀수인 정점을 0개로 만들어줄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 수열 만들기&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0으로 초기화된 수열과 타깃 수열이 있을 때, 원하는 구간에 원하는 수를 더하는 것을 반복하여 타깃 수열을 만드는 것이 목표이다. 이때, 더하는 행위를 최소화해야한다. 답은 10회로, 생각보다 너무 많아서 좀 고민했지만 더 이상 줄일 수 없을 것 같아 그냥 넘겼다. [3, 5, 2] 같은 것이 있었다면 많은 사람이 틀렸을 것 같다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 트리 순회&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mI2tD/btrCboxuQlF/irF3WGvbW88QSeVc0KuwP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mI2tD/btrCboxuQlF/irF3WGvbW88QSeVc0KuwP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mI2tD/btrCboxuQlF/irF3WGvbW88QSeVc0KuwP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmI2tD%2FbtrCboxuQlF%2FirF3WGvbW88QSeVc0KuwP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;726&quot; height=&quot;537&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;트리에서 이동을 18번하여 갈 수 있는 최대 정점의 수를 구하는 문제이다. 일반적으로 하면 13회가 나오길래 답은 14회겠구나, 생각하고 열심히 돌리다보니 14개가 나왔다. 이 트리의 센트로이드가 딱 봐도 눈에 보이는데, 그 점에서 출발하는 가장 긴 경로가 4이길래 트리의 중심에서 딱 4만큼의 이동횟수만 남기는 것을 목표로 했더니 쉽게 나왔다. &lt;a href=&quot;https://codeforces.com/profile/leinad2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;친구&lt;/a&gt; 말로는 이러한 형태의 모든 문제에서 트리의 지름을 지나는 데에는 1번의 이동만 사용하고, 그렇지 않은 지점을 지날 때는 2번의 이동을 사용해주면 된다고 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 돌무더기&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A에 32개의 돌, B에 33개의 돌이 있다. 나는 A-=1, A-=2, B-=1을 할 수 있고 컴퓨터는 A-=1, B-=1, B-=2를 할 수 있다. 연산을 번갈아 적용하여, A와 B가 모두 0이 되도록 만드는 사람이 이긴다. 대충 내가 A의 홀짝성을 짝수로 조절할 수 있기에, A는 홀짝성만 조절해주면서 B를 빼주는 전략을 써야겠다고 생각했다. 대충 몇 번 해보면 전략을 알겠지, 하고 슥슥 해보았더니 2번만에 이겼다. 정확한 전략은 고민해보지 않아서 모르겠다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;17. 최대공약수(12점) -12점&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wdqLX/btrCiuCWAyj/Kbq7NnW3xn5PGy1SaDtT6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wdqLX/btrCiuCWAyj/Kbq7NnW3xn5PGy1SaDtT6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wdqLX/btrCiuCWAyj/Kbq7NnW3xn5PGy1SaDtT6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwdqLX%2FbtrCiuCWAyj%2FKbq7NnW3xn5PGy1SaDtT6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;323&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;여기부터 약간 문제가 어지러워지기 시작했다. 일단 300번을 눌러야하는 문제가 나왔고, 유클리드 호제법을 그냥 써주면 300번 안에 문제가 풀리지 않는다. A=홀수*(2^8)이고 B=홀수*(2^7)이라는 사실을 알 수 있고, 이에 따라 A, B를 모두 홀수로 만들어준 뒤 최대공약수를 구하고 2^7을 곱해주면 된다. 여기까지는 접근을 했는데, 그 뒤로가 조금 어려워서 난 이 문제를 풀지 못했다. 최적으로 하는 방법은 기본 유클리드 호제법과 동일하게 하되, A-=B를 시행하고 짝수가 된 A를 홀수가 될때까지 나눠주는 것이라고 한다. B-=A를 적용한 이후에도 동일하다. 이를 반복하면 2XX번의 연산 끝에 최대공약수를 구할 수 있다고 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;18. 거짓말(13점)&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0wCmu/btrB8WPfylg/pnA5dNYHdVCXvzTMrJTQnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0wCmu/btrB8WPfylg/pnA5dNYHdVCXvzTMrJTQnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0wCmu/btrB8WPfylg/pnA5dNYHdVCXvzTMrJTQnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0wCmu%2FbtrB8WPfylg%2FpnA5dNYHdVCXvzTMrJTQnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;552&quot; height=&quot;216&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;9명의 사람은 참말쟁이 또는 거짓말쟁이이다. 각 사람한테 A VS B를 물어볼 수 있으며, 이는 A와 B가 같은 유형의 사람인가? 라는 질문이다. 이때 자신에 대한 질문은 할 수 없으며, A와 B 역시 달라야한다. 9명에게 동시에 질문이 전송되며, 대답을 통해 9명 모두의 유형을 맞히면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번부터 7번까지 8 VS 9를 물어보고, 8번과 9번에게는 1 VS 2를 물어봄으로써 해결할 수 있다. 8번과 9번에게 같은 질문을 물어봤으므로 두 사람의 대답이 같으면 8=9, 다르면 8!=9이다. 이를 통해 1~7까지의 유형을 알 수 있고, 1과 2의 유형을 알았으므로 8과 9의 유형도 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배점이 높은 것치고는 매우 쉬운 문제였는데, 많은 친구들이 틀렸다. 보통 비버챌린지형 문제들은 채점이 여러 번 가능한데, 이 문제는 1번만 제출할 수 있기 때문이다. 이 조건을 보지 않고 한 번 시도해봤다가 13점을 허무하게 날린 친구들이 많다. 답이 정해져있어 질문에 대한 답을 듣게 되면 사람들의 정보를 얻는 것이므로 1번만 제출할 수 있도록 설정해놓아야 하는 것은 맞으나, 조건을 못 보고 틀린 친구들이 많아서 마음이 좀 아팠다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;19. 격자판 장식하기(15점) -15점&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UVFfI/btrCdHpNuTw/ljoLvzqmXn5zr6K9fHX6VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UVFfI/btrCdHpNuTw/ljoLvzqmXn5zr6K9fHX6VK/img.png&quot; data-alt=&quot;답을 시험 끝나고 찾았다. 즉, 나는 시험 중에 이 문제를 풀지 못했다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UVFfI/btrCdHpNuTw/ljoLvzqmXn5zr6K9fHX6VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUVFfI%2FbtrCdHpNuTw%2FljoLvzqmXn5zr6K9fHX6VK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;459&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;답을 시험 끝나고 찾았다. 즉, 나는 시험 중에 이 문제를 풀지 못했다.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;대각선을 원하는 방향으로 설정하고, 각 점을 동그라미, 네모, 다이아몬드 중 원하는 모양으로 바꾸어서 선분으로 이어진 두 모양은 항상 다르도록 배치하는 문제였다. 생각보다 쉽지 않았고, 많은 친구들이 틀린 것으로 안다. 나도 시험 끝나고 답을 찾았고, 답은 위와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 최대한 다이아몬드를 만드는 전략을 사용했다. 위의 답에 맨 마지막 줄을 제외하고 보면 나는 계속 다이아몬드 모양을 사용했는데, 이 이유는 단 하나의 모양으로도 절반 이상의 점을 커버할 수 있기 때문이었다. 이에 맞게 오른쪽을 잘 디자인해주면 문제가 어렵지 않게 풀린다. 이 문제에 시간을 조금만 더 투자하면 풀었을 것 같은데, 시간이 없어서 20번을 푸느라 못 풀었다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;20. 괄호 문자열(20점) -12점&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;괄호 문자열에서 swap 연산을 최소로 적용하여 주어진 구간이 모두 올바른 괄호 문자열이 되도록 하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rtReO/btrCgKM41wH/l5EvSDsxQGrZ5qvB6jOJFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rtReO/btrCgKM41wH/l5EvSDsxQGrZ5qvB6jOJFk/img.png&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;271&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.3766%; margin-right: 10px;&quot; data-widthpercent=&quot;51&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rtReO/btrCgKM41wH/l5EvSDsxQGrZ5qvB6jOJFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrtReO%2FbtrCgKM41wH%2Fl5EvSDsxQGrZ5qvB6jOJFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;498&quot; height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnQ2pC/btrCaupZSh4/mwCqNG7DdCIJDZPwtlt5i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnQ2pC/btrCaupZSh4/mwCqNG7DdCIJDZPwtlt5i0/img.png&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;273&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49&quot; style=&quot;width: 48.4009%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnQ2pC/btrCaupZSh4/mwCqNG7DdCIJDZPwtlt5i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnQ2pC%2FbtrCaupZSh4%2FmwCqNG7DdCIJDZPwtlt5i0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yMtCk/btrB5ASSrV0/CFxRi7Dm3r4HXEZVzP34e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yMtCk/btrB5ASSrV0/CFxRi7Dm3r4HXEZVzP34e0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yMtCk/btrB5ASSrV0/CFxRi7Dm3r4HXEZVzP34e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyMtCk%2FbtrB5ASSrV0%2FCFxRi7Dm3r4HXEZVzP34e0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;486&quot; height=&quot;316&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 없어서 문제 1, 2, 3 밖에 못풀었고, 답은 각각 3번씩이다. 나는 첫 번째 문제를 4번을 사용하여 풀어 문제 1을 틀렸고, 문제 2와 3만 맞았다. 최적 전략은 잘 모르겠고, 열심히 노가다하다보면 답이 나오는 문제인 것 같다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 200-7-12-15-15-12=139점을 받았다. 작년에 비해서, 그리고 나의 비버챌린지 실력에 비해서 많이 부족한 점수였다. 사실 비버챌린지는 무조건 만점을 맞고 들어간다는 생각이었는데, 생각보다 점수가 너무 안나와서 멘탈이 좀 깨졌다. 2교시에 영향을 준 것 같기도 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2교시. 코딩형(300점)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;총평 - 1번 2번은 실버 이하인 것 같고, 평소 실버 문제 정도는 충분히 푸는 실력인데 이 문제들을 못 풀었다면 컨디션을 원망해야할 것 같다. 3번이 조금 어려웠는데, 원래 있는 문제와 비슷하다고 하다. 게다가 특정 케이스를 고려하지 않아도 문제가 풀린다. 즉, 데이터가 약해서 문제의 정풀을 고려하지 않고도 맞은 사람이 있을 것 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 피하자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 요약 : TL 2초, ML 1024MiB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열에서 인접한 원소끼리 swap하는 연산을 최소로 하여 홀수와 짝수를 분리할 때, swap 연산의 최소 횟수를 구하는 문제이다. 배열의 길이 N&amp;lt;=100만이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이 :&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홀수의 개수를 c라 하자. 홀수를 앞으로 뺀다면 홀수들의 인덱스는 1, 2, ..., c가 될 것이다. 이러면 홀수들의 최소 이동횟수는 (원래 홀수들의 인덱스 합) - (1+2+...+c)가 될 것이고, 이를 O(N)에 계산할 수 있다. 반대로 홀수를 뒤로 뺀다면 홀수들의 인덱스는 N, N-1, ..., N-c+1이 될 것이다. 이러면 홀수들의 최소 이동횟수는 (N+(N-1)+...+(N-c+1))-(원래 홀수들의 인덱스 합)이 될 것이고, 이 역시 O(N)에 계산할 수 있다. 두 수 중에 작은 것을 출력해주면 된다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. ABBC&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 요약 : TL 3초, ML 1024MiB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A, B, C로만 이루어진 문자열에서 어떤 A를 그 A보다 뒤에 있는 B와 함께 지우거나, 어떤 B를 그 B보다 뒤에 있는 C와 함께 지울 수 있다. 최대로 많이 지우고 싶을때, 지우는 횟수를 구하는 문제이다. 문자열의 길이 |S|&amp;lt;=30만이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이 :&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B는 무조건 지워지므로, B를 어떻게 지울지가 핵심이다. 우선 앞에서부터 보며 (BC)를 몇 개나 지울 수 있는지 최대 개수를 센다. 또한 뒤에서부터 보며 (AB)를 몇 개나 지울 수 있는지 최대 개수를 센다. 두 개수를 합한 것이 답이 되며, 두 개수가 합쳐서 B의 개수를 넘어간다면 B를 모두 지울 수 있다는 의미이므로 B의 개수를 출력해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 풀이가 가능한 이유가 직관적으로 이해되지 않을 수도 있는데, 우선 어떤 B에 대해서 묶어 지울 수 있는 C가 존재한다면 이 C는 그 B보다 더 앞에 있는 B와도 지워줄 수 있다. 즉, 더 앞에 있는 B는 C에 대해 더 유리한 고지에 있다. 반대로, 더 뒤에 있는 B는 A에 대해 더 유리한 고지에 있다. 따라서, 지울 수 있다면, (BC)를 지울 때는 앞에 있는 B부터 차례차례 지우고, (AB)를 지울 때는 뒤에 있는 B부터 차례차례 지워주는 것이 최적이 됨이 당연하다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 1번을 푸는 데에 5분, 2번을 푸는 데에 8분이 걸렸다. 13분만에 200점은 나쁘지 않은 스타트라고 생각했고, 솔직히 여기까지는 실버 이하인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 보급&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 요약 : TL 4초, ML 1024MiB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N개의 정점이 있고, N개의 정점의 x좌표와 y좌표는 각각 1~N 중에 하나이다. 또한 N개의 정점의 x좌표와 y좌표에는 1~N이 각각 한 번씩 나타난다. 하루에 한 정점, 총 N일 동안 N개의 정점에 보급을 줄건데, x[i]&amp;lt;x[j], y[i]&amp;lt;y[j]일 때 i번 정점은 j번 정점보다 보급을 먼저 받아야한다. 또한 각 정점은 보급을 받을 수 있는 기간이 a[i]~b[i]로 정해져있다. 이 때 N개의 정점에 모두 보급을 줄 수 있겠는가? YES면 방법도 같이 출력하고, NO면 NO라고 출력하는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이 :&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dumae와 같은 문제라서 그 문제를 알고 있던 친구 2명은 문제를 각각 30분, 50분만에 풀었다고 한다. (물론 Dumae를 알고도 문제를 못푼 국대 친구 2명도 있고, Dumae를 모르고도 이 문제를 푼 친구도 봤다.) 나도 풀이를 정확히 알지는 못해 대충만 설명하자면, a와 b를 현실성 있는 범위로 압축할 수 있다. 즉, 나보다 x좌표와 y좌표가 모두 작은 정점의 a가 나의 a보다 크다면, 나의 a를 상향조정할 수 있다. 마찬가지로 b도 하향조정할 수 있는 경우가 생기고, 이에 따라 조정이 끝난 후 그리디하게 보급 일자를 주면 된다고 한다. 원본 문제에서는 간선의 개수가 10만 스케일이지만 이 문제는 간선이 최대 N^2개 존재할 수 있기에 세그 스위핑을 해야 문제를 해결할 수 있다고 한다. D5 문제인 만큼 풀이가 한 번에 이해가 가지 않아서, 나중에 Dumae를 풀어봐야겠다고 느꼈다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 내 주변 친구들이 3번을 다 풀었고, 엄청 쉬운 문제라고 하길래 완전 망한 줄 알고 기분이 안 좋았는데, 생각보다 푼 친구들이 많지 않아서 2차는 갈 수 있을 것 같다. 괜히 망한 줄 알고 답답한 마음에 화도 내고 짜증도 냈는데, 나를 옆에서 지켜보며 불편해하셨을 부모님께 죄송한 마음이 든다. 1차 때 비록 만족할만한 결과는 얻지 못했으나 2차 때 PS감을 끌어올린 상태에서 시험을 본다면 더 좋은 결과를 기대할 수 있을 것 같다.&lt;/p&gt;</description>
      <category>대회 후기</category>
      <category>1차</category>
      <category>2022 KOI 1차</category>
      <category>2022 정보 올림피아드 1차</category>
      <category>Koi</category>
      <category>KOI 2022</category>
      <category>정보올림피아드</category>
      <category>정보올림피아드 1차</category>
      <category>정올</category>
      <category>한국정보올림피아드</category>
      <category>한국정올</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/40</guid>
      <comments>https://unorderedmap.tistory.com/40#entry40comment</comments>
      <pubDate>Mon, 16 May 2022 13:10:51 +0900</pubDate>
    </item>
    <item>
      <title>solved.ac 다이아1 달성 후기</title>
      <link>https://unorderedmap.tistory.com/39</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C7zv3/btrvngLx694/ELE8DvGYEtrHGy8trgMacK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C7zv3/btrvngLx694/ELE8DvGYEtrHGy8trgMacK/img.png&quot; data-alt=&quot;solved.ac 개인 티어 D1을 달성했다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C7zv3/btrvngLx694/ELE8DvGYEtrHGy8trgMacK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC7zv3%2FbtrvngLx694%2FELE8DvGYEtrHGy8trgMacK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1227&quot; height=&quot;448&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;solved.ac 개인 티어 D1을 달성했다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다이아2가 된지 한 달 정도 후에 다이아1에 올라왔다. 사실 학기 시작 전에 달성했는데 글 작성하는 것을 까먹어서 작성을 안하고 있었다. 학기가 시작한만큼 앞으로는 PS에 투자할 시간이 거의 없을 것 같다. 브론즈 풀면서 스트릭 유지나 해야할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이팅 상승 요인은 PST + PBS + Splay Tree로 요약할 수 있겠다. 특히 스플레이 트리에 큰 흥미를 느껴 거의 10문제 정도 푼거 같은데, 스플레이 트리 기본 티어가 D3이라 레이팅이 빠르게 올랐던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 루5를 찍을 일이 있을지조차 모르겠다. 여름방학에 PS를 하더라도 새로운 알고리즘을 배우고 어려운 문제를 풀기 보다는 랜덤 디펜스를 할 것 같다. 곧 있을 국대 선발고사 2차 준비나 잘 해야할 것 같다.&lt;/p&gt;</description>
      <category>기타</category>
      <category>BOJ</category>
      <category>D1</category>
      <category>solved.ac</category>
      <category>unordered_map</category>
      <category>vector</category>
      <category>다이아1</category>
      <category>백준</category>
      <category>솔브닥</category>
      <author>unordered_map</author>
      <guid isPermaLink="true">https://unorderedmap.tistory.com/39</guid>
      <comments>https://unorderedmap.tistory.com/39#entry39comment</comments>
      <pubDate>Mon, 7 Mar 2022 08:35:44 +0900</pubDate>
    </item>
  </channel>
</rss>