<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>박트리</title>
    <link>https://baactree.tistory.com/</link>
    <description>알고리즘 공부해욧!</description>
    <language>ko</language>
    <pubDate>Thu, 21 May 2026 10:39:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>박트리</managingEditor>
    <image>
      <title>박트리</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2417B04558D26F601C</url>
      <link>https://baactree.tistory.com</link>
    </image>
    <item>
      <title>삼성전자 SW 역량테스트 B형, 어떻게 공부해야하나요?</title>
      <link>https://baactree.tistory.com/53</link>
      <description>&lt;p&gt;A형을 통과한 대학교 재학생 or 졸업생 분들이나 삼성전자 SW직군에 입사한 사원분들은 SW 역량테스트 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;B형&lt;/span&gt; 일명 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;Professional 등급&lt;/span&gt;을 취득하고자 시험을 볼 것이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 포스팅은 B형(Pro) 시험을 보는 사람들에게 시험 유형에 대한 정보와 공부하면 좋을 배경지식 그리고 내가 생각하는 B형&amp;nbsp;테스트의 통과 컷, 풀어보면 좋을 문제&amp;nbsp;등을 작성하고자 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;들어가기 앞서 뇌피셜 B형 난이도는 100 * A형 난이도이다. 상당한 난이도 갭이 있음을 인지하고 공부하면 되겠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;** 2018-10-31&amp;nbsp;초안 작성&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(0, 0, 0);&quot;&gt;배경지식&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;먼저 공부해야하는 배경지식들에 대해 적어보겠다. B형 시험부터는 STL이 사용불가능 하므로 자주 사용하는 STL의 경우 구현법을 알아야 하겠다. [ stl 구현한 &lt;a href=&quot;https://github.com/baactree/Algorithm/tree/master/Stl&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;깃허브&lt;/a&gt; // 변수명이 이상하거나 중요함수 몇개가 없는 등 업데이트가 더 필요하다. ]&lt;/p&gt;&lt;p&gt;시험장에서 시험 시스템 로그인 하면 화면 11시 방향에 레퍼런스 코드? or&amp;nbsp;레퍼런스가&amp;nbsp;있다 그 안에 꽤 많은 코드들이 있으므로 굳이 암기까지 할 필요는 없고 동작 과정을 이해하고 응용하는 법을 많이 공부하는 것이 좋다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;-- 필수&lt;/p&gt;&lt;ul style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;해싱&amp;nbsp;: B형보는데 해싱을 모르고 응용할 줄 모르면 바로 혀 깨물어야됨&lt;/li&gt;&lt;li&gt;링크드리스트 구현&amp;nbsp;: 링크드리스트 쓰는 문제 진짜 많이 나온다&lt;/li&gt;&lt;li&gt;트리 구현&amp;nbsp;: 자식 수가 안 정해진 트리를 구현하는 법은 무적권 알아야 됨&lt;/li&gt;&lt;li&gt;메모이제이션&amp;nbsp;: 한 번 계산한 값을 다시 계산안하는 개념이 있어야됨&lt;/li&gt;&lt;li&gt;비트마스킹&amp;nbsp;: 변수를 쪼개서 공간복잡도를 아끼면서 저장하거나 다양한 비트 연산을 이용해서 코드를 최적화 하는 방법들&lt;/li&gt;&lt;li&gt;이분탐색 : 핵 기본적인 개념&lt;/li&gt;&lt;li&gt;분할정복 : 가끔식 출제 되는듯&lt;/li&gt;&lt;li&gt;Sort : 소팅 알고리즘은 퀵소트는 필수고 여유있으면 머지, 계수, 기수까지는 공부해보자.&lt;/li&gt;&lt;li&gt;Heap : 힙도 막상 필요할 때가 있음 스케쥴링 문제라던가 스케쥴링 문제라던가&lt;/li&gt;&lt;li&gt;Queue, Stack : B형 시험보러 갈껀데 큐 스택 못짜면 반성해야됨&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;-- 알아두면 좋은&amp;nbsp;것들&lt;/p&gt;&lt;ul style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;Trie : 문자열 관련된 문제에서 강력함.&amp;nbsp;거의 Trie나 해싱이 정해인 정도 Trie에 해싱을 끼얹거나&lt;/li&gt;&lt;li&gt;LCA(Lowest Common Ancestor) : 디렉토리 구조나 가계도 이런 유형에서 등장 할 만한 기법&lt;/li&gt;&lt;li&gt;BST(Binary Search Tree) : bbst까지는 너무 어렵고 bst 정도? 사실 힙으로 어느정도 커버가 되는 부분&lt;/li&gt;&lt;li&gt;Segment Tree : 알아두면 쓸 일이 언젠가 생기지 않을까?&lt;/li&gt;&lt;li&gt;Sqrt Decompisition : 개념은 쉽고 유용한데 쓸 일이 많은 유형인지는 잘 모르겠다&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;B형(Pro)&amp;nbsp;유형 파악&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;배경지식을 충분히 공부했다면 B형(Pro)&amp;nbsp;문제가 어떤식으로 나오는지 유형을 파악해보자.&amp;nbsp;먼저&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://swexpertacademy.com/main/main.do&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-size: 13.3333px;&quot;&gt;SWEA&lt;/a&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt; 사이트에서 &lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px; color: rgb(9, 0, 255);&quot;&gt;[블록 부품 맞추기&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px; color: rgb(9, 0, 255);&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt; 라는 문제를 검색해보자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이 문제를 읽어보면 알 수 있듯이 우리는 주어진 문제에 맞게 어떠한 함수를 1개 이상 만드는 것이 문제의 목표이고 main 함수를 임의로 수정할 수 없다. 우리가 제출한 코드는 어떠한 함수의 호출 횟수를 최소화 하거나, 문제에서 정의한 스코어 산정 방식으로 다양하게 점수가 계산된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[블록 부품 맞추기]&lt;/span&gt; 문제를 4시간을 맞춰 풀어 보도록 하자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 247px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9951CA3B5BCC3ED101&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9951CA3B5BCC3ED101&quot; width=&quot;247&quot; height=&quot;204&quot; filename=&quot;다운로드 (1).jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이 문제를 잘 읽어보면 3만개의 블록들을 절약비용의 합을&amp;nbsp;최대화하도록 2개씩 매칭 시키는 문제이다. 곰곰히 생각해보면 어떤 한 모양에 대해서 이 모양과 매칭되는 모양도 정확히 한 개 존재하고 그렇다면 해당하는 모양끼리 가장 긴(최대 기둥&amp;nbsp;높이) 모양부터 서로 매칭시켜주면 된다는 것을 알 수있다. &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 여기까지가 풀이에 대한 기초적 접근 ]&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;먼저 주어진 블록을 길이(최대&amp;nbsp;기둥 높이) 내림차순으로 정렬하고 해당하는 i번째 블록에 대해 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ &lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;이것에 대응되는 상대편 블록모양을 찾아야함 ]&lt;/span&gt;, &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ &lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;해당하는 블록모양중 가장 긴 길이의 블록을 구해야함 ]&lt;/span&gt; 이 2가지 테스크를 해결해야 한다. 그리고 찾은 2 블록을 서로 매칭시켜주면 해결된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 대응되는 상대편 블록&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;모양 찾기 ] &lt;/span&gt;주어진 블록에서&amp;nbsp;base를 빼면 [0,2] 값을 가지는 4x4 행렬로 바뀌고 이 모양과 결합 될 수 있는 모양은 일단 수직이든 수평이든 한 번 flip한 다음 90도씩 4번 rotate 한 모양 들이다.&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt; [ 2차원 배열 flip과 rotate하는 법도 알아두면 좋다. ]&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px; color: rgb(9, 0, 255);&quot;&gt;[ 대응되는&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;블록모양 중 가장 긴 길이의 블록을 구하기&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;]&lt;/span&gt; 를 해결하는 가장 naive 하는 방법은 주어진 블록들을 전부 순회하면서[ O(N) ] 내가 지금 구한 대응되는 모양과 일치하는지[ O(4*4) ] 를 하나하나 구하는 방법이다. 이런 방식으로 구현하면 전체 시간복잡도가 대략 O((N^2)*4*(4*4)) 정도 나오게 되는데&amp;nbsp;너무 느리다!! &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 나중에 언급할 팁이지만 실제로 Pro 시험장이라면 먼저 이런 시간복잡도를 구현하고 Output이 정확히 나오는걸 확인한 후 최적화 작업을&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;시작하는 것이 좋다!! ]&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://gist.github.com/baactree/152464f0d0a2a2d9adac41274c01d680&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ 여기까지 구현한 코드 ]&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;가장 먼저 접근 할만한 최적화는 4x4 2차원 배열을 변수 하나로 치환시키는 것이다. 해당하는 배열은 [0,2]값을 가지는 16개의 1차원 배열로 생각할 수 있고 3진수로 접근하면 3^16 가지의 수를 표현하는 것이니 10진수로 [0,3^16) 에 해당하는 값으로 2차원 배열을 치환할 수 있다. 이렇게 하면 2개의 모양이 같은지 확인할 때 단순히&amp;nbsp;변수의 동등비교로 해결가능하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 우리가 블록모양을 변수 하나로 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[해싱]&lt;/span&gt;이 가능하다면 대응되는 모양찾기를 더 빠르게 할 접근법이 많아진다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;첫번째 접근법은 또다른 1차원 배열에 {블록모양, 최대 기둥 높이, 인덱스} tuple 로 저장해두고 소팅하면 이후 같은 블록 모양 구간[ l, r ] 을 이분탐색으로 쉽게 찾을 수 있고 그 중 가장 긴 기둥을 포함하는 블록모양부터 매칭시켜주면 된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;두번째 접근법은 vector&amp;lt;int&amp;gt; vec[3^16] 과 같은 2차원 동적배열로&amp;nbsp;O(1)에&amp;nbsp;해당 벡터에 접근해 가장 긴&amp;nbsp;기둥을 포함하는 블록모양부터 매칭시켜주면 된다. 여기서 약간의 팁은 애초에 push할 때 작은 블록부터 넣으면 자연스럽게 맨 뒤가 가장 긴 블록으므로 맨 뒤부터 pop해주면 된다. 따라서 vector 가 아닌 list나 stack을 사용해도 무방하다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;세번째 접근법은 3^16이 너무 커서 vector&amp;lt;int&amp;gt; vec[3^16] 선언되지 않을 때 우리는 map&amp;lt;int,vector&amp;lt;int&amp;gt; &amp;gt;&amp;nbsp;같은 자료구조를 만들면 좋겠지만 map을&amp;nbsp;구현하는 것이&amp;nbsp;너무나도 어려울 때 사용하는 방법이다. 비교적 간단한 방법이고 흔히 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 좌표압축 ]&lt;/span&gt; 이라고 알려진 웰노운인데 주어진 데이터의 개수가 총 N개이고 데이터의 범위가 [0,3^16) 인 상황이므로 결국 주어진 데이터들을 다시 넘버링을 하면 최악 [0,N) 범위안에서 다시 넘버링 할 수 있음을 알 수 있다. 이러한 방식으로 다시 넘버링 하고 결국 vector&amp;lt;int&amp;gt; vec[N] 에 해당하는 공간만 선언해 준뒤 해당하는 위치를 이분탐색을 통해 O(logN)에 찾고 두번째 접근법과 같은 방식으로 해결 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;위 같은 상황에서 할 수 있는 네번째 접근법은 [0,3^16) 에 해당하는 수를 또다시 해싱해서 충분히 전역변수로 선언할 만한 크기를 만들고, 같은 방식으로 구현하면 해당하는 위치를 찾는데 평균(1)에 찾을 수 있고 위와 같은 방식으로 문제를 해결 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;나는 세번째 방법으로 구현하였고, 내가 구현한 코드는 &lt;a href=&quot;https://gist.github.com/baactree/2e02b406712eeb03814bb70c171d1e6a&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;여기에&lt;/a&gt; 올려두었다.. 실제 제출 할 때&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;sort와 vector는 내 &lt;a href=&quot;https://github.com/baactree/Algorithm/tree/master/Stl&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;깃허브&lt;/a&gt;에 있는 코드를 그냥 복붙했고 1300ms 의 시간으로 통과했다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이 문제에 대한 개인적인 B형(Pro) 등급&amp;nbsp;통과 기준은 2000ms&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;~ 3000ms &lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;라고 생각한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;B형(Pro)이 어떤 방식으로 출제되고 어떻게 평가하는지 이해가 되는가? 정리를 해보자면 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[단순히 문제의&amp;nbsp;조건에 맞게 구현하면 통과 가능했던 A형]&lt;/span&gt;과 달리 B형 에서는 다양한 방법으로 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;O(n) 복잡도의 코드를 O(logn) 혹은 O(1) 로 최적화 하는 과정]&lt;/span&gt;이 필요하다. 그리고 대다수의 B형 문제들이 상당한 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[구현력]&lt;/span&gt; 을 요구하고 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이 문제를 4시간 안에 풀이조차 생각하지 못했다면 자료구조에 대한 응용력 혹은 문제를 접근하는 방법 자체가 많이 부족하다. 이 부분에 초점을 맞춰 우선 공부하고 만약 대략적인 구조는 설계했으나 구현을 완벽히 못했다면 구현력을 충분히 연습하는게 좋다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;풀어볼 만한 문제들&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;기본적으로 탄탄한 구현력이 기반이 되어야 다양한 접근법들을 시도해보고 깨질 수 있다. 구현력을 조지는 문제들을 많이 풀어보는게 도움이 된다. 물론 해당하는 문제를 하루종일 세월아~~~ 내ㅜ월으러어얼아 ~~ 푸는게 아니라 정확히 시간을 정하고 딱 풀어야한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 200px; width: 200px; height: 211px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998FF94B5BD8713422&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998FF94B5BD8713422&quot; width=&quot;200&quot; height=&quot;211&quot; filename=&quot;KakaoTalk_20181030_130602115.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 200px; height: 211px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp;** 추천 받습니다. ( B형(Pro)와 유사하거나 구현량이 으마으마한 문제들 )&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3425&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ BOJ 고스택 3425 ]&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5373&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ BOJ 큐빙 5373 ]&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;https://oj.uz/problem/view/CEOI13_treasure2&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ oj.uz 보물 찾기 ]&lt;/a&gt;&amp;nbsp;** 아이디어 문제&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;a href=&quot;https://oj.uz/problem/view/balkan11_cmp&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ oj.uz cmp ]&lt;/a&gt; ** 아이디어 문제&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15778&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ BOJ Yut Nori 15778 ]&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15949&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ BOJ Piet 15949 ]&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2680&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ BOJ QR 2680 ]&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15827&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ BOJ 그날의 너 15827 ]&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11743&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ BOJ Iceberg Orders 11743 ]&lt;/a&gt;&amp;nbsp;** 아이디어 + 구현 , 어려움&lt;/p&gt;&lt;h2 class=&quot;page-banner-title&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; line-height: 28px; color: rgb(68, 68, 68); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; font-size: 22px; text-transform: uppercase;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;실전 B형(Pro) Tip!!&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;평소에 삼성전자 소프트웨어 역량테스트(공채)를 보는 지인들에게는 항상 문제를 30분 이해 및 설계하고, 30분 코딩하고, 30분 디버깅해서 총 3시간 동안 2문제를 풀어라 해당시간이 넘어가면 화장실을 가던가, 다른 문제를 보라고 조언을 하는 편이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;마찬가지로 B형 시험에 있어서 세워야할 계획은 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 1시간 문제이해 및 설계, 2시간 구현 및 디버깅으로 정확한 아웃풋 줄력, 1시간 최적화 ]&lt;/span&gt; 이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;먼저 문제를 꼼꼼히 이해하고 최대한 Naive한 방법부터 접근해 보는 것이 좋다. 처음부터 가능한 복잡도까지 생각하기보다 비교적 쉽게가능한 복잡도를 먼저 생각하고 여기서 더 최적화할 방법이 존재하는지 1시간 정도 까지는 충분히 고민해본다. 문제를 난독증으로 잘못 읽을 수도 있으니 1시간쯤지나면 기분전환으루다가 화장실 한 번 다녀오고(만약 인개원이라면 화장실이 일단 기분전환 엄청됨 ㅇㅇ), 문제를 다시 꼼꼼히 읽은 뒤 지금까지 생각한 뒤 가장 좋은 방법으로 구현을 시작하자!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;충분한 시간동안 구현을 마치고 문제에서 요구하는 아웃풋이 정확하게 나왔다면 이제 충분한 시간을 가지고 최적화를 시도해보자. 블록 부품 맞추기를 할 때와 같이 무언가를 전처리 한다거나 정렬을 해서 이분탐색을 한다거나 해싱을 해서 어떤것을 좀더 빨리 찾고 빨리 접근 한다는 식이라서 찾고 바꾸고 계산하는 것들은&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt; [ 전처리, 메모이제이션, 이분탐색, 해싱 ]&lt;/span&gt; 선에서 거의 다 끝난다. 가으으아으끔 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 트라이, LCA, 세그먼트 트리 ]&lt;/span&gt; 를 사용하는 정도의 최적화도 필요할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이렇게 Naive 구현과 최적화부분을 나누어서 코딩을 하게 되면 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 디버깅 하는 시간 ]&lt;/span&gt; 도 그만큼 줄어들게 된다. 당연하게도 구현부분에서 이미 정확한 Output이 나왔음이 보장되기 때문에 최적화 부분에서 뭘 바꿧는데 이제 안나오는건지 집중해서 디버깅 할 수 있기 때문이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이와 같은 이유로 평소에 STL을 많이 사용하는 STL충들은&lt;strike&gt;[ 벌레충이 아니라 충성할 충 ]&lt;/strike&gt;&amp;nbsp; 로컬에서는 먼저 STL을 사용해서 구현을 완료하고 Output이 보장되면 그 때 남은 STL들을 구현하는 방식으로 코딩하는 것이 디버깅하기 쉽다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;지인들 중에서는 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ &lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;Output이 나왔다고 그냥 제출하고 바로 퇴실하는 경우 ]&lt;/span&gt; 도 있었다. 물론 탈락이다. 맨 처음부터 합격선까지 최적화 했을 수도 있지만 본인이 그정도 클라쑤가 아니라고 생각된다면 내가 잘 풀었으면 다른사람들도 잘 풀었을 것이다 라고 생각하고, 남은 시간동안 정말 여러방면으로 생각해서 최적화를 시도해보도록 하자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;4시간 동안 잘 구현하고 충분히 최적화 했다면 좋은 결과가 있기를 기원하도록 하자~ 내가 좋아하는 말중에 [ 진인사대천명 ]이라는 말이 있는데 충분히 노력했드아아아면 결과는 좋게 나올것이다!!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;다양한 기법들&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;사실 본문에서 블록 부품 맞추기를 풀면서 간단하게 이용했던 4x4 2차원 배열을 변수로 치환하는 기법이나 좌표압축 기법은 사실 사용해 보지 않았다면 시험장에서 바로 떠올리기엔 어려운 기법들이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;이 챕터에서는 B형(Pro) 등급에서 사용될 만한 다양한 기법들을 정리하겠다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;** 생각나는대로 추가하겠읍니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;[ 차원&amp;nbsp;압축 : 모든 데이터는 (해당하는 데이터를 표현하는데 필요한 총 비트 수) / ( sizeof(int) or sizeof(long long) )로 압축가능 합니다. ]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;EX) 2차원 그리드에서 2x2 영역을 1x1 크기로 압축, 길이가 10인 1차원 배열을 길이&amp;nbsp;1로 압축 ....&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;[ 좌표 압축 : 데이터의 범위가 너무 크다면 등장하는 데이터들을 [0,N) 범위로 다시 넘버링 할 수 있습니다. ]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;[ 랜덤 엑세스 링크드 리스트 : 링크드 리스트의 단점이 랜덤 엑세스가 불가능하다는 것인데 해당하는 노드를 특정할 수 있고( id 라던지 value가 distinct 하다던지 )&amp;nbsp;그 값이 충분히 작다면 링크드 리스트에 존재하는 모든 노드에 대해 해당하는 key를 전역변수로 노드 포인터를 저장하여 O(1)로 해당하는 노드에 접근 할 수 있습니다. ]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;EX) 랜덤 엑세스 + 중간 삽입, 삭제가 O(1)로 자유로운 자료구조 , BUT 해당하는 key의 값의 범위가 전역변수로 선언할 만큼 충분히 작아야함.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[ 이분탐색 + 휴리스틱 :&amp;nbsp;데이터가 유니폼하게 분포되어 있는 상황에서는 정확한 이분탐색이 가장 효율적일 것입니다. 하지만 데이터를 분석해봤을 때 유니폼하지 않고 특정값에 몰려있다면 확률적으로 해당부분을 포함하게 적절히 쪼개는 것이 좀 더 효율적임을 알 수 있읍니다.&amp;nbsp;]&lt;/p&gt;</description>
      <category>etc.</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/53</guid>
      <comments>https://baactree.tistory.com/53#entry53comment</comments>
      <pubDate>Sun, 21 Oct 2018 17:14:34 +0900</pubDate>
    </item>
    <item>
      <title>알고리즘 공부, 어떻게 해야하나요?</title>
      <link>https://baactree.tistory.com/52</link>
      <description>&lt;p&gt;오랜만에 정상적인 포스팅을 쓴다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;메일로 가장 많이 물어 보는 질문들이&amp;nbsp;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[알고리즘 공부 어떻게 해야하나요? 어떻게 하셨어요? 뭘 공부해야 할 지 모르겠어요.]&lt;/span&gt; 와 같은 질문들이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위 질문에 가장 심플한 답변은 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[이런 이런 주제의 알고리즘을 공부하시고 문제를 많이 푸세요.]&lt;/span&gt; 가 끝이다.&lt;/p&gt;&lt;p&gt;사실 이러한 질문과 답변이 모두 우문우답이기 때문에 조금 더 진지하게 초보자의 관점에서 알고리즘&amp;nbsp;공부를&amp;nbsp;어떻게 시작하고 어떻게 노력하면 좋을지에 대해 자세히 써볼 예정이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;** 이 글은 [2018-10-31] 에 마지막으로 수정되었습니다. 독자가 읽는 시점의 상황과는 많은 부분이 상이 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;** 이 글은 매우 주관적이고 편협하고 얕은 지식으로 작성되었습니다. 분문과 다른 의견이나 틀린 부분이 있다면 메일 또는 댓글로 편하게 말씀해 주세요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;** 이 글은 제 머리속에 있는 생각과 경험들을 두서없이 작성하였습니다. 맞춤법이나 문단 모양과 그림 추가와 같은 부가적인 부분은 능력과 의지가 되는 만큼 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;** 이 글에서 언급하는 알고리즘이란&amp;nbsp;PS(Problem Solving) 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;** 적어도 하나 이상의 프로그래밍 언어를 알아야 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;* PS가 뭐에요? 왜 PS 공부해야하나요?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;본문에서 언급하는 PS는 현실 세계의 다양한 문제들을 간략화 추상화하여 정의하고,&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;일반적으로&lt;/span&gt;&amp;nbsp;어떠한&amp;nbsp;입력 데이터에 따른 출력 데이터를 특정한 알고리즘으로 구현된 컴퓨터 프로그램을 통해 얻어내는 과정이라고 생각한다. 현실 세계의 다양한 문제에 비해 구하고자 하는 바가 명확하고, 입력 되는 데이터의 특징이 구체적이며 출력하고자&amp;nbsp;하는 데이터가 명확한 편이다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;최근 기업들에서 PS를 입사 프로세스내에 추가하여 코딩테스트 또는 역량테스트라는 이름으로 시행되고&amp;nbsp;꽤 높은 중요도를 차지하고 있다. 초중고 소프트웨어 교육에 있어서도 최근 초점이 단순 코딩 방식을 지양하고, 컴퓨팅사고력, 협력적 문제 해결방식을 지향하고자 하는 등 PS에 대한 관심이 높아지고 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;그에 따라 많은 수의 알고리즘 대회가 생겨나고 알고리즘 강의 사이트 들이 우후죽순 생겨나고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;그 사람의 구조적 생각능력 문제해결능력 및 구현능력등 다양한 소프트웨어 능력을 단시간에 쉽게 평가할 수 있는 방법이 PS 능력을 보는 것이고 따라서 최근 다양한 기업들이 이 방법을 채택하고 있다고 생각한다. 앞으로 더욱 관심받고 중요해질 PS 분야에 대해서 미리 앞서 나가는 것이 중요하다고 생각한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;* PS를 잘하려면 무엇을 공부해야 하는 거에요?&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;내가 생각하는 PS를 잘하기 위한 3요소를 소개하겠다 아마도 대부분의 기업에서 입사 프로세스로 코딩테스트를 보면서 지원자를 평가하고자하는 이유도 이 3요소가 포함된다고 생각된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 0, 0);&quot;&gt;1. 구현력&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 0, 0);&quot;&gt;2. 문제해결능력&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 0, 0);&quot;&gt;3. 배경지식&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;** 앞으로 본문에서 계속 언급될 3요소이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 구현력&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;구현력은 본인이 생각한 알고리즘을 그대로 소스코드로 구현하는 과정이다. 프로그램 순서도를 명확하게 만들고 사용해야 될 변수나 함수의 데이터 타입등을 올바르게 정하는 과정이라고 생각할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;이 능력이 부족하면 문제를 풀 때 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[대충 어떻게 하라는지는 알겠는데 코딩하려니까 한 줄도 못 짜겠다.]&lt;/span&gt; 라던지 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[내가 지금 뭘 짜고 있는지 모르겠다.] [코드가 1000바이트가 넘어가면 엄두가 안난다.] [디버깅을 못 하겠다.]&lt;/span&gt; 라는 생각을 느끼게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;구현력을 향상 시키기 위해서는&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt; [내가 어떤 프로그램을 만들고자 하는지]&lt;/span&gt;를 명확히 해야한다. &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[무엇을 입력받아 어디에 저장하고 어떤 과정을 거쳐서 중간 결과로 무엇을 얻고 최종적으로 이런 결과물을 이렇게 출력한다.]&lt;/span&gt; 와 같이 순서도를 먼저 적고 이제 디테일하게 어떤 데이터 타입 또는 자료구조에 저장할 지 생각하는 것을 차근 차근 종이에 적어가면서 연습하는게 좋다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;천천히 적으면서 순서도를 명확히 그리는 연습을 자주 하면 곧 머리속으로 하게 되고 나아가 코딩하면서 동시에 생각하는 수준까지 될 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 문제해결능력&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;내가 알고있는 알고리즘, 자료구조, 다양한 테크닉등을 지금 당면한 문제에 맞게 변형하여 적용하는 것, 문제를 창의적인 시각에서 접근하여 해결하는 능력은 가장 향상시키기 어려운 능력중 하나이다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;이 능력이 부족하면 문제를 풀 때&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt; [ 어떻게 접근해야 할 지 모른다. ] [그래서 솔루션을 열었는데 내가 아는 알고리즘, 자료구조 ]&lt;/span&gt; 인 상황이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;이 능력을 키우기 위해서는 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[양질의 문제(30분 ~ 2시간 고민하면 해결 가능한 문제)를 푸는 것]&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;[이전에 본인이 접근한 다양한 방법들을 잘 정리해 두는 것]&lt;/span&gt;이 좋다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;중위권에서 상위권으로 가고자 할 때 발목을 잡는게 결국 문제해결능력이므로 정말 벽을 뚫는다는 느낌으로 노력이 필요한 시점이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 배경지식&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;기초적인 프로그래밍 문법 및 알고리즘, 자료구조 등을 아는 것 선형대수학과 확률 등과 같이 기본적인 수학적 지식을 아는 것과 같은 능력이다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;이 능력이 부족하면 문제를 풀 때 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 어떻게 접근할지 몰라서 솔루션을 열었는데 생판 모르던 외계어가 적혀져 있다. ]&lt;/span&gt; 인 상황이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;제일 공부하기 쉬운 능력이고 시중에 있는 거의 모든 알고리즘 역량테스트 대비 강의 또는 책은 배경지식에 대해서 설명하고 있다. 제일 알려주기도 쉬운 능력이다. 다양한 매체를 통해 쉽게 공부할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;상위권에 도달하기 위해서는 굉장히 지엽적인 자료구조나 알고리즘을&amp;nbsp;공부하기도 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;대부분의 알고리즘 입문자들은 단지 배경지식만 공부하고 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 열심히 공부했는데 문제를 왜 못 푸는지 모르겠다. ] [ 나는 빡대가리인 것 같다 ]&lt;/span&gt;&amp;nbsp; 등과 같은 한탄을 한다. &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[&amp;nbsp;강의도 돈주고 사서 듣고 책도 사서 읽었는데 실력이 늘지 않는다. ]&lt;/span&gt; 와 같은 고민을 하고 있는 사람이라면 문제는 배경지식이 아니라 다른 능력이 아니었을까? 하고 생각을 해보도록 하자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;이제 대충 본인이 어떤 부분이 부족하고 어떤 부분을 중점적으로 노력해야겠는지 이해가 되는가?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;그렇다면 본인이 PS를 왜 공부하는지 그 목표에 따라 공부 계획을 세워보자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;* 저는 입사 코딩테스트 통과가 목표에요!&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;내가 치뤄본 입사 코딩테스트는 삼성전자, 카카오, 구글, 라인이고 또 직접 치뤄보지 않은 다른 기업들에 대해서도 여기저기서 들은 바로 생각해 보건데 입사 코딩테스트에서 평가하고자 하는 능력은 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;[ 기초적인 배경지식 + 구현력 ]&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;이라고 생각한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;기초적인 배경지식으로는 즈어엉말 기본적인 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;코딩 문법] [시,공간 복잡도 분석]&amp;nbsp;&lt;/span&gt;을 아는 것, &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[배열, 트리, 그래프, 힙, BST, 스택, 큐]&lt;/span&gt;와 같은 즈어어엉말 기본적인 자료구조를 아는 것, &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[DFS, BFS, 정렬, 백트래킹, DP, 분할정복, 최단거리]&lt;/span&gt; 와&amp;nbsp;같은 학부수준에서 안 배웠다면 교과과정이 문제가 있을것 같은 기초적인 알고리즘을 아는 것에 해당한다. 추가로 어떤 배경지식을 공부해야 하는지 궁금하다면 &lt;a href=&quot;http://baactree.tistory.com/14&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;여기&lt;/a&gt; 를 참고해 알고리즘 초급, 중급에 해당 되는 내용을 공부해 보자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;온라인 강의나 블로그 또는 서적을 통해 배경지식에 대한 공부를 충분히 했다면 이제 실전으로 문제를 풀어 보자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;삼성전자의 경우 [ &lt;a href=&quot;https://swexpertacademy.com/main/userpage/code/userProblemBoxDetail.do?probBoxId=AV5Po0AqAPwDFAUq&amp;amp;leftPage=1&amp;amp;curPage=userpage&amp;amp;userId=SWEAC&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;여기&lt;/a&gt; 또는 &lt;a href=&quot;https://www.acmicpc.net/workbook/view/1152&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;여기&lt;/a&gt; ] 를 풀어 보는 것으로도 충분하다. 시간을 측정하면서 풀어보도록 하자.&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt; [몇 분에 문제를 이해했고, 몇분 동안 풀이를 생각했고, 몇 분동안 코딩했으며, 몇 분동안 디버깅 했는지]&lt;/span&gt; 이러한 부분 부분들을 기록하면서 내가 어떤 부분이 구체적으로 부족한지를 인지하고 그 부분에 대해 좀 더 중점적으로 노력하는 것이 필요하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;카카오의 경우 [ &lt;a href=&quot;https://programmers.co.kr/learn/challenges?tab=all_challenges&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;여기&lt;/a&gt; ] 에서 풀어 보는 것이 좋다. 비교적 더 높은 배경지식을 요구하는 경우도 있고, 문자열 파싱 문제가 꽤 많이 나온다.&lt;/p&gt;&lt;p&gt;마찬가지로 위와 같은 방법으로 공부해 보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;타 기업같은 경우도 매우 고차원적인 배경지식을 요구하고 심오한 문제해결능력을 요구하는 문제를 보지 못했다. BOJ&amp;nbsp;같은 경우에는 좋은 문제들이 많지만 문제가 난이도 순으로 정렬이 되어 있지 않기 때문에&amp;nbsp;찾아서 풀기 어려운 구조이다.&amp;nbsp;SWEA 에서 난이도 3 ~ 5 문제를 많이 풀어 보는 방법으로 공부해 보자.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;만약 배경지식을 충분히 공부했음에도 불구하고 문제를 접근조차 하지 못하겠다면 본인은 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;[컴퓨팅&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;적 사고력]&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;이 부족한 상황이다. 문제해결능력의 하위호환인데 이 능력이 부족하면 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 재귀함수, 완전탐색, 백트래킹, BFS, 분할정복 ]&lt;/span&gt; 에 대한 이해 자체가 어렵다. 이해하지를 못해서 문제에&amp;nbsp;적용할 수 도 없는것이다. &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[컴퓨터가 1초에 1억번의 연산을 할 수 있음]&lt;/span&gt;을 이해하고 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[따라서 어떤 시간 복잡도 까지는 가능]&lt;/span&gt; 함을 이해하고, &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[메모리 제한이 몇 이므로 배열을 어느정도 까지는 할당 할 수 있겠다]&lt;/span&gt; 라는 생각을 할 수 있어야 하고, 재귀함수를 트리형태로&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;[어떻게 진입하고 무엇을 하고 무엇을 리턴하고 종료되는지]&lt;/span&gt;를 그릴 수 있어야한다. 완전탐색에 있어서 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[상태공간의 정의]&lt;/span&gt;를 할 수 있어야 하고 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[현재 상태에서 다음 상태로 갈 수 있는 방법이 몇가지 인지]&lt;/span&gt;를 이해하고 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[최종 종료 상태와 최초 진입 상태]&lt;/span&gt; 가 무엇인지 이해하고 그림으로 표현할 수 있어야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;* 위와 같이 컴퓨팅적 사고력을 기르기 위한 문제 추천은 BOJ 모든 [별찍기]와 [n과 m] 시리즈이다. 또는 SWEA 난이도 1 ~ 2 문제를 많이 풀어 보자.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;만약 접근은 충분히 잘했는데 구현하는데 시간이 너무 오래 걸리고 디버깅하는데 시간을 많이 쓴다면, 본인이 자주 한 구현 실수들을 정리하고 대략적인 순서도를 그리고 자주 사용하는 부분을 함수로 템플릿화를 하는 것을 연습하는 것이 좋다. 근본적으로 코드길이가 줄어들어야 실수할 확률이 줄어든다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;* 디버깅 팁같은 경우는 나중에 여력이 된다면 적어 보겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;* 저는 삼성전자 SW 역량테스트 등급 취득이 목표에요!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;삼성전자 SW 역량테스트는 &lt;a href=&quot;https://swexpertacademy.com/main/capacityTest/main.do&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;여기서&lt;/a&gt; 설명이 되어있고 A,B,C 형으로 나뉘어져 있다. A형은 입사 코딩테스트와 동일하므로 이 챕터에서는 B형과 C형에 대해서만 집중적으로 다룰것이다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이 챕터는 내용이 길어질 것으로 예상되므로, 따로 작성하겠다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;a href=&quot;http://baactree.tistory.com/53&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;삼성전자 SW 역량테스트 B&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;a href=&quot;http://baactree.tistory.com/53&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;형, 어떻게 공부해야하나요?&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;삼성전자 SW 역량테스트 C&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;형, 어떻게 공부해야하나요?&lt;/span&gt;&lt;b style=&quot;font-size: 13.3333px;&quot;&gt;(아직 작성안함 곧 쓸꺼임)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;* 저는 PS 대회나가서 수상하는게 목표에요! 그냥 PS 재밌어요!&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;대학생, 일반인 및 초중고등학생을 포함해서 국내&amp;nbsp;또는 세계적인 대회에 나가고, 수상하는게 목표인 사람들을 위해 적어보겠다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;** 앞으로 Codeforces 레이팅 기준을 많이 사용할 건데 코드포스는 &lt;a href=&quot;http://codeforces.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;이런&lt;/a&gt; 사이트 이고 주기적으로 대회가 올라와서 전세계 사람들과 경쟁하고 레이팅을 매겨주는 시스템이다. 몇 번 참가해보면 대략적인 난이도와 이 정도 레이팅이면 어느정도 수준이구나를 알 수 있으므로 기준으로&amp;nbsp;사용하겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;나는 2000점 쯤으로 보라돌이 중간따리이다. 이미 오렌지 이상의 실력을 가진 분들은 너그러운 마음으로 읽어주길&amp;nbsp;바란다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;그리고 내 생각에 보라돌이 ~ 오렌지 와리가리 하는 실력이 국내 대학생 큰 대회(SCPC, KAKAO 등) 에서 수상권이라고 생각한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;대상 독자는 민트 지박령, 민트 ~ 블루 왔다갓다랑 블루 지박령, 블루 ~ 퍼플 와리가리 하는 사람들이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;충분히 많은 코드포스 대회를 돌렸는데 &lt;span style=&quot;color: rgb(34, 116, 28);&quot;&gt;그린&lt;/span&gt; 이하에 박제가 되어버렸다면, 아직 영어가 너무 부족하거나 기본적인 코딩능력 및 사고력이 부족하므로 좀 더 쉬운 내용을 찾아보고 공부해보는 것이 좋다고 생각한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;대회하려면 C++ 쓰세요, 보조무기로 Python 쓰세요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일단 시작은 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&lt;a href=&quot;http://book.algospot.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;종만북&lt;/a&gt; &lt;span style=&quot;color: rgb(53, 53, 53);&quot;&gt;사세요&lt;/span&gt;&lt;/span&gt;이다.&lt;/p&gt;&lt;p&gt;배경지식을 늘리는 가장 쉽고 좋은 방법이다 물론 관련 키워드를 블로그를 통해 공부하는 법도 있지만 내가 늙어서 그런가 종이로 보는게 더 학습률이 좋았던 것 같다.&lt;/p&gt;&lt;p&gt;종만북은 처음 읽기 너무 어려운 책이다. 보통 쭉 읽다가 동적계획법2에서 무너지게 된다. 나또한 그랬고&lt;/p&gt;&lt;p&gt;추천하는 챕터 읽는 순서는 [1-8, 10, 14, 16-19, 21-25, 27-32] 먼저 읽고 나머지 부분들은 천천히 읽어보면 된다. 이정도 배경지식만 있어도 퍼플을 가기에 부족함이 없고 추가적으로 알아 둘만한 것은 [Sparse Table, MCMF, Lazy Propagation] 정도가 있을 것 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 구현력과 문제해결능력을 동시에 늘리기 위한 가장 쉬운 방법은 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[백준 랭작]&lt;/span&gt;을 하는 것이다. 가장 주먹구구 방법이기 때문에 시간이 넘치는 사람들만 추천한다. 나같은 경우에는 &lt;a href=&quot;https://www.acmicpc.net/problem/unsolved&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;이곳&lt;/a&gt; 에서 하루에 최소 5문제씩 계속 꾸준히 풀었다. 알고리즘 유형을 알고 문제를 푸는 것과 모르고 푸는 것은 큰 차이가 있고, 매일 풀다보니 시간 짬짬히 남을 때 계속 문제에 대한 고민을 할 수 있어서 학습량이 많았다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;문제를 충분히 많이 풀어서 구현력은 어느정도 자신은 있는데 코드포스만 보면 &lt;span style=&quot;color: rgb(0, 216, 255);&quot;&gt;민트&lt;span style=&quot;color: rgb(33, 33, 33);&quot;&gt;로 수렴한다면&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(33, 33, 33);&quot;&gt;이제 양질의 문제를 풀어서 문제해결능력을 좀 더 키워야 하는 시점이다. 문제해결능력은 위에서 언급했던 바와같이 적당한 시간을 생각하고 푸는 문제를 많이 풀어야 된다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 유사코 실버, COCI, 앳코더 레귤러, 코포Div2-3&amp;nbsp;] &lt;/span&gt;등의 문제를 푸는 양을 늘리고 백준 랭작량을 좀 줄이면 되겠다.&lt;/p&gt;&lt;p&gt;COCI, 앳코더, 코드포스 같은 경우에는 문제가 난이도 순으로 있기 때문에 보통 연습할때 대회 시간내에 풀 수 있는 만큼 풀고 항상 딱 한 문제씩만 더 풀기라는 목표를 가지고 꾸준히 노력해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 공부를 하다가&amp;nbsp;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;블딱이&lt;/span&gt;가 되고 정체가 되었다면, 본인의 코포 현황을 분석해보자. 시간을 풀로 다써서 3-4문제를 풀고&amp;nbsp;블루 정체인지 엄청 빠르게 2-3문제를 풀고 정체인지 풀었는데 시스텟에서 다터지는지, 1번 상황은 구현력을 더 늘려야 되는 시점이다. 다시 랭작 시작하자.&lt;/p&gt;&lt;p&gt;2번 상황은 못 푼 문제의 솔루션을 봤을 때 그 알고리즘이 아는건지 모르는건지 체크하고 접근이 중요한 문제였다면 양질의 문제를 푸는것을 많이 해보자. COCI, 앳코더, 코포 버츄얼을 돌기보다. &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ Div2 C ~ D에 해당하는 문제를 쭉 뽑아서 계속 시간재면서 풀어 보는 것]&lt;/span&gt;이다. 나 같은 경우에는 3번 상황이었는데 코딩할 때 생각을 좀 하면서 코딩하면 비교적 제일 쉽게 해결된다. 예외가 먼지 가장 작을 때 가능한 지 가장 클 때 가능한지 지금 이게 가능한 그리디인지 와 같은 생각~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;코드포스 Div2에서 D까지 빨리 풀거나 시간 채워서 E까지 풀게 된다면 어느순간 &lt;span style=&quot;color: rgb(102, 0, 255);&quot;&gt;보라돌이&lt;/span&gt;가 되어있을 것이다. 이제 보라돌이 부터는 Div1 문제를 풀 수 있게 된다. 따라서 좀 더 고급 알고리즘과 자료구조에 대한 배경지식에 대한 공부가 필요한 시점이 온다. 이 부분에 해당하는 양질의 책은 잘 모르겠고 보통 구글링을 통해서 공부하였다. 다양한 고급 알고리즘 키워드 들을 구글링하여 일주일에 1개 정도 공부하고 연습문제 풀어보는 식으로 익혀보면 좋을 것 같다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;문제해결능력을 키우기 위해서는 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;[ 유사코 골드, IOI, 앳코더 그랜드, 코포Div1, JOI, KOI, 각종 지역 리저널 및 WF ]&lt;/span&gt; 등과 같은 문제를 시간을 많이 가지고 풀어 보는 것이 중요하다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;보통 성장 과정이 [시간이 무한대가 있어도 CDE못 품 -&amp;gt; 시간이 있으면 푸는데 대회중에&amp;nbsp;못 품 -&amp;gt; 대회중에 풀 때도 있음 -&amp;gt; 대회중에 품] 순이다.&lt;/p&gt;&lt;p&gt;Div1에서 보통 매우 빠르게 AB를 빠르게 풀거나 시간을 다써서 AB+[C,D,E] 를 성공한다면 &lt;span style=&quot;color: rgb(255, 187, 0);&quot;&gt;오렌지&lt;/span&gt;&amp;nbsp;-&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;레드&lt;/span&gt;에 진입할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;블루 이상이라면 충분히 국내 프로그래밍 대회 본선을 뚫을 정도는 되기 때문에 다양한 대회에 나가면서 경험을 쌓고 멘탈을 잘 지키도록 하자. 본선에서 다양한 사람들을 보면서 친해지는게 본인의 학습의욕에도 더 도움이되고 임의의 라이벌을 정하는 것도 도움이 될거라고 생각한다. 이후 꾸준히 공부하면서 퍼플-오렌지 구간에 도달해 수상권이 되어 보도록 하자.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr class=&quot;tx-hr-border-2&quot; style=&quot;display:block; border: black 0 none; border-top: black 1px solid; border-bottom: black 3px solid; height: 7px&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;나는 처음에 동아리도 없고 정보도 없어서 &lt;a href=&quot;https://www.acmicpc.net/board/view/2788&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;백준 Slack&lt;/a&gt;을 통해서 정말 많은 도움을 받았고, 혹시 본인 또한 그러한 상황이라면 Slack을 통해 많은 것을 물어보도록 하자 물론 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;[ 상대방은 아무런 대가 없이 본인에게 시간과 노력을 할당하는 행위 ]&lt;/span&gt; 임을 인식하고 서로 존중하도록 하자 &lt;a href=&quot;https://open.kakao.com/o/gjjBYEC&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;카카오톡 오픈 채팅&lt;/a&gt; 또한 유용하다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 포스팅은 아무런 정보없이 알고리즘 공부의 압박을 느끼다 비싸기만한 강의를 수강하고 좋은 결과를 얻지 못하는 많은 사람들을 위해&amp;nbsp;선의로 작성되었으므로 &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;댓글 하나&lt;/span&gt;라도 적고 가도록 하자.&lt;/p&gt;</description>
      <category>etc.</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/52</guid>
      <comments>https://baactree.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 16 Oct 2018 15:57:49 +0900</pubDate>
    </item>
    <item>
      <title>2018 SW교육 페스티벌 디지털 과거 Code+ 후기</title>
      <link>https://baactree.tistory.com/51</link>
      <description>&lt;p&gt;18.10.13. 에 부산 벡스코에서 열린 디지털 과거 Code + 에 참가했다.&lt;/p&gt;&lt;p&gt;부산까지 가는게 너무 귀찮아서 참가할까 말까 많이 고민하다가, 겸사겸사로 고등학교 친구들끼리 부산여행도 가자! 해서 가기로 결심했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;친구 차를 타고 벡스코에 도착해서 다른 애들은 해운대랑 동백섬이나 구경하라고 추천해주고&amp;nbsp;나는 대회장으로 갔다.&lt;/p&gt;&lt;p&gt;기본적으로 2018 SW 교육 페스티벌이 금, 토에 거쳐 진행중이었고 그 행사 중 일부가 디지털 과거라는 느낌이었다.&lt;/p&gt;&lt;p&gt;강의실 같은 곳 한 군데를 빌려서 대회가 진행되었다. 엄청 작지는 않은데 그렇다고 엄청 크지도 않은? 그래도 대회라고 생각하면 좀 작은.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3시간 5문제였고 순위 산정기준이 푼 문제순 마지막 제출이 빠른순이었기 때문에 무적권 빨리 풀어서 입상이라도 하자! 라는 마인드였다.&lt;/p&gt;&lt;p&gt;문제 내용은 공개하지 말라고 하였기에 언급하지 않겠다. 문제들은 예상한 것과 같이 간단한 문제들이 나왔고 빠르게 4문제를 해결했다.&lt;/p&gt;&lt;p&gt;마지막 문제는 읽자 마자 이거 다항시간 풀이 없는 문제인데라고 생각했고 대충 될 것같은 그리디 빠르게 내고 존버하자고 생각했다. 제한시간이 몇초인지도 잘 모르겠어서 시간 다 쓰면서 근사해 찾는 방법들은 재꼈고, 입력 제한도 알 수 없었고,&amp;nbsp;그래서 갓 그리디루다가 비빌려고했다&amp;nbsp;짜피 문제가 이러면 풀든 못 풀든 앞 4문제를 빨리 해결했기때문에 입상은 할 수 있을 것 같았다. 호다닥 파라매트릭 + 멀티셋 그리디로 짜서 냈고 1시간 30분 전후였던것 같다. 이거 내기전에 파라매트릭 + 플로우로 하려다가 다짰는데 ㅇㅖ제가&amp;nbsp;안 나와서 다시 생각했는데 모델링 걍 완전 잘 못한거여서 깔끔하게 지우고 걍 단순 그리디로 다시 짰다. 이거 삽질안했으면 1시간 전에 냈을듯?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그렇게 대회가 끝나고 시상식을 기다렸다. 어떤 문제로 인해(아마 4번 채점기가 이상해서 30분 연장하지 않았을까?) 30분 연장되었고, 5시부터 시상식이 시작되었다. 먼저 4-10등 까지 입상자를 호명하였고, 두근두근했는데 호명이 되지 않아서.. 하 먼가 잘 못한건가 상 못타겠다.. 라고 생각했다. 3등상도 발표되고 2등상도 발표되면서, 흠 한 명, 한 명 상탄사람 제외하면서 1등 그럼 이 사람인가 하면서 혼자 생각했는데 띠요오우오오요오오옹 내 이름을 부르는거임! 진짜 예상도 못해서 띠용 그 자체였다. 개꿀~ 개꿀띠~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; width: 400px; height: 331px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991DDD405BC488BC19&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991DDD405BC488BC19&quot; width=&quot;400&quot; height=&quot;331&quot; filename=&quot;KakaoTalk_20181015_202519307.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 400px; height: 331px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; 이번 대회에 대해서 느낀점과 개인적인 생각을 몇자 적어보자면 우선 이런 대회를 개최해 준 것에 대해 감사하게 생각한다.&amp;nbsp;단점은 먼저 환경에 있어서는 IDE 의 사용을 막았다는 것이다. 처음에는 완전 이해를 못했는데 코다임이라는 회사에 대해서 조금 찾아보니 구름을 통해 웹 IDE 환경을 제공하는 곳이었고, 굳이 IDE가 없어도 우리가 만든 웹 IDE를 사용하면 아무 문제 없을 것 이다. 라고 생각한 듯 싶었다. 하지만 웹 IDE가 단순히 notepad과&amp;nbsp;테케 돌려보는 이상의 기능을 할 수 있는게 없었다. 디버깅과 같은 다양한 도구를 사용하는데 제한이 되었다. 웹 IDE를 사용하고 싶은 사람은 사용하고, 아니라면 본인이 선호하는 IDE를 선택하게 하는 방식이 더 좋다고 생각한다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; 다음은 문제의 퀄리티이다. 이 문제셋 대회로 수상자를 선정하기에 문제가 너무 쉬운 것도 있지만 실제 후원 기업들의 코딩테스트 방식을 가져왔다고 생각하면 난이도는 충분히 이해가 간다. 하지만 문제 설명에 있어서 입력과 출력이 명확하지 않은 부분 문제의 조건이 명확하지 않은 부분 시간, 공간 자원을 얼마나 사용가능한지에 대한 정보가 없는것은 아무리 포장해도 단점이라고 생각된다. 명확한 입력 제한이 주어져야 한다고 생각한다. 나중에 다른 참가자가 질문 했는지 계속해서 문제 추가 조건들이 공지되던데 스무고개도 아니고ㅋㅋㅋ&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; 그리고 4번 문제가 아마도 채점기가 잘못 코딩되어있는 것 같아서 이 점에 대해서 문의를 했는데 전혀 피드백이 없었다. 맞다 아니다의 답변조차 없었음. 마지막으로 5번 문제인데 끝나고 이야기를 들어보니 다항시간 풀이가 없는 문제가 맞았던 것 같고,&amp;nbsp;n*cnt 제한이 2e5인가 그랬던거 같은데 출제자가 optimal이라고 생각한 k값들이 진짜 optimal인지 알 수가 없다. 물론 이런 문제가 나올 수는 있는데 채점방식을 바꿨어야 한다고 생각한다. 참가자가 생각한 optimal k를 찍고 어떻게 나누었는지 출력하면 이 정보를 가지고 그렇게 나누는게 가능한지 먼저 판단하고 이 참가자의 k가 출제자의 optimal보다 얼마나 효율적인지를 채점하는 방식으로 했어야 한다고 생각한다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;내가 더 뛰어난 다른 참가자들에 비해 우수해서 1등을 한 것 도 아니고 단순히 내가 작성한 5번 문제의 그리디 솔루션이 출제자가 생각한 솔루션과 일치 했거나 가장 많은 수의 테케가 맞아서 그런것 같은데 이게 솔직히 돌려돌려돌림판과 다를게 없는 방식이다. 물론 1등해서 개꿀개꿀개꿀띠지만 &quot;좋은&amp;nbsp;대회&quot; 하지는 못 했다고 생각한다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;지속적으로 열리게 될 대회일지 잘 모르겠지만 적어도 코다임을 통해서 소프트웨어 역량테스트를 실시할 후원사들이 문제 검수에 좀 더 많은 자원을 투자한다면 역량테스트가 변별력있고 공정한 채용 프로세스가 될 수 있을 것이라 생각한다. 주제넘은 참견인듯 헤헹 별생각없다 사실ㅋㅋㅋ&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;암튼 수고링~&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>etc./대회 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/51</guid>
      <comments>https://baactree.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 16 Oct 2018 00:32:05 +0900</pubDate>
    </item>
    <item>
      <title>2019 KAKAO BLIND RECRUITMENT 온라인 코딩테스트</title>
      <link>https://baactree.tistory.com/50</link>
      <description>&lt;h2 style=&quot;box-sizing: border-box; margin-top: 0.25rem; margin-bottom: 0px; font-family: roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, &amp;quot;Spoqa Han Sans&amp;quot;, &amp;quot;맑은 고딕&amp;quot;, &amp;quot;malgun gothic&amp;quot;, 돋움, Dotum, sans-serif; line-height: 2.375rem; color: rgb(32, 43, 61); font-size: 32px;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;오늘은 9월 15일~&lt;/p&gt;&lt;p&gt;2019 KAKAO BLIND RECRUITMENT 온라인 코딩테스트에 참가했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;올해 있었던 카카오 코드페스티벌 본선에 참가해서&amp;nbsp;코딩테스트가 면제이지만 한 번 참가해 보고 싶었고&amp;nbsp;&lt;/p&gt;&lt;p&gt;문제들을 풀어본 뒤 접근방법을 포스팅을 해서&amp;nbsp;다른 참가자들에게 도움이 되고자 했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;어제 작년 블라인드 문제들을 풀어보았다. 7문제 5시간에 문자열 파싱문제가 꽤나 나오는 걸 느꼈고 오늘 있을 테스트도&amp;nbsp;&lt;/p&gt;&lt;p&gt;그럴것이라 생각했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1시반 쯤에 꾸물꾸물 일어나 2시 정각부터 테스트를 시작했다. 목표는 2시간 안에 다 푸는것이였는데 3시간 좀 넘게 걸렸다.&lt;/p&gt;&lt;p&gt;4, 5, 6 번에서 자주 안풀어보던 유형이다보니&amp;nbsp;어떻게 구현할지 설계하는 부분에서 너무 머리쓰기 싫어서 집중을 못했던 것 같다.&lt;/p&gt;&lt;p&gt;PS 안 하다보니 집중력이 떨어진드드으읏&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;대충 생각한 난이도는 1,2&amp;lt;3,7&amp;lt;&amp;lt;&amp;lt;6&amp;lt;5&amp;lt;4 정도인것 같고 걍 내 뇌피셜 커트는 4문제이다. (전혀 근거 없음)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1,2,3번은 난이도가 매우 쉬웠고 각각 해결하는데 10분씩 걸렸던 것 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1번 문제는 c++ map 자료구조를 이용해서 각 유저 아이디마다 가장 마지막으로 변경한 닉네임을 저장하였고&lt;/p&gt;&lt;p&gt;다시 이 record를 순회하면서 Enter Leave 명령어에 대해서만 최종 닉네임으로 출력해주면 해결가능하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2번 문제는 문제에서 정의한 바와 같이 실패율을 구하고 n개의 (실패율,스테이지 번호) 원소를 소팅하는 문제이고 적절히 잘 구한뒤에&lt;/p&gt;&lt;p&gt;O(nlogn) 소팅을 이용하면 해결 할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3번 문제는 가능한 속성조합 2^c-1 개에 대해서&amp;nbsp;이 속성조합으로 만든 튜플들이 모두 독립적이고 다른 속성조합의 부분집합이 아닌 경우를 세면 된다.&lt;/p&gt;&lt;p&gt;속성 조합 튜플은 해당하는 속성의 string 원소를 일렬로 붙히는 것으로 간단하게 만들 수 있고 c++ stl set을 이용해서 집합의 크기를 쉽게 셀 수 있다.&lt;/p&gt;&lt;p&gt;모든 조합을 순회 하는 것은 for(int i=1;i&amp;lt;(1&amp;lt;&amp;lt;c);i++) 비트마스킹으로 원소를 표현하는 기법으로 쉽게 순회 가능하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4번 문제는 효율성 테스트를 통과하기 위해선 조금 까다로운 문제인데 무적권 처음 음식부터 마지막 음식까지 한 번씩 먹는걸 한 사이클이라고 생각하면&lt;/p&gt;&lt;p&gt;그리고 이 한 사이클당 먹게되는 음식 수를 length라고 정의 했을 때, length가 바뀌지 않는 동안은 계속해서 사이클을 돌리면서 음식을 먹고 다시 첫번째 음식앞에 서게 되는것이고&lt;/p&gt;&lt;p&gt;이번 사이클에서 이제 음식을 다 먹어서 사라지면 length가 감소하고 다음 사이클부터는 감소된 length씩 k가 감소한다는 구조를 이해하면 문제에 접근 가능하다. 코딩량은 적은 문제이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5번 문제는 주어진 자료를 이용해서 트리를 복원한 뒤 전위, 후위 순회를 리턴해주면 되는 문제이고 현재 높이가 있으면 다음 높이가 항상 정해져 있으므로&lt;/p&gt;&lt;p&gt;다음 높이 층에 대해서 현재 노드가 가질 수 있는 왼쪽 자식의 x범위 내에 임의의 노드가 존재하는지, 오른쪽 자식의 x범위 내에 임의의 노드가 존재하는지를 이분탐색으로 찾아서 노드를 리프노드까지 연결해주면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;6번 문제는 잘 읽고 그대로 구현하면 된다. 예외도 없고 ( 주석도 없고 다른 태그도 없다) 현재 페이지 url 구하고 body 태그에서 링크된 모든 url 구하고 나머지 부분에서 찾아야 되는 word를 모두 찾아 개수를 세어주면 된다.&lt;/p&gt;&lt;p&gt;아마 테케가 약한듯?(글 쓰는 와중에 &amp;lt;a&amp;gt;&amp;lt;/a&amp;gt;태그 사이에 적힌 문장에 대해서는 단어 탐색을 안했는데 정답으로 인정됐다는걸 알아챔, 사실 단어를 찾아야 되는 영역이 불분명하긴 하다.) 노오오오력으로 푸는 문제라고 생각한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;7번 문제는 2x3 또는 3x2 인 영역에서 4칸이 같은 숫자이고 2칸이 0이면서 0인칸 위쪽으로는 모두 0임을 만족하는 영역이 있다면 해당영역을 삭제하는 과정을 더이상 불가능할 때 까지 반복해주면 된다. 삼성 역테에 나올만한 유형.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;전체적으로 특정한 알고리즘을 사용하는 문제는 없었던 것 같고 그렇기에 문자열 파싱문제가 비교적 많이 나오지 않았나 싶다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;개인적으로 아쉬운 부분은 4번 문제 같은 경우에는 코포에 자주 등장하는 유형인데 빠르게 못푼게 아쉽다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;어느정도로 접근방법을 자세히 적을지 감이 안와서 일단 간략하게 적어보았고 코드를 보아도 이해가 안되는 부분은 댓글로 편하게 질문 주십숑&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/baactree/PS/tree/master/kakaoblind2019&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/baactree/PS/tree/master/kakaoblind2019&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>etc./코딩테스트 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/50</guid>
      <comments>https://baactree.tistory.com/50#entry50comment</comments>
      <pubDate>Sat, 15 Sep 2018 19:00:00 +0900</pubDate>
    </item>
    <item>
      <title>카카오 Code Festival 예선 참가 후기</title>
      <link>https://baactree.tistory.com/49</link>
      <description>&lt;p&gt;호에에엥 오늘 카카오 코드 페스티벌 예선전이 열린다.&lt;/p&gt;&lt;p&gt;사실 지금 대회 1시간 30분 정도 남았는데 미리 후기 쓰고 쉬려고 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;작년에는 프로그래머스? 플랫폼에서 대회가 진행되었는데 올해는 BOJ에서 개최되었다.&lt;/p&gt;&lt;p&gt;비교적 친숙한 플랫폼이어서 좋았고 본선도 BOJ에서 하지 않을까 싶다. 하지만 작년 본선 컴퓨타가 리눅스 환경이었는데&lt;/p&gt;&lt;p&gt;코드블럭 폰트가 너무 극혐이라서 웹코딩했는데 올해는 어쩔지 모르겠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;문제들 난이도는 작년보다 어려운 것 같고 올해 본선 진출자는 64명이라고 한다. 현재 글을 쓰는 시점에서는 내가 13등이라 이변이 없지 않는 한 진출하지 않을까 싶다.&lt;/p&gt;&lt;p&gt;체감 난이도는 A=B&amp;lt;D&amp;lt;C&amp;lt;E&amp;lt;&amp;lt;F 인것 같다.&amp;nbsp;간략하게 풀이 적어보겠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A번은 문제 잘 읽고 그대로 구현하는 문제이고 쉽게 하는 방법은 잘 모르겠다. 나는 그냥 다 타이핑했다.&lt;/p&gt;&lt;p&gt;배열크기 잘못잡아서 1WA 맞고 AC받았다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;B번은 K이상 연속하는 구간 잡아서 가장 표준편차가 작은 구간을 찾으면 된다. O(N^3) 으로 그냥 뚝딱뚝했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;C번부터 약간 헬인데 문제에서 주어진 조건문의 길이를 최대한 줄여보자 라는 문제이다.&lt;/p&gt;&lt;p&gt;생각해야 하는 케이스가 좀 많다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;먼저 피연산자가 둘다 정수인 경우에 항상 가능하거나 항상 불가능하다. 항상 불가능하다면 4글자로 false를 표현할 수 있다. (ex: 1==0)&amp;nbsp;&lt;/p&gt;&lt;p&gt;항상 가능하다면 조건문에 영향을 주지 않는 논리식이다. 삭제 가능하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음 ==으로 묶인 단항식은 하나의 컴포넌트로 묶어보자. 이 컴포넌트 내에 정수가 2개 이상 존재하면 항상 불가능이다.&lt;/p&gt;&lt;p&gt;따라서 4글자로 false를 표현 해도 동치이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 후 이 컴포넌트를 표현할 때 필요한 논리식은 컴포넌트의 크기를 n이라고 했을 때 n-1개면 된다. n-1개의 논리식은 해당 컴포넌트에서 단항식의 길이가 가장 작은애를 기준으로&amp;nbsp;잡고 나머지를 다 기준에 연결해주면 된다. 그렇게 하면&amp;nbsp;전체 길이의 합이 최소가 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음으로 ==으로 묶인 컴포넌트 끼리 !=로 서로 다름을 표현해 준다. 두 컴포넌트가 만약 같다면 항상 불가능이다. 두 컴포넌트에 여러개의 !=이 존재하더라도 한번만 연결해주면 된다. 연결 할 때는 각 컴포넌트에서 단항식의 길이가 가장 작은 애 끼리 연결한다.&lt;/p&gt;&lt;p&gt;마지막으로 !=로 연결할 때 예외가 하나 있다. 각 두 컴포넌트에 정수인 단항식이 한 개씩 존재한다면 두 컴포넌트는 !=로 연결하지 않아도 자명하게 다름이 보장된다. 삭제 가능하다.&lt;/p&gt;&lt;p&gt;대충 위와 같은 케이스들을 생각해서 그대로 구현하면 되고 나는 union-find 자료구조에 root가 무적권 단항식의 길이가 가장 작도록 merge했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;D는 체크포인트 끼리 이동가능한지 여부를 판단하는 문제인데 쿼리문제고 슥샥속 보면 왠지 주어진 체크포인트들을 트리로 표현할 수 있을 것 같은 느낌이 강렬하게 드는 문제이다. 각각의 체크포인트에서 다른 모든 체크포인트까지의 거리는 사실 필요 없고 x축,y축으로 인접한 것 총 4개만 간선을 만들어 주면 된다. union-find로 관리하면서 거리가 가장 짧은것 부터 n-1개 간선 뽑으면 된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;위와 같은 방법으로 트리를 만들면 이제 lca 웰노운 문제가 된다. 정점 u부터 정점 v까지 경로상에 가장 가중치가 큰 간선을 구하면 되는 문제로 바뀌고 O(logn) 방법이 잘 알려져 있다. 모르면 공부해 보자.&lt;/p&gt;&lt;p&gt;나는 체력회복하는걸 고려안하고 거리로&amp;nbsp;생각해서 한 번 틀렸다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;E번도 트리에서 으쌰으쌰하는 문제인데 보자마자 pbs(패러럴 바이너리 서치?)로 슥샥속이네 라고 생각했다. 가수 s[i]에 대해서 평균점수가 j를 넘는 최소시간 k[i]를 정의하고 k[i]의 범위&amp;nbsp;le[i],ri[i]를 정의하면 pbs로 뚝딲뚝 풀린다. pbs를 모른다면 공부해보자. 다른 풀이도 있는지는 잘 모르겠다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;배열크기로 1번틀리고 목표치 초과인데 이상으로 생각해서 3번틀렸다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;F번은 주어진 히스토그램에서 L모양 최대 직사각형 만드는 문제이고 못 풀었다. 대충 생각해본 풀이는 임의의 한 수평선 잡아서 거기서 직사각형 그리고 그 직사각형 오른쪽 또는 왼쪽으로 최대 직사각형을 구해 연결하는걸 모든 수평선에 대해서 하면 그게 최대일 것 같은 느낌이 든다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;그래서 이제 어떤 수평선 i의 왼쪽에 연결된 최대 직사각형을 cht로 구할 수 있을 것 같은데 새로운 수평선이 추가 될 때 마다 그 수평선 보다 높은 수평선들이 삭제되어야하고 해서 어떻게 하는지 잘 모르겠다. 동적 cht인가? 잘 모르겠다. 왠지 고민해도 이 문제는 못 풀것 같아서 ㅈㅈ쳤다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;집에서 예선 참가했는데 너무 더워서 죽을것 같다. 카페갈 걸 그랬다 ㅜㅜㅜ&lt;/p&gt;&lt;p&gt;본선 갈 수 있으면 좋겠다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;고럼 이만 ~&lt;/p&gt;</description>
      <category>etc./대회 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/49</guid>
      <comments>https://baactree.tistory.com/49#entry49comment</comments>
      <pubDate>Sat, 4 Aug 2018 19:00:00 +0900</pubDate>
    </item>
    <item>
      <title>삼성 대학생 프로그래밍 경진 대회(SCPC) 2018 후기</title>
      <link>https://baactree.tistory.com/48</link>
      <description>&lt;p&gt;오랜만에 블로그 포스팅을 한다~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;졸업전 마지막으로 참가하게된 scpc2018, 사실 scpc는&amp;nbsp;나에게 뜻 깊은 대회이다.&lt;/p&gt;&lt;p&gt;산업공학과인 나에게 2015년 전역하고 우연히 알게된 scpc는&amp;nbsp;참가하면서&amp;nbsp;ps의 재미를 느끼고 sw 엔지니어로 커리어를 쌓아야 겠다는 생각을 가지게 해준 대회이다.&lt;/p&gt;&lt;p&gt;인생에 있어 큰 분기점이었던 scpc이고 sw 커리어의 시작이었던 scpc에서 졸업전에 수상을 하고 싶다는 마음은 너무너무너무 컸었다.&lt;/p&gt;&lt;p&gt;1회 2차 예선 탈 / 2회 본선 359점 (입상 컷 600) / 3회 본선 643점 (입상컷 680) 으로 3번의 scpc 를 거치면서 수상을 눈 앞에서 놓치는게 너무너무 아쉬웠다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;1회 때는 예선이 시작함과 동시에 ps를 입문하게 되어서 좋은 성적은 아니었지만, 2회 때 2번 문제 kmp 부호 하나를 거꾸로 써서 AC를 받지 못한것과 ('+' -&amp;gt; '-' 로만 고치면 600점 이었음), 3회 때 4번 섭테를 하나 긁거나 충분히 풀 수 있었던 3번 문제를 해결 하지 못해서 수상하지 못했던 것은 너무 아쉬운 경험이었다.&lt;/p&gt;&lt;p&gt;그런 경험들을 뒤로하고, 올해 상반기에 4학년 2학기를 마치고 바로 취업하는 길도 있었지만, scpc에서 수상을 하고 싶다는, Expert 등급을 취득하고 싶은 마음이 너무나 컸기에 휴학을 결심하고 마지막 6개월을 불태우고자 했다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;하지만 4월, 7월 Expert 시험에서 생각보다 더 좋지 못한 결과가 나오고 상반기 SR 인턴지원에서 탈락하게 되면서 괜히 휴학을 했나, 내가 쏟은 시간들이 아까워서 집착을 한건가 하는 생각도 많이 했었다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그런 불안한 마음과 함께 시작한 scpc2018이었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1차 예선은 비교적 컷이 낮다는걸 3년간의 경험으로 알고 있었고 올해는 어떤 문제들이 나오려나 하는 기분으로 가볍게 봤었다. 예상대로 무난한 문제들이 나왔는데 다른 문제들과 다르게 4번 문제는&amp;nbsp;근사해 탐색문제가 나왔고 신선했었다. 1,2,3,5 만점에 4번 176점을 긁어서 776점으로 무난하게 통과할 것이라고 예상했고 통과했다.&lt;/p&gt;&lt;p&gt;2차 예선은 이제 본선을 진출을 결정하기 때문에 혹시 본선도 못가면 어떡하지라는 마음에 열심히 치뤘고 한문제 한문제 시간들여서 풀다보니 1,2,3,4,5 모두 AC를 받고 1000점을 얻었다. 5번 문제 같은 경우에는 증명을 안하고 그냥 내서 사실 맞았다고 하기 어렵지만ㅋㅋ 본선 진출을 거의 확정짓고 만점자 수를 구경하는데 2,3,4,5가 모두 적당한 난이도를 가지는 문제임에도 불구하고 120명씩 만점자가 나온다는게 너무 놀라웠고 올해 본선은 정말 박터지겠구나 참가자의 수준이 이렇게 까지 올라간건가 하는 생각을 하게 되었다.&lt;/p&gt;&lt;p&gt;본선까지 남은 시간들은 지금까지 공부했던 것들을 정리하고 컨디션을 조절하면서 보냈고 본선 날짜가 점점 다가왔다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;본선 당일 잠은 전 날 거의 12시간 넘게 자서 컨디션은 최상이었고 대회장 앞 편의점에서 몬스터 한 캔 따고 풀도핑 상태였다. 컨디션은 정말 좋았지만 대회장 도착하고 기본적인 세팅을 하고 나니 너무너무 긴장이 됐었다. 마지막 기회라는 압박감이 장난아니었다ㅋㅋㅋㅋ&lt;/p&gt;&lt;p&gt;그렇게 대회가 시작되고 1번 문제를 보는데 주사위 구현문제가 나와서 생각했던 1번 난이도 보다는 조금 높았다. 오히려 이 때문에 긴장이 풀리면서 대회에 집중이 잘 되었던 것 같다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;힘겹게 AC를 받고 2번을 열었는데 너무 웰노운의 웰노운의 웰노운이었다. 바로 SA와 LCP를 짜고 뚝딲뚝으로 빠르게 풀었다. 그러고나니 앞에 스코어보드에 8등으로&amp;nbsp;올라와 있어서&amp;nbsp;아 오늘은 느낌이 좋다라는 생각이 들었다.&lt;/p&gt;&lt;p&gt;3번을 열었더니 1차 4번과 비슷한 부분점수 문제가 나와서 또 근사해 탐색 알고리즘인가 생각하고 일단 섭테 64점을 긁으면서 생각했다. 좋은 아이디어는 안떠올라서 생각중에 아인타님이 5번 81점을 긁었길래 5번 달려가서 81점을 긁고 왔다. 그리고 또 생각하다가 이걸 양극점 음극점 구분안하고 그냥 소팅한 뒤에 순서대로 2개씩 뽑으면 무적권 선분이 교차하지 않게 뽑을 수 있음을 알고 위 방법으로 하니 202점이 나왔다. 여기에 남은 4초동안 뽑이지 않은 정점들을 랜덤으로 한 쌍씩 뽑아서 추가하는 과정을 통해서 245점까지 끌어 올릴 수 있었다.&lt;/p&gt;&lt;p&gt;3번을 맨처음 열었을때 스코어보드를 보고 한 240점쯤 되면 일단 접고 다른 문제에 집중하자는 생각이었고 4번이 생각보다 많이 풀렸길래 4번을 잡았다. 뚜렷한 솔루션이 보이지 않았고 이전에 카제비님이 57점을 중간에 맞았을때 4번 최소 57점을 긁자는 생각이 있었고 대회가 30분 남았을 때 57점을 긁었다.&lt;/p&gt;&lt;p&gt;그로부터 끝날 때 까지 등수 계산을 했는데 2차 예선 때 참가자들의 퍼포먼스를 보면 만점자 수는 적더라도 섭테를 거의 최상위 섭테까지 긁은 사람이 많지 않을까? 생각하며 4번을 풀어야 수상확정일텐데 으으으 하면서 10분동안 기도메타했다. 그렇게 총 680점을 받고 대회가 종료되었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;시상식장으로 이동하면서 주변사람들 점수를 물어보는데 생각보다 다들 낮아서 잉? 수상인가? ㄹㅇ루? 하는 생각밖에 안들었던것 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;결과는&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; text-align: center; width: 400px; height: 400px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AC5E435B6133B02D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AC5E435B6133B02D&quot; width=&quot;400&quot; height=&quot;400&quot; filename=&quot;KakaoTalk_20180801_124336969.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center; width: 400px; height: 400px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;~~~~~~~~~~~~~ 5등상을 수상했다 ㅜㅜㅜ ~~~~~~~~~~~~~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;상받으면 즙짤줄 알았는데 즙은 안나오더라 주변 점수들을 물어보니 5등 중에서도 꽤 높은 5등인것 같았다.&lt;/p&gt;&lt;p&gt;아무튼! 너무 기쁘다. 3년 동안 4회 참가한 scpc에서 드디어 수상을 하다니 으으으으 마지막으로 참가하는 scpc에서 수상해서 먼가 더 뭉클한 기분이다. 홀가분이다 홀가분 ~~ 휴학하길 잘했다~~&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;외쳐 갓트리!!&lt;/p&gt;</description>
      <category>etc./대회 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/48</guid>
      <comments>https://baactree.tistory.com/48#entry48comment</comments>
      <pubDate>Wed, 1 Aug 2018 13:18:34 +0900</pubDate>
    </item>
    <item>
      <title>TOPCIT 알고리즘평가 후기</title>
      <link>https://baactree.tistory.com/45</link>
      <description>&lt;p&gt;11월 18일 TOPCIT 2차 정기 알고리즘 평가를 봤다.&lt;/p&gt;&lt;p&gt;우연하게 알게돼서 신청했는데 기존 TOPCIT이랑 다르게 알고리즘만 평가하는 시험인것 같았다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;신청자격은 &lt;a href=&quot;http://www.kiise.or.kr/academy/board/academyNewsView.fa?MENU_ID=080100&amp;amp;sch_add_bd=%ED%95%99%ED%9A%8C%EC%86%8C%EC%8B%9D&amp;amp;NUM=1610&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;링크&lt;/a&gt;를 참조하자&amp;nbsp;&lt;/p&gt;&lt;p&gt;광주지역에서 시험장이 있어서 편했다.&lt;/p&gt;&lt;p&gt;도착해서 이것저것 물어봤는데 저번 1차 정기때는 광주지역에서 4명 신청해서 2명 왔다더라&lt;/p&gt;&lt;p&gt;이번에는 내가 친구들도 몇명 보자고해서 같이 갔는데 10명 쯤 됐던거 같다.&lt;/p&gt;&lt;p&gt;지인 6명 빼면 4명정도만 신청한건데 진짜 적긴 하다.&lt;/p&gt;&lt;p&gt;서울지역은 어떨지 모르겠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아직 뭐 어떤 혜택이 발생하는지도 모르고 기존의 TOPCIT 정기평가도 컴공과의 토익이니 뭐니 하며 떠들썩&lt;/p&gt;&lt;p&gt;했지만 입사할 때 혜택을 많이 보는 것도 아니고, 굳이 시간내서 하지 않아도 된다는 느낌이 들었다.&lt;/p&gt;&lt;p&gt;관심이 있다면 해보는 정도?&amp;nbsp;&lt;/p&gt;&lt;p&gt;지금 이 알고리즘 평가도 얼마나 주목받을지는 모르겠지만 일단 한 번 어떤 문제가 나오나 궁금해서&lt;/p&gt;&lt;p&gt;신청해봤다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;시험은 7문제 4시간 동안 치뤘다. 시험 플랫폼은 cms 플랫폼이었다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;비교적 난이도 순으로 나열한 것 같았고 체감 난이도는 2 &amp;lt;&amp;nbsp;1 &amp;lt;&amp;nbsp;5 &amp;lt;&amp;nbsp;6 &amp;lt;&amp;nbsp;3&amp;nbsp; &amp;lt;&amp;lt;&amp;nbsp;4 &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;nbsp;7 이었다.&lt;/p&gt;&lt;p&gt;문제는 발설하지 말라고 했으니 그냥 대충 문제 유형이랑 어떻게 접근했는지만 적어보겠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[1]&lt;/p&gt;&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more45_0&quot; data-id=&quot;45_0&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content45_0&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_0&quot; data-id=&quot;45_0&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;&lt;p&gt;수학? 구현?&lt;/p&gt;&lt;p&gt;연립방정식의 해가 존재하는지 존재한다면 해를 출력하는 문제&lt;/p&gt;&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_0&quot; data-id=&quot;45_0&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[2]&lt;/p&gt;&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more45_1&quot; data-id=&quot;45_1&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content45_1&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_1&quot; data-id=&quot;45_1&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;&lt;p&gt;그리디&lt;/p&gt;&lt;p&gt;소팅하고 걍 곱하면 됨&lt;/p&gt;&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_1&quot; data-id=&quot;45_1&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[3]&lt;/p&gt;&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more45_2&quot; data-id=&quot;45_2&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content45_2&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_2&quot; data-id=&quot;45_2&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;&lt;p&gt;주어진 문제 식으로 잘 변환해서 식 전개하면&lt;/p&gt;&lt;p&gt;upper_bound랑 lower_bound 에 관련된 식 구할 수 있음&lt;/p&gt;&lt;p&gt;이 식으로 파라매트릭 서치해서 upper_bound랑 lower_bound 구하고 원소가 유일해질 때 출력하면 됨&lt;/p&gt;&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_2&quot; data-id=&quot;45_2&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[4]&lt;/p&gt;&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more45_3&quot; data-id=&quot;45_3&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content45_3&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_3&quot; data-id=&quot;45_3&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;&lt;p&gt;잘 모르겠어서 그냥 백트래킹 돌림 복잡도 예측안되고 모든 테케 시간안에 들어오는데&lt;/p&gt;&lt;p&gt;20개중 2개 테케 틀려서 90점 맞음 1시간 디버깅하다가 못 찾아서 걍 때려치고 7번 품&lt;/p&gt;&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_3&quot; data-id=&quot;45_3&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[5]&lt;/p&gt;&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more45_4&quot; data-id=&quot;45_4&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content45_4&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_4&quot; data-id=&quot;45_4&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;&lt;p&gt;(1C1)*(2C1)*(3C2)*(4C2)*(5C3)*(6C3)*(5C3)*(4C2)*(3C2)*(2C1)*(1C1)&lt;/p&gt;&lt;p&gt;= 1*2*3*6*10*20*10*6*3*2*1 =&amp;nbsp;2592000&lt;/p&gt;&lt;p&gt;완탐돌리면 됨&lt;/p&gt;&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_4&quot; data-id=&quot;45_4&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[6]&lt;/p&gt;&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more45_5&quot; data-id=&quot;45_5&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content45_5&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_5&quot; data-id=&quot;45_5&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;&lt;p&gt;트리에서 웰노운 문제&lt;/p&gt;&lt;p&gt;cnt[x]=x를 루트로하는 서브트리의 정점 수&lt;/p&gt;&lt;p&gt;dp[x]=x를 루트로 하는 서브트리에서 x에서 모든 다른 정점까지의 거리들의 합&lt;/p&gt;&lt;p&gt;2개를 미리 전처리 해놓으면 현재 루트 u에서 자식 v로 루트를 옮기고자 할 때&amp;nbsp;&lt;/p&gt;&lt;p&gt;cnt[v] 만큼은 답이 감소하고 (n-cnt[v])만큼은 답이 증가한다.&amp;nbsp;&lt;/p&gt;&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_5&quot; data-id=&quot;45_5&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[7]&lt;/p&gt;&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more45_6&quot; data-id=&quot;45_6&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content45_6&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_6&quot; data-id=&quot;45_6&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;&lt;p&gt;그래프내에 사이클이 한 개만 존재하고 그 사이클에서 시계방향으로 다시 정점 매기고&lt;/p&gt;&lt;p&gt;각 정점을 루트로하는 서브트리에 대해 지름이랑 최대 깊이 전처리한다.&lt;/p&gt;&lt;p&gt;i번째 사이클의 정점에 대해서 k개까지는 시계방향으로 가야 최단거리고&lt;/p&gt;&lt;p&gt;k개부터는 반시계 방향으로 가야 최단거리인 k가 존재하는데&lt;/p&gt;&lt;p&gt;이거 미리 전처리로 구하던지 걍 파라매트릭 서치 하던지 하면 되고&lt;/p&gt;&lt;p&gt;i부터 i+k까지는 시계방향 최댓값 쿼리로 찾고 나머지는 반시계방향 최댓값 쿼리로 찾으면 된다.&lt;/p&gt;&lt;p&gt;시계방향 반시계방향 세그먼트트리 두 개 만들고 i를 이동시키면서 최댓값 갱신하면 됨&lt;/p&gt;&lt;p&gt;구현 다하고 예제테케 안나와서 디버깅하다가 시간 끝나서 걍 제출했다.&lt;/p&gt;&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less45_6&quot; data-id=&quot;45_6&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아쉬운건 4번이 왜 wa나오는지 도통 모르겠는상태로 1시간 정도 낭비한거고&lt;/p&gt;&lt;p&gt;그래서 7번에 쏟을 시간을 빼았겨서 아쉽다.&lt;/p&gt;&lt;p&gt;문제 자체는 평범했던거같다. 코포 딥투하는 느낌이었음&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;한줄평)&lt;/p&gt;&lt;p&gt;TOPCIT 정기평가가 큰 혜택&amp;nbsp;없다면 집에서 코포 버츄얼이나 돌리는게 더 좋을것 같음.&lt;/p&gt;</description>
      <category>etc./코딩테스트 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/45</guid>
      <comments>https://baactree.tistory.com/45#entry45comment</comments>
      <pubDate>Sat, 18 Nov 2017 22:58:49 +0900</pubDate>
    </item>
    <item>
      <title>ACM ICPC Daejeon / 한국 대학생 프로그래밍 경시대회 후기</title>
      <link>https://baactree.tistory.com/44</link>
      <description>&lt;p&gt;1년을 마무리하는 마지막 대회 한국 대학생 프로그래밍 경시대회 본선에 참가했다.&lt;/p&gt;&lt;p&gt;11.10 - 11.11 이틀에 거쳐서 카이스트 문지캠퍼스에서 진행 되었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;올해는 같은 산업공학과 학부생인 동기들과 함께 나갔다.&amp;nbsp; DDiyoooooong [&lt;a href=&quot;http://codeforces.com/profile/BAACTREE&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;baactree&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://codeforces.com/profile/w3109ww&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;w3109ww&lt;/a&gt;, &lt;a href=&quot;http://codeforces.com/profile/grands&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;grands&lt;/a&gt;]&lt;/p&gt;&lt;p&gt;PS분야를 많이 공부한 친구들은 아니지만 기본적인 코딩능력이 뛰어나고, 창의적인 생각이나&lt;/p&gt;&lt;p&gt;아이디어를 도출하는 부분도&amp;nbsp;뛰어난 친구들이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;3명 모두 삼성 S/W 역량평가 B형까지 통과하였다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;10일날 오전에 광주버스터미널에서 모여서 버스를 타고 대전청사로 갔다.&lt;/p&gt;&lt;p&gt;홈플러스에서 찜닭을 먹었는데 옆자리가 NCTU 팀이었다. ㅋㅋㅋ&lt;/p&gt;&lt;p&gt;점심먹고 카이스트로 출발했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;등록을 마치고 잠시 대기했다가 연습세션이 시작되었다.&lt;/p&gt;&lt;p&gt;작년에도 icpc를 했던 경험이 있던 내가 이제 대회가 시작되었을 때 이미지 트레이닝 같은걸 팀원들에게 해줬다.&lt;/p&gt;&lt;p&gt;do not touch anything 100번은 들을것이고 시작하면 모니터랑 키보드를 오른쪽으로 옮기고 IDE&amp;nbsp;환경 세팅이랑&lt;/p&gt;&lt;p&gt;대회 사이트 로그인 후 스코어보드를 열어 놓으라는 등등의 스케치를 그려줬다.&lt;/p&gt;&lt;p&gt;우분투 환경에서 서브라임 사용법이랑 터미널 사용법 간단한 것들 설명해주고 출력하는 법 등등도 설명해줬다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;예비소집을 끝내고 숙소로 돌아와서 저녁은 불고기와 곱창을 야무지게 구워먹었다.&lt;/p&gt;&lt;p&gt;숙소에서 과자와 캔맥주를 마시면서 화이팅을 외치고 다시보기로 영화 앤트맨을&amp;nbsp;보고 일찍 잤다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;드디어&amp;nbsp;icpc 당일! 등록하고 대회장으로 입장했다.&lt;/p&gt;&lt;p&gt;do not touch anything 100번쯤 들을 것 같았는데 생각보다 몇 번 안하시더라...&lt;/p&gt;&lt;p&gt;대회는 5분 지연되어 10:05분에 시작되었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;징이 울리고 대회가 시작되었다.&lt;/p&gt;&lt;p&gt;나는 H,I,J,K,L 문제를 가지고 있었고 대충 그림들을 보면서 뭘 읽을까 하다가 K가 왠지 작년 로봇 문제처럼&lt;/p&gt;&lt;p&gt;단순 시뮬레이션같아서 먼저 읽었다. 읽고나니 그런 문제가 아님을 깨달았고, 그 후 H를 읽었다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;H 문제를 보고 그냥 생긴게 FFT같이 생겼었다. 하지만 R,S,P를 각각 어떤 정수에 대해 매칭해야될지 바로 떠오르지 않았고&lt;/p&gt;&lt;p&gt;좀 더 고민하다가 문자열 매칭으로 될거 같다는 생각이 들어 KMP를&amp;nbsp;구현했다.&lt;/p&gt;&lt;p&gt;하지만 이게 매칭이 앞부터 순서대로 다 맞아야 하는게 아니라&lt;/p&gt;&lt;p&gt;그냥 이긴 횟수를 세는 문제라 접근이 틀렸음을 깨달았고, 접은 다음에 스코어보드를 보니 D가 엄청나게 풀려있었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;D문제를 팀원에게 받아서 호다닥 읽어보니 단순하게 사이클체크를 하는 문제였고 구현하고 AC를 받았다. [12분 AC]&lt;/p&gt;&lt;p&gt;다시 스코어보드를 보니 C가 풀려 있었고 C를 읽었다. 정말 읽기 싫게 생긴 문제 형태였는데 꼼꼼히 읽어보니 DAG가 성립했고&amp;nbsp;&lt;/p&gt;&lt;p&gt;따라서 동적계획법으로 해결할 수 있었다. [42분 AC]&lt;/p&gt;&lt;p&gt;다음으로 잡은 문제는 F였다. 팀원이 읽고 있던 문제여서 문제 설명을 듣고 단순하게 재귀함수로 해결가능 할 것 같았는데&lt;/p&gt;&lt;p&gt;구현을 어떻게 단순하게 해야 할지 감이 잘 안잡혔다.&lt;/p&gt;&lt;p&gt;그래서 그냥 16가지 경우에 대해서 하드코딩했고 AC를 받았다. [74분 AC]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이후 H를 더 고민하는데 가지수가 2개만 있으면 0과 1로 치환하면 되는데 3가지라 어떻게 하지 고민하다가&lt;/p&gt;&lt;p&gt;팀원이 그럼 3번해보면 되지 않냐고 했고 코딩하는데 뜬금없이 스코어보드가 프리징 됐다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;&lt;p&gt;대회 시작 2시간만에 스코어보드 프리징이라니 저어어엉말 놀랍다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;&lt;p&gt;몰라몰라가 11솔브 acg가 10솔브 어마어마 했다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;당황하지 않고 h를 코딩을 마쳤는데 이게 끝내는 것을 딱 맞게 안 끝내도 되는거 였는데 그걸 캐치하는데 좀 걸려서&lt;/p&gt;&lt;p&gt;10-20분 정도 시간을 허비했다. 이후 고치고 AC를 받았다. [127분 AC]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이제 쉬운문제는 다 해결되었다고 생각했고 어떤걸 풀어볼까 고민하면서 팀원들과&amp;nbsp;읽은 문제들을 체크하고 공유하였다.&lt;/p&gt;&lt;p&gt;A, B, G, I를 읽었고 A, B는 심플하지만 해결한 팀이 많이 없는걸로 봐서 일단 미뤘고 G와 I를 해결하고자 했다.&lt;/p&gt;&lt;p&gt;일단 팀원이 B를 백트래킹으로 비비면 될 것 같다고 해서 컴퓨터를 넘겨 줬고 나는 I를 고민했다.&lt;/p&gt;&lt;p&gt;사실 F를 코딩하면서 I의&amp;nbsp;설명을 들었을 때는 사이클 찾는 문제여서 토끼와 거북이 알고리즘을 사용하는건가?&lt;/p&gt;&lt;p&gt;라고 생각했었는데 다시 생각해보니 아니었고 pi함수를 이용해서 풀 수 있을 것 같았다&lt;/p&gt;&lt;p&gt;팀원은 B의 코딩을 끝냈지만 예제가 나오지 않았고 코드를 출력한 뒤&amp;nbsp;내가 컴퓨터를 잡았다..&lt;/p&gt;&lt;p&gt;주어진 문자열을 뒤집고 pi함수를 만들어서 각 인덱스당 최소 반복 길이를 구하면 됐었는데 처음에 반복 구간을&lt;/p&gt;&lt;p&gt;찾은 다음에 이 구간을 줄이기 위해서 다시 반복 구간을 찾을 때 약수에 대해서만 찾았어야 했는데, 이걸 빠르게&lt;/p&gt;&lt;p&gt;생각하지 못해서 5번 WA를 맞은 후 AC를 받았다. [238분 AC]&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;다음으로 K에 대해서 계속 정리해 둔 걸 바탕으로 현재까지 만든 bounding box 보다&amp;nbsp;더 크게 길이를 설정하면&lt;/p&gt;&lt;p&gt;항상 주어진 조건을 만족 시킬 수 있고 길이도 n을 넘지 않는다는걸 깨달았고 그대로 구현하고 AC를 받았다. [253분 AC]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 대회가 1시간 가량 남아있는 상황에서 솔루션이 뚜렷하게 보이는건 G와 B였고, 현재 6문제를 해결한 상황이었다.&lt;/p&gt;&lt;p&gt;내가 B를 생각하고 G를 팀원에게 플레인 스위핑 + a 일 것 같다라고 한 뒤 다시 고민했다.&lt;/p&gt;&lt;p&gt;B를 3진법으로 비트마스크하는 dp라고 생각했고, 구현했는데 답이 안 나왔다. 30분쯤 남은 상황에서 팀원에게&lt;/p&gt;&lt;p&gt;컴퓨터를 넘겨주고 디버깅을 했다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;하지만 틀린 부분을 못 찾았고, G도 남은 시간내에 완성을 못하고 대회가 종료되었다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;최종적으로 6문제를 해결하였고 시상식 결과 학교순위 9등으로 동상을 수상하였다. 와~와~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;개인적인 이번 icpc 성과를 분석해보자면 처음 쉬운 문제를 찾는데 약간 선택이 어긋났었고, F를 좀더 깔금한 구현법이&lt;/p&gt;&lt;p&gt;있을 것 같은데 떠올리지 못해서 코딩시간을 쓴 게 아쉽다.&lt;/p&gt;&lt;p&gt;그리고 H를 맞추고 I를 맞출 때까지 2시간 정도가 걸렸는데 사실 I문제가 풀어봤었던 유형이었는데 그걸 빠르게 생각하지&lt;/p&gt;&lt;p&gt;못하고 5번이나 WA를 맞은게 너무 컷던것 같다.&lt;/p&gt;&lt;p&gt;처음에 토끼와 거북이 알고리즘이라고 생각을 거의 확정시켜버려서 그 알고리즘을 기억하는데 시간을 좀 투자했는데&lt;/p&gt;&lt;p&gt;뚜렷한 솔루션이 안보일 때에는 계속 다른 방향의 접근 방법을 생각하는 습관을 가져야 할 것 같다.&lt;/p&gt;&lt;p&gt;여기서 한시간 반정도만 단축시켰어도 9 - 10 솔브는 할 수 있지 않았을까 싶다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;B는 내가 생각한 알고리즘이 잘못 됐었고 백트래킹이 맞았었다. 그냥 백트래킹으로 구현했다면 좋았을 텐데 시간의 압박에&lt;/p&gt;&lt;p&gt;알고리즘의 정당성을 명확하게 파악하지 않고 코딩한게 실수 였던것 같다.&lt;/p&gt;&lt;p&gt;G같은 경우도 코딩량이 꽤 있어야해서 컴퓨터를 놀리지 않고 꾸준히 돌렸어야 했는데&lt;/p&gt;&lt;p&gt;팀원들중 구현력이 되는사람이 나밖에 없어서 그것도 너무 아쉬웠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이번 대회에서 AC를 맞은 6문제 전부다 내가 코딩하게 되었는데 아무래도 구현을 내가하게 되니 내가 생각하는 시간도&lt;/p&gt;&lt;p&gt;부족해지고 디버깅하는데도 시간을 투자해야되서 문제 순환이 제대로 이루어지지 않았던 것 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아직 내년대회도 또 참가할지 안할지는 미지수이지만 다시 참가하게 된다면 2명정도는 구현력을 충분히 늘리고&lt;/p&gt;&lt;p&gt;많은 문제를 읽고 서로 심플하게 설명해주면서 계속 문제를 돌리고 아이디어 정리하고 빠르게 구현하는 식으로하면&lt;/p&gt;&lt;p&gt;좋은 성적을 낼 수 있을 것 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;올해 대회 재미있게 잘 치뤘고 5시간 내내 즐기면서 했던거 같다. 팀명만 20번은 외친거같다. ㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;&lt;p&gt;목표는 은상이었지만 그래도 동상 턱걸이로 걸쳐서 기분이 좋고&lt;/p&gt;&lt;p&gt;스코어보드 공개 전까지는 동상도 못 받을것 같았는데 다행이다ㅋㅋㅋㅋㅋ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;PS를 시작하고 나서 받는 첫 수상이어서&amp;nbsp;너무 기분이 좋고 왠지 이 분야를 더 해보고 싶은 생각이 들었다.&lt;/p&gt;&lt;p&gt;외쳐어어 띠요오오오오오오오옹~&lt;/p&gt;</description>
      <category>etc./대회 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/44</guid>
      <comments>https://baactree.tistory.com/44#entry44comment</comments>
      <pubDate>Mon, 13 Nov 2017 01:05:01 +0900</pubDate>
    </item>
    <item>
      <title>Code Monster 2017 본선 후기</title>
      <link>https://baactree.tistory.com/43</link>
      <description>&lt;p&gt;호다닥 갈기는 lg cns codemonster 후기이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;상암 ddmc lg cns에서 11.1일날 했다. 작년과 비슷하게 올해도 수색역에서 건너편으로 넘어가는거 힘들었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9933EA3359F9EF8D32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9933EA3359F9EF8D32&quot; width=&quot;820&quot; height=&quot;615&quot; filename=&quot;IMG_1869.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;코오오오오드으으 몬스터어어어!&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;티셔츠 받고 갈아입고 과자 쿰척쿰척하고 환경세팅했다.&lt;/p&gt;&lt;p&gt;대회장은 3개인가 4개로 나뉘어져있는거 같았고 한 대회장에 20명 쯤 있는거 같았다. 8x3 24명이넹 대회장 3개인 듯&lt;/p&gt;&lt;p&gt;아무래도 한 곳에서 대회를 안하고 각 방에서 따로따로 치루니까 그냥 시험치는거 같았다. 스코어보드도 없고...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9914413359F9F06714&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9914413359F9F06714&quot; width=&quot;820&quot; height=&quot;615&quot; filename=&quot;IMG_1871.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;너무 갓갓들이 많은 방이었다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이런저런 설명듣고 점심 도시락 냠냠하고 12시 30분부터 4시간동안 대회가 시작되었다!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;문제는 4문제 출제되었고 3번까지 1시간 대에 풀고 4번만 2시간 넘게 고민했는데 섭테 1만 해결하였다. 흐규흐규&lt;/p&gt;&lt;p&gt;수상인원이 14명인데 아마 만점이 입상컷인거 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;대략적으로 문제 소개 및 내가 접근한 방법을 적어보면&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1번은 N(1e5)개의 선분의 길이가&amp;nbsp;주어진다.&lt;/p&gt;&lt;p&gt;이 선분들 중에서 4개를 선택해 사다리꼴을 만드는데 가장 둘레가 큰 사다리꼴의 둘레를 출력하는 문제이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;선분 4개의 길이를 a,b,c,d라고 하고 a&amp;lt;=b&amp;lt;=c&amp;lt;=d 라고 정의 하였을 때&lt;/p&gt;&lt;p&gt;사각형을 만들기 위해서는 a+b+c&amp;gt;d 이어야 함은 자명하다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;d를 밑변으로 하고 a를 윗변(?) 으로 하는 사다리꼴 형태를 생각해보자. 좌변을 b, 우변을 c라고 하였을 때&lt;/p&gt;&lt;p&gt;d선분 왼쪽 끝점에서 반지름 b인 원을 그리는데 오른쪽으로 길이가 a이고 d와 평행인&amp;nbsp;선분이 붙은 거니까&amp;nbsp;&lt;/p&gt;&lt;p&gt;왼쪽 끝점에서 오른쪽으로 a만큼 평행이동 하였다고 생각해도 된다.&lt;/p&gt;&lt;p&gt;그리고 d선분 오른쪽 끝점에서 반지름 c인 원을 그렸을 때 이 두 원이 교점이 존재하면 사다리꼴을 만들 수 있는것이다.&lt;/p&gt;&lt;p&gt;교점 존재 여부는 r'-r&amp;lt;=d&amp;lt;=r'+r, (r'&amp;gt;=r) 로 확인 가능하고 여기서 두 원의 중점 사이의 거리는 (d-a)이다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;r'=c , r=b임은 (a&amp;lt;=b&amp;lt;=c&amp;lt;=d) 로 인해 자명하고&lt;/p&gt;&lt;p&gt;a+b+c&amp;gt;d 인 꼴에서만 사각형을 만들 수 있으므로, d-a&amp;lt;c+b&amp;nbsp;이고 우측 부등식을 만족한다.&lt;/p&gt;&lt;p&gt;또한 a+c&amp;lt;=b+d임은 (a&amp;lt;=b&amp;lt;=c&amp;lt;=d) 에서 유추해낼 수 있고, 따라서 c-b&amp;lt;=d-a&amp;nbsp;이므로 좌측 부등식을 만족한다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;따라서 사각형을 만들 수 있으면 사다리꼴을 만들 수 있다.&lt;/p&gt;&lt;p&gt;가장 긴 선분부터 보면서&amp;nbsp;a+b+c&amp;gt;d 를 만족하면 답이다.&lt;/p&gt;&lt;p&gt;O(NlogN)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2번은 N(5000)개의 문자에서 K번 이상 등장하는 가장 긴 부분 문자열의 길이를 출력하는 문제이다.&lt;/p&gt;&lt;p&gt;카운트할 때 등장하는 구간이 겹치면 안 됨. ex) ababa 에서 aba는 &amp;nbsp;1,3 에서 등장하지만 3에서 겹치니까 카운트는 1임&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;웰노운이고 많은 풀이가 존재한다. 제일 쉬운 문제인&amp;nbsp;듯&lt;/p&gt;&lt;p&gt;나는 파라매트릭에 kmp 써서 길이 k를 정하고 찾을 문자열 정하고 kmp로 찾았다.&lt;/p&gt;&lt;p&gt;O(N^2logN)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3번은 N(1e6)일 동안 K(5e4)개의 물건? 을 사야한다. k일이 되는 날&amp;nbsp;i번째 물건의 가격은 a[i]*k +b[i] 이다.&lt;/p&gt;&lt;p&gt;1e6&amp;gt;a[i]&amp;gt;=0, 음수&amp;lt;b&amp;lt;양수(걍 쥰내큼 |1e12|인가?)&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1일부터 N일 동안 매일 1개씩 물건을 살 수 있는데, 그 날 가장 싼 물건만 살 수 있다.(여러개 있다면 그 중 아무거나)&lt;/p&gt;&lt;p&gt;N일이 지난후 K개의 물건을 살 수 있는지? 살 수 있다면 최소 가격을 구하는 문제이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;문제 읽자마자 컨벡스헐트릭 문제 같았다. 각 1차함수를 y절편으로 소팅하였을 때&lt;/p&gt;&lt;p&gt;더 큰 y절편을 가지는 함수가 더 큰 기울기를 가진다면 가격이 역전될 가능성이 없다. 따라서 고려하지 않아도 되고&lt;/p&gt;&lt;p&gt;그렇다면 우리가 고려하는 함수들은 y절편이 증가함에 따라 기울기가&amp;nbsp;감소한다.&lt;/p&gt;&lt;p&gt;따라서 가장 y절편이 작은 1차함수에서 다른 함수와 교차 할때는 항상 절편순으로 교차한다.&lt;/p&gt;&lt;p&gt;따라서 O(N)으로 모든 일자에 대해서 가장 작은 값을 가지는 1차함수를 관리할 수 있고, 가격이 항상 증가하므로&lt;/p&gt;&lt;p&gt;구매할 수 있을 때 구매하고 제거하는 식으로 구현하면 여러개 있는 경우나 y절편과 기울기가&amp;nbsp;같은 경우도 예외처리 가능하다.&lt;/p&gt;&lt;p&gt;O(N+KlogK)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4번은 N(1e5)정점 M(1e5)양방향간선이 있고 임의의 두 쌍의 정점은 항상 도달가능하고&lt;br /&gt;두 쌍의 정점을&amp;nbsp;연결하는 간선이 여러개 존재 할수도 있다.&lt;/p&gt;&lt;p&gt;여기서 mst(미니멈) 만들수있는 모든 경우에 대해서 임의의 두 리프노드 사이에 mst로 선택되지 않은 기존 그래프 G의 간선이 존재하는지 안하는지 구하는 문제이다.(만들수 있는 모든 mst에 대해서 두 리프노드 사이에 간선이 없다면 참이고, 아니라면 거짓임)&lt;/p&gt;&lt;p&gt;섭테 1은 모든 간선의 가중치가 다르고&lt;/p&gt;&lt;p&gt;섭테 2는 최대 2개만 같고&lt;/p&gt;&lt;p&gt;섭테 3은 최대 3개만 같다&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;섭테 1은 쉽게 해결가능하다&amp;nbsp;만들 수 있는 mst가 1개만 존재하므로 그냥 만들고 문제조건을 확인하면 된다. O(MlogM + N)&lt;/p&gt;&lt;p&gt;섭테 2를 해결하면 여기서 예외처리만 더하면 섭테3이 해결될거 같았는데 섭테2를 해결못했다. 흐어어어엉&lt;/p&gt;&lt;p&gt;가중치가 같은 간선 a, b에 대해서&lt;/p&gt;&lt;p&gt;a, b 둘다 mst에 사용되었다면 고려하지&amp;nbsp;않아도 된다.&lt;/p&gt;&lt;p&gt;a, b 둘다 mst에 사용되지 않았다면 고려하지 않아도 된다.&lt;/p&gt;&lt;p&gt;a또는 b만 사용되었다면 a,b는 서로 교체 가능하고 같은 사이클 내에 존재할 것이다.&lt;/p&gt;&lt;p&gt;mst하나 만들어 보고 여기서 교체 가능한 간선들을 교체해서 새로운 리프-리프 노드를 만들면 불가능이다.&lt;/p&gt;&lt;p&gt;대충 이 정도 생각해보고 모르겠어서 비벼볼까 싶어서 섭테2 받아서 교체가능한 간선들 수를 출력했는데 적긴한데 비빌만한 크기는 아니여서 또 다른 접근도 해보고 흐거ㅓ거거거거겅 했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4번에 대한 후문으로는 경우 구해서 백트래킹하면 된다는거랑 랜덤으로 그냥 선택해서 비비는거 있었고&lt;/p&gt;&lt;p&gt;제일 충격적이었던게 섭테 1을 해결한 코드 그냥 내면 3까지 다 뚫린다는 거였다. 예외가 존재 하는뎅..&lt;/p&gt;&lt;p&gt;추가적인 체점이 없었다면ㅠㅠ&amp;nbsp;그냥 내볼껄...&lt;/p&gt;&lt;p&gt;예외)&lt;/p&gt;&lt;p&gt;4 4&lt;/p&gt;&lt;p&gt;1 2 1&lt;/p&gt;&lt;p&gt;2 3 1&lt;/p&gt;&lt;p&gt;3 4 2&lt;/p&gt;&lt;p&gt;2 4 2&lt;/p&gt;&lt;p&gt;mst 하나는 가능하고 하나는 불가능하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;총평으로는 문제 난이도가 아쉽다. 물데이터가 아쉽다.&lt;/p&gt;&lt;p&gt;노트북 너무 느리다. 비쥬얼로하다가 컴파일하는데 너무너무너무 오래걸려서 서브라임 켜서했는데 서브라임에서 컴파일하는것도 느리더라 그래서 cmd 켜서 컴파일 했다.&lt;/p&gt;&lt;p&gt;대회같은 느낌이 별로 없다. (노잼이었다는 뜻ㅎ)&lt;/p&gt;&lt;p&gt;음 그래도 기업에서 대학생 대상으로 대회를 열어준다는게 정말 고마운 경험을 시켜주는것 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;전리품)&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 615px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D1843359FA006315&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D1843359FA006315&quot; width=&quot;615&quot; height=&quot;820&quot; filename=&quot;IMG_1872.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;블루투스 키보드이다.&lt;/p&gt;&lt;p&gt;키보드 더이상은~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>etc./대회 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/43</guid>
      <comments>https://baactree.tistory.com/43#entry43comment</comments>
      <pubDate>Thu, 2 Nov 2017 02:16:01 +0900</pubDate>
    </item>
    <item>
      <title>Code Monster 2017 인터넷 예선 후기</title>
      <link>https://baactree.tistory.com/41</link>
      <description>&lt;p&gt;9.29 ~ 9.30 lg cns code monster 인터넷 예선을 치뤘다.&lt;/p&gt;&lt;p&gt;작년에 코드몬스터 홈페이지가 사라졌었는데 갑자기 부활하고 올해도 대회를 진행하려나보다~&lt;/p&gt;&lt;p&gt;카카오나 삼성보다 시상 인원은 적지만 그래도 노오오오오력해보고 다 경험이기 때문에 도전해보자~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5문제 출제되었고 개인적인 난이도로는&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2 &amp;lt;&amp;lt;&amp;lt; 1 &amp;lt; 5 &amp;lt;&amp;lt; 4 &amp;lt; 3&amp;nbsp; 인 듯한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;문제 해결 순서는 2 -&amp;gt; 4 -&amp;gt; 1 -&amp;gt; 3 -&amp;gt; 5 순으로 해결하였다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1번은 문제가 열심히 설명하고 있는데 결국&amp;nbsp;&lt;/p&gt;&lt;p&gt;a 0&lt;/p&gt;&lt;p&gt;b 1 행렬 여러개 곱셈 연산했을 때 (2,1) 원소를 최대화 하는 문제이다.&lt;/p&gt;&lt;p&gt;행렬이 2개가 있을 때 더 크게 나오는쪽으로 배치해야 하는건 자명하다.&lt;/p&gt;&lt;p&gt;4개가 있고 왼쪽 2개 오른쪽 2개는 서로 잘 배치되었을 때 단순히 병합할 수 있는가? 라는 생각을 했는데&amp;nbsp;&lt;/p&gt;&lt;p&gt;사실 증명은 모르겠고 된다~~ 그래서 인접한 두 쌍을 비교하는 cmp함수만 만들고 sort 돌리면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2번은 쉬운 n^2 디피이다.&lt;/p&gt;&lt;p&gt;dag가 보장되므로 평범하게 잘 짜면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3번은 바로 n=3e5&amp;nbsp;고민하다가 오래걸렸는데, 먼저 n=500&amp;nbsp;생각해보면&amp;nbsp;&lt;/p&gt;&lt;p&gt;dp[i][j] = i를 루트로하고 적절히&amp;nbsp;커팅된 서브트리의 남은 크리스탈의 수가 j개가 되는 경우의 수로 정의하고&lt;/p&gt;&lt;p&gt;O(n^2) 트리 디피를 생각할 수 있다.&lt;/p&gt;&lt;p&gt;여기서 좀 더 생각해보면 j가 0일때,&amp;nbsp;1~k-1일 때, k일 때만 알면 되므로&lt;/p&gt;&lt;p&gt;dp[i][3]으로 줄일 수 있고&lt;/p&gt;&lt;p&gt;O(n)에 해결할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4번은 문제에 주어진 조건대로 그대로 구현하면 된다.&lt;/p&gt;&lt;p&gt;딱 하나 예외 해야되는게 삼각형 내부에 직각다각형이 포함된 경우이다. 이게 삼각형과 직각다각형이 교차하는 예에 포함된다.&lt;/p&gt;&lt;p&gt;나머지는 선분교차여부랑 접촉여부 판단하고 삼각형의 무게중심찍어서 이게 직각다각형 내부인지 아닌지 판별했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5번은 출발점 하나 정하고 다익스트라 돌렸을때 한 도착점에 대해서 필요없는 간선들을 저장할 수 있다.&lt;/p&gt;&lt;p&gt;이 간선들 중에 한 개만 사용하면 되는것이고, 뽑아야 하는 간선은 가중치가 작은것 부터 뽑아야 하는게 자명하다.&lt;/p&gt;&lt;p&gt;다익스트라 n번돌려서 뽑아야 하는 간선리스트 만들고 간선들 소팅하고 작은것 부터 뽑으면서 간선리스트에 존재하면 뽑고 아니면 넘어가는 식으로&lt;/p&gt;&lt;p&gt;구현하면 된다.&lt;/p&gt;&lt;p&gt;O(VElogV)에 해결할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아마 5개 풀어서 본선 갈 것 같은데 한 달 뒤 본선까지 노오오오오오오오력하여 좋은 결과 있으면 좋겠다~~~&lt;/p&gt;&lt;p&gt;띠요오오오ㅗ오오오옹~~~&lt;/p&gt;</description>
      <category>etc./대회 후기</category>
      <author>박트리</author>
      <guid isPermaLink="true">https://baactree.tistory.com/41</guid>
      <comments>https://baactree.tistory.com/41#entry41comment</comments>
      <pubDate>Sat, 30 Sep 2017 18:00:00 +0900</pubDate>
    </item>
  </channel>
</rss>