<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>구사과</title>
    <link>https://amugelab.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 11:14:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>구사과</managingEditor>
    <item>
      <title>Negative Weight Shortest Path</title>
      <link>https://amugelab.tistory.com/369</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cbCYh9/dJMcaf6tXPP/o1BpOxYpslA6Y2bKzpY1Z1/directed_ldd.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;directed_ldd.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.65MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에 관해서 최근에 공부하고 발표자료를 만들었다.&lt;/p&gt;</description>
      <category>공부/CS theory</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/369</guid>
      <comments>https://amugelab.tistory.com/369#entry369comment</comments>
      <pubDate>Wed, 28 Jan 2026 08:08:16 +0900</pubDate>
    </item>
    <item>
      <title>Marp에서 PDF 컴파일하기</title>
      <link>https://amugelab.tistory.com/368</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;VS Code에서 프리뷰는 띄워주면서 PDF export는 안해주는데 왠지는 아무도 모름&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;marp ./asdf.md 
  --pdf \
  --timeout 120000 \
  --allow-local-files \
  --chrome-path &quot;/Applications/Google Chrome.app/Contents/MacOS/Google Chrome&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;div id=&quot;simple-translate&quot; class=&quot;simple-translate-system-theme&quot;&gt;
&lt;div&gt;
&lt;div class=&quot;simple-translate-button &quot; style=&quot;background-image: url('moz-extension://bffeb449-264b-480e-bc89-ce862f70d8db/icons/512.png'); height: 22px; width: 22px; top: 10px; left: 10px;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;simple-translate-panel &quot; style=&quot;width: 300px; height: 200px; top: 0px; left: 0px; font-size: 13px;&quot;&gt;
&lt;div class=&quot;simple-translate-result-wrapper&quot; style=&quot;overflow: hidden;&quot;&gt;
&lt;div class=&quot;simple-translate-move&quot; draggable=&quot;true&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;simple-translate-result-contents&quot;&gt;
&lt;p class=&quot;simple-translate-result&quot; dir=&quot;auto&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;simple-translate-candidate&quot; dir=&quot;auto&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>공부/기타</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/368</guid>
      <comments>https://amugelab.tistory.com/368#entry368comment</comments>
      <pubDate>Wed, 28 Jan 2026 08:06:58 +0900</pubDate>
    </item>
    <item>
      <title>2026.01.23 problem solving</title>
      <link>https://amugelab.tistory.com/367</link>
      <description>&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/34466&quot;&gt;CCC 2025 S1. Positioning Peter’s Paintings&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;답은 $2 \min(\max(A, C) + B + D, A + C + \max(B, D))$ 입니다.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/34468&quot;&gt;CCC 2025 S3. Pretty Pens&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;$Q = 0$ 인 경우의 풀이를 먼저 정리합시다. 변호사가 종류를 바꾸지 않을 경우, 각 종류에 대해서 덕의 최댓값을 구한 후 이를 합한 것이 정답이 됩니다. 종류를 바꾸게 된다면, 현재 최댓값으로 선정된 업보 중 덕을 최소화하는 것을 빼서, 선정되지 않은 업보로 교체하는 것이 최적입니다. 즉, 이 때 얻을 수 있는 이득은 (최댓값 중 덕 최솟값) - (최댓값 아닌 업보 중 덕 최댓값) 으로 계산할 수 있습니다. 이 이득 값이 $0$ 이상이면, 최댓값의 합에 이를 더해주면 됩니다. 이렇게 하면 모든 계산을 $O(N)$ 시간에 할 수 있으니, 시간 복잡도는 $O((Q + 1) N)$ 입니다.&lt;/p&gt;
&lt;p&gt;이를 최적화하기 위해서는, 각 종류 $i$ 에 대해서 해당 종류의 업보들을 덕이 증가하는 순서대로 관리하는 &lt;code&gt;std::set&lt;/code&gt; 자료구조를 관리합시다. 또한, 현재 최댓값으로 선정된 업보, 그리고 그렇지 않은 업보들에 대해서도 각각 &lt;code&gt;std::set&lt;/code&gt; 자료구조를 관리합시다. 마지막으로, 현재 &lt;code&gt;std::set&lt;/code&gt; 에 들어간 업보들의 덕 합도 관리합니다. 이 자료구조들이 모두 관리되면, 문제를 해결하는 데 필요한 모든 정보를 계산할 수 있습니다.&lt;/p&gt;
&lt;p&gt;각 업데이트에 따라서, 최대 $O(1)$ 개의 원소가 상태를 바꾸게 됩니다. 업데이트마다 적절히 원소들의 상태를 바꿔주는 것을 구현하면 전체 문제가 $O((N + Q) \log N)$ 시간에 해결됩니다.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/30381&quot;&gt;NOI 2017 P5. Vegetables&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;귀중품을 종류별로 취급하지 않고, 각 귀중품 하나 단위로 취급합시다. 이 경우, 각 귀중품은 팔았을 때의 이득과 해당 귀중품이 만료되는 날짜로 표현 가능합니다. 귀중품을 한 개 이상 팔았을 때 얻게 되는 추가금 $S_i$ 는, 만료되는 날짜가 가장 늦은 귀중품의 이득에 더해주면 처리할 수 있습니다. 귀중품의 개수가 너무 많은 문제는 나중에 처리합시다.&lt;/p&gt;
&lt;p&gt;떠나는 날짜 $T$ 가 고정되어 있을 경우, 그리디하게 문제를 해결할 수 있습니다. 모든 귀중품을 팔 수 있는지를 효율적으로 판별하는 것은, 각 날짜에 대해서 만료되는 날짜가 가장 이른 귀중품을 반복해서 파는 식으로 판별 가능합니다. 이제 어떤 귀중품을 팔 것인지를 결정해야 하는데, 모든 가능한 귀중품을 이득이 큰 순에서 작은 순으로 순회합니다. 만약 팔기로 결정한 귀중품들의 집합에 현재 귀중품을 포함시켜도 $T$ 일 안에 모든 물건을 팔 수 있다면, 해당 물건을 무조건 파는 것으로 결정할 수 있습니다. 이 알고리즘은 올바르며, 증명은 매트로이드를 포함하여 여러 방법이 있습니다.&lt;/p&gt;
&lt;p&gt;이 알고리즘을 단순히 구현하면 시간 복잡도가 큰 것이 문제이니 최적화해야 합니다. 첫 번째로, 모든 귀중품을 팔 수 있는지 여부를 효율적으로 판단해야 합니다. 모든 귀중품을 팔 수 있다는 것은, 모든 날짜 $t$ 에 대해서 만료되는 일자가 $t$ 일 이하인 귀중품이 $Mt$ 개 이하인 것과 동치입니다. 이 조건은 세그먼트 트리를 사용하여 판별할 수 있습니다. 두 번째로, 팔아야 하는 귀중품의 개수가 너무 많아서 일일이 열거할 수 없습니다. 각 종류에 대해서, 해당 종류의 귀중품 중 가장 만료되는 날짜가 늦은 귀중품을 순서대로 뽑는다면, $S_i$ 를 가장 늦은 귀중품에 더했기 때문에 가중치가 높은 순으로도 물건을 뽑게 됩니다. 즉, 현재 해당 종류의 귀중품에 대해서 위 알고리즘이 집합에 귀중품을 추가하지 못했다면, 남은 귀중품들은 만료 일자가 더 짧거나 가격이 더 낮기 때문에 추가하지 못 할 것이며 시도할 필요도 없습니다. 이렇게 각 종류에 대해서 &amp;quot;최적&amp;quot; 의 귀중품만 관리하는 식으로 하면, (집합의 크기) + $n$ 개의 원소에 대해서만 실제로 팔 수 있는지 여부를 체크하게 됩니다. 집합의 크기는 $mT$ 이하이기 때문에, 이렇게 하면 고정된 $T$ 에 대해서 시간 안에 문제를 해결할 수 있습니다.&lt;/p&gt;
&lt;p&gt;모든 $d = 1, 2, \ldots, T$ 에 대해서 문제를 해결하기 위해서는, 날짜를 $1$ 일부터 늘려가면서 동일한 알고리즘을 사용합시다. 즉, 각 귀중품을 가중치가 높은 순으로 결정하는 알고리즘을 사용합니다. 각 귀중품을 처리하는 경우는 총 세 가지입니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$d$ 일 안에 판매가 가능하다면, 판매하고 다음으로 넘어갑니다.&lt;/li&gt;
&lt;li&gt;$d$ 일 안에 판매가 불가능하고, 현재 귀중품을 총 $dT$ 개 판매했다면, $d$ 를 늘린 후 다시 반복합니다.&lt;/li&gt;
&lt;li&gt;$d$ 일 안에 판매가 불가능하고, 현재 귀중품을 $dT$ 개 미만으로 판매하였다면, 아무리 날짜를 늘려도 이 종류의 귀중품은 판매가 불가능합니다. 고로 이 종류의 귀중품 전체를 삭제하고 다음으로 넘어갑니다. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이와 같이 해결하면 고정된 $T$ 의 경우와 크게 다르지 않은 방식으로 문제를 해결할 수 있습니다. 시간 복잡도는 $O((mT + n) \log n)$ 입니다.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/19680&quot;&gt;CEOI 2020. Roads&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;편의상 $y$ 축에 평행한 선분이 없다고 가정합시다. (실제로는 이 경우 때문에 약간의 케이스가 생깁니다.)&lt;/p&gt;
&lt;p&gt;$x$ 좌표가 증가하는 순으로 스위핑합니다. 현재 sweep line에 $k$ 개의 선분이 있다고 하면, 이 선분들은 지금 보고 있는 sweep line을 $k+1$ 개의 구간으로 분할합니다. 목표는, 이렇게 분할된 $k+1$ 개의 구간에 대해서, 이 구간에 있는 임의의 점과 교차 없이 연결해 줄 수 있는 점을 관리해 주는 것입니다. 이를 관리해 주면, 새로 sweep line에 선분이 들어왔을 때, 관리된 점과 해당 선분의 왼쪽 끝점을 연결해 주는 것으로 문제가 해결됩니다.&lt;/p&gt;
&lt;p&gt;편의상, $y = -\infty$ 에 평행한 긴 더미 선분을 넣고, Sweep line에 들어있는 각 선분에 대해서 추가로 &amp;quot;해당 선분의 위쪽 ($y$ 좌표 증가하는 방향) 영역에 선분이 들어왔을 때 교차 없이 이어줄 수 있는 점&amp;quot; 정보를 저장합니다. 선분이 삽입 / 삭제 될 때, 다음과 같이 점을 계산할 수 있습니다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;선분 $L$ 이 삽입된다면, 해당 선분이 갈라서 생긴 $2$ 개의 영역에 대해 &amp;quot;교차 없이 이어줄 수 있는 점&amp;quot; 을 $L$ 의 왼쪽 끝점으로 설정&lt;/li&gt;
&lt;li&gt;선분 $L$ 이 삭제된다면, 삭제됨으로써 새로 생긴 영역에 대해 &amp;quot;교차 없이 이어줄 수 있는 점&amp;quot; 을 $L$ 의 오른쪽 끝점으로 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;std::set&lt;/code&gt;으로 (선분 교차 판정과 유사하게) sweep line을 관리하면 전체 문제가 $O(n \log n)$ 에 해결됩니다.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/33742&quot;&gt;BOJ 33742. Bracket Problem Yet Again&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;$k = 0$ 인 경우를 먼저 해결합시다. 괄호 문자열이 올바르다는 것은 다음 조건과 동치입니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;열린 괄호와 닫힌 괄호의 개수가 정확히 $n/2$ 개이다. &lt;/li&gt;
&lt;li&gt;모든 $1 \le i \le n/2$ 에 대해서, 첫 $2i-1$ 개 괄호 중 최소 $i$ 개의 괄호가 열린 괄호이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 변형된 조건을 사용하면 그리디 알고리즘을 통해서 문제를 해결할 수 있습니다. 문자열의 모든 문자를 닫힌 괄호로 두고, 초기 비용을 $\sum B_i$ 로 설정합시다. 특정 위치의 닫힌 괄호를 열린 괄호로 바꾸기 위한 비용은 $A_i - B_i$ 이니, $1, 3, 5, \ldots, n-1$ 번 위치에서 현재 가능한 선택지 중 최소 비용의 위치에서 닫힌 괄호를 열린 괄호로 전환하면 됩니다. 가능한 선택지를 &lt;code&gt;priority_queue&lt;/code&gt; 에 저장할 경우 시간 복잡도 $O(n \log n)$ 에 $k = 0$ 인 경우가 해결됩니다.&lt;/p&gt;
&lt;p&gt;$k = 1, 2, \ldots, n$ 를 해결하는 데는 위 알고리즘이 크게 도움이 되지 않는 것으로 보입니다. 대신, $k = i$ 인 해를 사용해서 $k = i+1$ 인 해를 구성하는 방식으로 문제를 접근합니다. $k = i$ 에 대한 임의의 최적해 ($0$ 을 설정한 위치 및 괄호 문자열 배정) 이 주어졌을 때, 다음 두 종류의 연산을 활용해서 $k =i+1$ 에 대한 최적해를 얻을 수 있습니다 (증명은 생략):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;특정 위치에 펀치를 가하고, 괄호 문자열을 바꾸지 않음.&lt;/li&gt;
&lt;li&gt;특정 위치에 펀치를 가하고, 해당 위치의 괄호를 뒤집은 후, 이에 따라 다른 위치에 괄호 역시 하나 더 뒤집음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;최적해를 얻기 위해서는 비용 차이가 최대인 연산을 찾아서 이를 수행해 주면 됩니다. 가능한 연산의 경우의 수가 $O(n^2)$ 이니 문제를 다항 시간에 해결할 수 있습니다. 이를 최적화해 주기 위해서는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;특정 위치에 펀치를 가하고, 괄호 문자열을 바꾸지 않는 경우는 쉽게 처리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;특정 위치에 펀치를 가하고, 두 위치의 괄호를 뒤집었다고 합시다. 두 가지 케이스가 있는데, &lt;code&gt;) (&lt;/code&gt; 가 &lt;code&gt;( )&lt;/code&gt; 가 되는 경우, &lt;code&gt;( )&lt;/code&gt; 가 &lt;code&gt;) (&lt;/code&gt; 가 되는 경우가 있습니다. &lt;ul&gt;
&lt;li&gt;첫 번째 케이스를 올바른 괄호 문자열에 적용할 경우 그 결과는 항상 올바른 괄호 문자열이니, 비용 합만 세그먼트 트리 노드에 잘 관리하면 됩니다.&lt;/li&gt;
&lt;li&gt;두 번째 케이스를 적용할 때는, 두 괄호 사이의 높이가 항상 $2$ 이상이어야만 합니다. 세그먼트 트리 노드에 구간의 괄호 높이 최솟값을 관리하고, 두 괄호 사이의 높이가 최솟값일 때 합치는 것을 금지한 케이스 / 두 괄호 사이의 높이가 최솟값일 때 합치는 것을 금지하지 않은 케이스를 따로 관리해 주면 됩니다. 이 값을 관리하기 위해서는, 특정 괄호가 구간의 왼쪽 / 오른쪽에서 최솟값만 사용해서 도달 가능한지 아닌지의 정보를 저장해야 합니다. 이 부분 때문에 구현이 다소 까다롭습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;괄호를 뒤집은 케이스의 경우 구간의 높이가 $+2$ 혹은 $-2$ 되기 때문에, 이를 Lazy propagation으로 처리해 줍니다. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;위 풀이를 세그먼트 트리로 구현하면 $O(n \log n)$ 시간에 문제가 해결됩니다. 코치의 코드에서는, 두 노드의 덧셈 연산을 구현하는 부분이 그 외 모든 부분을 합한 것보다 코드 줄이 많습니다.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/33185&quot;&gt;ICPC 2023 Tehran H. Star Wars&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;$dp[i][j]$ 를, 현재 흰색 말이 $(i, j)$ 에 있을 때 여기서 이동해서 잡을 수 있는 검은색 말의 최댓값으로 정의합시다. $dp[i][j]$는, $dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1]$ 을 사용해서 계산할 수 있습니다. 이 때, 다음 칸이 보드 밖을 벗어나거나 흰색 말을 포함하고 있으면 계산에 포함하지 않도록 유의합시다. 모든 흰색 말이 있는 칸에 대해서 $dp[i][j]$ 의 최댓값을 취하면 됩니다. 시간 복잡도는 $O(nm)$ 입니다. &lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/3338&quot;&gt;CEOI 2005. Depot Rearrangement&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;각 숫자가 정확히 어느 위치에 들어가야 하는지를 정하기가 어렵지만, 각 숫자가 정확히 어느 위치에 들어가야 하는지를 (예를 들어 brute-force 등으로) 알 수 있다고 합시다. 이 경우, 각 수의 초기 위치에서 목표 위치로 방향 간선을 이으면, 사이클의 합집합 형태의 그래프를 얻게 됩니다. 이 경우, 길이 $1$ 의 사이클은 무시해도 되고, 그 외 길이 $l$ 의 사이클은 $l+1$ 번의 작업을 통해서 정렬할 수 있습니다. (예를 들어 길이 $2$ 의 사이클은 $\text{swap}$ 연산의 구현과 동일하게 처리 가능하며, 길이 $3$ 이상도 유사하게 가능합니다.) 여기서 얻을 수 있는 교훈은, 수들은 가능하면 해당 위치에 가만히 있는 것이 좋으며 (길이 $1$ 의 사이클), 만약 해당 수를 이동시켜야 한다면 가능한 적은 &amp;quot;사이클&amp;quot; 을 이루면서 이동시키는 것이 낫다는 것입니다. &lt;/p&gt;
&lt;p&gt;배열을 $n$ 개의 길이 $m$ 구간으로 쪼갭시다. 각 구간에서 숫자들은 $0$ 번 등장하거나, $1$ 번 등장하거나, $2$ 번 이상 등장합니다. $1$ 번 이상 등장하는 수들은, 정확히 하나씩 해당 구간에 남겨둡시다. 이렇게 할 경우, 해당 구간을 떠나야 하는 숫자들(의 위치) 와, 해당 구간에 들어와야 하는 숫자들을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;정점 $n + m$ 개의 방향 그래프를 만듭시다. 이 중 $n$ 개의 정점은 각 구간에 대응되고, $m$ 개의 정점은 각 숫자에 대응됩니다. 어떠한 구간이 특정 숫자를 필요로 한다면, 숫자에서 구간을 향하게 방향 간선을 이어주고, 어떠한 구간이 특정 숫자를 버리고 싶다면, 구간에서 숫자를 향하게 방향 간선을 이어줍니다. 그래프의 모든 정점에 대해, indegree와 outdegree가 동일하기 때문에, 각 컴포넌트에 대해서 오일러 투어가 존재합니다. 오일러 투어를 계산한 후, 얻은 사이클에 따라서 각 숫자들을 이동시켜주면 문제가 해결됩니다. 시간 복잡도는 $O(nm)$ 입니다. &lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/30956&quot;&gt;CERC 2023 L. Labelled Paths&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;고정된 $t$ 에 대해서 문제를 해결해 봅시다. $F[v]$ 를, $v \rightarrow t$ 로 가는 모든 경로 중 라벨의 사전순 최솟값으로 정의합시다. $s(v \rightarrow w)$ 를 $v \rightarrow w$ 간선의 라벨이라고 할 때, $F[v] = \min_{v \rightarrow w} (s(v, w) + F[w])$ 라는 점화식이 성립합니다. 다음 점 $w$ 를 고정했을 경우 $w \rightarrow t$ 로 가는 경로 중 사전순 최소만 고려하면 되기 때문입니다.&lt;/p&gt;
&lt;p&gt;이 점화식을 단순히 계산하기에는 $F[v]$ 의 길이가 너무 길어질 수 있습니다. 하지만, 문자열 자체를 저장하지 않고, 대신 $F[v]$ 의 최솟값이 나오는 경로를 이루는 각 부분 문자열을 리스트 형태로 저장할 수 있습니다. 각 리스트의 길이는 최대 $O(n)$ 이니, 충분히 저장할 수 있습니다. 두 리스트를 비교하는 것은, 만약 두 부분 문자열이 $S[i_1:i_2], S[j_1:j_2]$ 가 같은지 여부를 $O(1)$ 시간 안에 판별할 수 있으면, 문자열을 왼쪽에서 오른쪽으로 보면서 같은지를 확인하다가, 달라지는 부분문자열의 위치에서 이분탐색을 해서 다른 지점을 찾는 식으로 리스트의 비교를 $O(n + \log k)$ 시간에 구현할 수 있습니다. 임의의 두 부분 문자열이 같은 지는 해싱이나 Suffix Array 등을 사용하여 구현할 수 있습니다.&lt;/p&gt;
&lt;p&gt;각 정점 $v$ 에 대해서 리스트 비교 연산을 $deg(v)$ 번 수행해야 하고, 각 비교가 $O(n)$ 시간에 가능하니, 고정된 $t$ 에 대해 문제를 $O(nm)$ 시간에 해결할 수 있습니다. 이를 모든 $t$ 에 대해 반복하면 전체 문제가 $O(n^2 m)$ 시간에 해결됩니다.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/33827&quot;&gt;PA 2025 4-2. Zbieranie klocków&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;체스말을 제거할 수 없다는 것은, 체스말이 다음 구조 중 하나에 속한다는 것과 동치임을 증명할 수 있습니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;체스말로 이루어진 $2 \times 2$ 격자&lt;/li&gt;
&lt;li&gt;체스말로 이루어진 계단 형태의 경로 (가로/세로가 반복해서 등장) -- 이 때, 경로의 시작과 끝은 모두 $2 \times 2$ 격자 형태를 이룸. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;예를 들어, 아래 네 형태는 위에서 말한 계단 형태의 구조의 예시입니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;##....     ##....    ....##     ....##
###...     ###...    ...###     ...###
..##..     ..##..    ..##..     ..##..
...###     ...##.    ###...     .##...
....##     ....##    ##....     ##....
           ....##               ##....&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이 성질을 활용해서 고정된 체스말에 대해서 $O(k \log k)$ 시간에 문제를 해결해 봅시다. 먼저, 체스말로 이루어진 $2 \times 2$ 격자 (이제부터 &lt;strong&gt;박스&lt;/strong&gt; 라고 부릅니다) 를 입력에서 모두 찾아줄 수 있습니다. 위에서 서술한 계단 구조는 총 $4$ 가지 형태로 분리될 수 있는데, 일단 $y = x$ 방향으로 향하는 계단인지 $y = -x$ 방향으로 향하는 계단인지로 분리할 수 있고, 또한 계단의 홀짝성에 따라서 분리할 수도 있습니다. 예를 들어, $y = x$ 방향으로 향하는 계단의 경우, 계단의 &amp;quot;위쪽&amp;quot; 선을 $y = x + c$ 라고 했을 때 $c$ 의 홀짝성에 따라서 타입을 달리 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;이렇게 $4$ 가지 형태로 계단을 분리하면, 박스에 속하지 않으면서 계단에 속하는 모든 체스말은 정확히 한 가지 형태의 계단에만 속함을 알 수 있습니다. 고로, 각 계단에 대해서 답을 구한 다음 이를 합쳐주면 됩니다. 각 계단에 대해서 답을 구하는 것은, 박스에 속하는 두 점을 고정하고, 두 점 사이에 있으며 박스에 속하지 않는 점들이 꽉 찬 형태를 이루는지로 확인할 수 있습니다. 예를 들어, $y = x + c$ 형태의 계단일 경우, $(y - x, y + x)$ 기준으로 박스에 속하는 점을 정렬한 후 $y - x$ 가 같은 인접한 쌍 사이가 &amp;quot;꽉 차있는지&amp;quot; 를 확인할 수 있습니다. 고로, 전체 문제를 $4$ 조각으로 분할한 후, 각 조각에 대해서 점들을 정렬하고, 박스에 둘러쌓인 꽉 찬 구간들에 대해서 구간 길이를 합해주면 문제가 해결됩니다.&lt;/p&gt;
&lt;p&gt;쿼리가 들어올 경우:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;매 쿼리마다 최대 $O(1)$ 개의 박스가 추가되고 제거됩니다.&lt;/li&gt;
&lt;li&gt;두 인접한 박스 사이가 꽉 차있는지는, 좌표 압축 후 BIT를 사용하여 판별할 수 있습니다.&lt;/li&gt;
&lt;li&gt;박스에 속하는 체스말이 갱신되는 경우, 인접한 박스 쌍이 최대 $O(1)$ 개 갱신되니, 위 판별을 활용하여 답을 갱신해 줍니다.&lt;/li&gt;
&lt;li&gt;박스에 속하지 않는 체스말이 갱신되는 경우, 해당 체스말을 포함하는 박스 쌍이 정확히 한 개 있으니, 이것이 새롭게 계단을 이루는지 아닌지를 판별하면 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;네 가지 경우를 전부 구현할 필요는 없어서 구현이 생각보다는 간단한 편입니다. 시간 복잡도는 $O((k + q) \log (k + q))$ 입니다.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/33828&quot;&gt;PA 2025 4-3. Piracka Chciwość&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;문제가 다소 어려워 보이지만, 모든 선원이 탈락한 시점에서부터 거꾸로 접근할 경우 간단한 다항 시간 풀이가 있습니다. $dp_{i, j}$ 를, 지금까지 $1, 2, \ldots, i$ 번 선원이 탈락했을 때 $j$ 번 선원이 얻게 되는 금괴의 개수 (탈락한다면 $-\infty$) 로 정의합시다. $dp_{i+1, i+2}, dp_{i+1, i+3}, \ldots, dp_{i+1, n}$ 이 모두 계산되어 있다면, 이번에 $i+1$ 번 선원이 제안을 했을 때 각 선원들이 분배안에 찬성하게 하기 위해 지불해야 할 금괴의 개수는 $\max(0, dp_{i+1, j} + a_j)$ 개 임을 알 수 있습니다. 만약 $\lceil \frac{n-i}{2} \rceil$ 명 이상의 선원을 동의하게 할 만큼의 금괴가 없다면, $i+1$ 번 선원은 탈락하고, 나머지 선원들은 $dp_{i+1, j}$ 개의 금괴를 얻습니다. 그렇지 않다면, $i+1$ 번 선원은 지불해야 할 금괴 수가 최소인 $\lceil \frac{n-i}{2} \rceil - 1$ 명의 선원에게 금괴를 나눠주고, 남은 금괴는 모두 자신이 가집니다. 문제 조건에 의해서, 만약 같은 선원이 요구하는 금괴의 수가 동일하다면 번호가 큰 선원을 우선하여 나눠줍니다.&lt;/p&gt;
&lt;p&gt;이 풀이는 매 분배안을 계산하기 위해 정렬이 필요하기 때문에, 총 $O(n^2 \log n)$ 시간이 걸립니다. 이 풀이를 개선하기 위해서 필요한 관찰은 다음과 같습니다. $A = \max a_i \le 64$ 라 합시다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lemma 1.&lt;/strong&gt; $i$ 번 선원이 제시하는 분배안에서, $i$ 번 선원을 제외한 모든 선원은 최대 $A$개의 금괴를 받는다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; $j$ 를 $dp_{i+1, j} \neq -\infty$ 인 첫 $j$ 라고 정의합시다. 즉, $i$ 번 선원이 탈락한다면, $j$ 번 선원이 제시하는 분배안이 승인됩니다. $j$ 번 선원의 분배안에서는 최대 $\lceil \frac{n-j+1}{2} \rceil$ 명이 금괴를 받습니다. 즉, 최소 $\lfloor \frac{n-j+1}{2} \rfloor$ 명이 금괴를 받지 못합니다. $j &amp;gt; i$ 일 경우 $\lfloor \frac{n-j+1}{2} \rfloor \le \lceil \frac{n-i+1}{2} \rceil - 1$ 가 항상 성립하기에, $i$ 번 선원은 (금괴만 충분하다면) $d_j = 0$ 인 선원들에게만 금괴를 제공하는 분배안도 제안할 수 있습니다. 이 제안에서 각 선원이 최대 $A$개의 금괴를 받으니, 실제 제시되는 분배안에서도 각 선원이 최대 $A$개의 금괴를 받습니다. $\blacksquare$&lt;/p&gt;
&lt;p&gt;Lemma 1에 따라서, 선원 $j$ 를 제외하고 $d_i \le A$ 가 성립합을 알 수 있습니다. $j$를 예외 케이스로 두고, $(a_i, d_i)$ 에 따라서 각 선원들을 분류합시다. 분배안을 계산하기 위해서는 요구하는 금괴 수가 최소인 $\lceil \frac{n-i}{2} \rceil - 1$ 명의 선원의 집합을 알아야 합니다. 이 집합은 요구하는 금괴의 수가 $k$ 미만인 선원들의 전체 집합 + (요구하는 금괴의 수가 정확히 $k$ 인 선원들 중 인덱스가 높은 선원들의 집합) 으로 표현됩니다. 각 $(a_i, d_i)$ 에 대해, 해당 값을 가지는 선원들을 적당한 자료구조에 저장합시다. 요구하는 금괴의 수가 $0, 1, 2, \ldots, A$ 인 선원의 수를 쉽게 $O(A^2)$ 시간에 계산할 수 있으니, 해당 $k$ 가 무엇인지와, $k$개의 금괴를 요구하는 선원이 몇 명 필요한지를 알 수 있습니다 ($z$ 명이라고 합시다). 이 자료구조가 다음 연산을 효율적으로 지원한다면 문제가 해결됩니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$k$ 개의 금괴를 요구하는 선원들 중 인덱스가 높은 $z$ 명의 선원을 골라야 합니다. 대응되는 자료구조가 $A$ 개 있습니다. 각 자료구조에서 &lt;strong&gt;특정 값 이상의 원소의 개수&lt;/strong&gt; 를 빠르게 셀 수 있다면, 이분 탐색을 통해서 문제를 해결할 수 있습니다. 즉, 해당 쿼리가 $O(A \log n)$ 번 필요합니다. &lt;/li&gt;
&lt;li&gt;각 $A$ 개의 자료구조에서 인덱스가 큰 선원들은 $k$ 개의 금괴를 받고 작은 선원들은 $0$ 개의 금괴를 받습니다. 이에 따라 자료구조를 인덱스에 따라서 두 조각으로 &lt;strong&gt;분할&lt;/strong&gt;합시다. 분할 쿼리는 $O(A)$ 번 필요합니다.&lt;/li&gt;
&lt;li&gt;금괴를 받는 선원들은 $(a_i, d_i)$ 가 모두 $(a_i, d_i + a_i)$ 로 변합니다 ($d_i = -\infty$ 인 경우는 예외 처리 필요). 이를 $O(A^2)$ 번 진행해야 합니다.&lt;/li&gt;
&lt;li&gt;금괴를 받지 않는 선원들은 $(a_i, d_i)$ 가 모두 $(a_i, 0)$ 으로 변합니다. 여러 자료구조가 한 자료구조로 합쳐지기 때문에 &lt;strong&gt;병합&lt;/strong&gt; 이 필요합니다. 이를 $O(A^2)$ 번 진행해야 합니다. &lt;/li&gt;
&lt;li&gt;마지막으로 $i, j$ 번 선원을 집합에 &lt;strong&gt;삽입&lt;/strong&gt; 해야 합니다. 최대 $O(1)$ 개입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mergeable segment tree를 사용하면, 각 연산을 $O(\log n), O(\log n), O(1), O(1), O(\log n)$ 시간에 처리할 수 있습니다 (네 번째 연산은 amortized입니다.) 이를 구현하면 전체 문제가 $O(nA \log^2 n + nA^2)$ 시간에 해결되며 AC를 받을 수 있습니다. 필요하지는 않지만, 만약 AC가 나오지 않는다면 추가적으로 다음과 같은 최적화를 진행할 수 있습니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;첫 번째 쿼리는 $A$ 개의 세그먼트 트리를 타고 내려가는 식으로 $O(A \log n)$ 시간에 구현할 수 있습니다. 이를 구현하면 전체 문제가 $O(nA \log n + nA^2)$ 시간에 해결됩니다.&lt;/li&gt;
&lt;li&gt;$d_i \le A$ 이기 때문에, $A$ 개 이상의 분배안을 거친 선원들은 $0$ 개의 금괴를 받는 시점이 언젠가 옵니다. 즉, 최대 $A$ 명의 선원을 제외하면 모든 선원들에 대해서 $d_i$ 는 $a_i$ 의 배수입니다. 이에 따라 서로 다른 $(a_i, d_i)$ 쌍의 수는 최대 $O(A \log A)$ 개가 되어서 전체 문제가 $O(nA \log n + n A \log A)$ 시간에 구현됩니다.&lt;/li&gt;
&lt;li&gt;위 관찰에 따라서 $A$ 명의 선원들을 예외처리하면, 1번 / 2번 쿼리에서 고려해야 할 자료구조의 개수는 $k$ 의 약수 뿐입니다. 이에 따라 전체 문제가 $O(n \sqrt A \log n + n A \log A)$ 시간에 해결됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;관련 있을 수도 있는 글들&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/357&quot;&gt;2025.07.05 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/352&quot;&gt;2025.01.05 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/343&quot;&gt;2024.07.25 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/329&quot;&gt;2023.12.05 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/322&quot;&gt;2023.08.29 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/316&quot;&gt;구간 최장 증가 부분 수열 쿼리 (Part 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/315&quot;&gt;구간 최장 증가 부분 수열 쿼리 (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/308&quot;&gt;2022.12.18 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/296&quot;&gt;2022.07.17 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/285&quot;&gt;2021.12.02 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/277&quot;&gt;2021.07.27 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/276&quot;&gt;Klein&amp;#39;s Algorithm for Computing Edit Distance on Tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/275&quot;&gt;CCO 2019 Shopping Plans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/267&quot;&gt;2021.01.17 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/257&quot;&gt;2020.08.14 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/256&quot;&gt;2020.08.09 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://koosaga.com/244&quot;&gt;2019.12.26 problem solving&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>공부/Problem solving</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/367</guid>
      <comments>https://amugelab.tistory.com/367#entry367comment</comments>
      <pubDate>Fri, 23 Jan 2026 07:36:06 +0900</pubDate>
    </item>
    <item>
      <title>Dynamic Maximal Independent Set</title>
      <link>https://amugelab.tistory.com/366</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;그래프의 최대 독립 집합 문제는, 그래프가 주어졌을 때 최대 크기의 정점 부분집합 $S$를 골라서, $S$ 안에 있는 두 정점을 잇는 간선이 없게끔 하는 문제이다. 이 문제는 NP-complete임이 아주 잘 알려져 있다. 심지어 $O(n^{0.99})$-factor로 approximate할 수 있으면 $\textsf{NP} = \textsf{ZPP}$ 이다 (사실상 $\textsf{P} = \textsf{NP}$ 라는 뜻이다.) 어차피 제대로 못 푸는 문제이니 대신 다음과 같은 그리디 알고리즘을 생각해 볼 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;순열 $\pi$ 를 잡고, 그 순서대로 정점을 순회한다. $\pi$ 는 모든 길이 $n$ 의 순열 중 랜덤하게 샘플.&lt;/li&gt;
&lt;li&gt;만약 현재 정점과 인접한 정점 중 $S$ 에 있는 정점이 없으면 현재 정점을 $S$ 에 넣는다. 아니면 패스.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명한 이유 때문에 이 알고리즘이 최적해는 커녕 approximation도 못 함을 알 수 있지만, 이 알고리즘이 &lt;i&gt;maximal&lt;/i&gt; independent set을 찾음은 알 수 있다. 다시 말해, 이 알고리즘이 리턴한 $S$에 정점 하나를 더 선택했을 경우 $S$ 는 independent set이 아니게 된다. 약간 local maxima같은 느낌이라고 보면 된다. &lt;a href=&quot;https://koosaga.com/319&quot;&gt;Distributed Computing에서는&lt;/a&gt; Maximal IS를 찾으면 $(\Delta + 1)$-coloring을 찾을 수 있다. 이 컨텍스트랑은 좀 다르지만 Maximal IS 자체도 그런 이유로 연구가 많이 되어 있다. Maximal IS를 dynamic하게 관리할 수 있으면 3-approx correlation clustering을 관리할 수 있다는 이상한 Corollary도 있었는데 (&lt;a href=&quot;https://arxiv.org/pdf/1909.03478&quot;&gt;BDHSS19&lt;/a&gt;), &lt;a href=&quot;https://arxiv.org/pdf/2504.12060&quot;&gt;지금은&lt;/a&gt; 별 의미 없을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FOCS'19에 저 문제를 $O(\log^4 n)$ amortized에 푸는 논문이 2개 있었는데 (&lt;a href=&quot;https://arxiv.org/pdf/1909.03478&quot;&gt;BDHSS19&lt;/a&gt;, &lt;a href=&quot;https://ieeexplore.ieee.org/document/8948632/&quot;&gt;Chechik, Zhang '19&lt;/a&gt;) 후자가 꽤 간단해 보여서 이 글에서 설명해 보려고 한다.&lt;/p&gt;
&lt;h1&gt;1. Intro&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 문제가 아무 maximal independent set을 찾는게 아니라 저 순열 $\pi$ 에 대한 Greedy IS를 찾는 것임을 다시 강조한다. 이 문제를 LFMIS라고 부른다. (lexicographically first maximal independent set). 그리고 $\pi$ 는 모든 길이 $n$ 의 순열 중 랜덤하게 샘플되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(u, v)$ 를 잇는 간선이 추가되었다고 하자. 만약 $u, v$ 중 하나라도 LFMIS에 속하지 않으면 아무것도 안 해도 된다. $u, v$ 가 둘다 LFMIS에 속한다고 하고, $\pi(u) &amp;lt; \pi(v)$ 라고 하자. $u$ 는 아무것도 안 해도 되지만, $v$ 는 LFMIS에서 탈락된다. $v$ 가 LFMIS에서 탈락되면서 $v$ 에 인접한 다른 정점들이 LFMIS에 들어오게 될 수 있다. 그에 따라서 다른 정점들은 또 LFMIS에서 탈락될 수 있다. 이런 식으로 연쇄반응이 일어난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(u, v)$ 를 잇는 간선이 제거되었다고 하자. $u, v$ 가 둘 다 LFMIS에 속하는 건 불가능하다. $u, v$ 가 둘 다 LFMIS에 속하지 않았다면 간선 제거 이후에도 속하지 않으니 아무것도 안 해도 된다. $\pi(u) &amp;lt; \pi(v)$ 라고 하자. $u$ 가 LFMIS에 속했다면, $v$ 는 간선 제거 이후 LFMIS에 추가될 여지가 있다. $v$ 가 LFMIS에 속했다면, 간선 제거 이후 $v$ 가 빠질 이유가 생기는 게 아니고 $u$ 가 들어갈 이유가 생기는 것도 아니다. 그래서 아무것도 안 해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 일반성을 잃지 않고 $\pi(u) &amp;lt; \pi(v)$ 라고 하자. $pred_\pi(v)$ 를 $v$ 에 인접한 정점 중 $\pi(v)$ 보다 순서가 앞인 정점들의 집합이라고 하자. 그리고 LFMIS 집합을 $M$ 이라고 하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$(u, v)$ 를 잇는 간선이 추가되었고, ${u, v} \subseteq M$ 이면, $v$ 가 $M$ 에서 제거되어야 한다. 이후 연쇄반응이 있을 수 있다.&lt;/li&gt;
&lt;li&gt;$(u, v)$ 를 잇는 간선이 제거되었고, $u \in M$ 이고, $pred_\pi(v) \cap M = \emptyset$ 이면, $v$ 가 $M$ 에 추가된다. 이후 연쇄반응이 있을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연쇄반응이란 무엇일까? $M$ 이 올바른 LFMIS라는 것은 모든 정점 $v$ 에 대해 다음이 만족한다는 것이다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v \in M$ 일 경우, $pred_\pi(v) \cap M = \emptyset$&lt;/li&gt;
&lt;li&gt;$v \notin M$ 일 경우, $pred_\pi(v) \cap M \neq \emptyset$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트에 따라서 $v$ 가 위 조건을 만족하지 않게 된다면, $v$ 를 $M$ 에서 넣거나 빼야 한다. 이에 따라서 다른 정점들도 $M$ 에 들어가거나 빠지게 된다. $S$ 를, 현재 $M$ 에서의 상태가 확실하지 않은 정점들의 집합이라고 하자. 즉, $S$ 에 있는 정점들은 $M$ 에서의 상태가 바뀔 수 있으나, $S$에 없는 정점들은 추가 행동이 필요하지 않다. 위 업데이트에서 &quot;연쇄반응&quot; 이 필요해질 경우 초기 $S = {v}$ 로 초기화된다. 최종적으로, $S$ 는 다음 조건을 만족해야 한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v \in M$ 일 경우, $pred_\pi(v) \cap S = \emptyset$ iff $v \notin S$.&lt;/li&gt;
&lt;li&gt;$v \notin M$ 일 경우, $pred_\pi(v) \cap (M - S) \neq \emptyset$ iff $v \notin S$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떠한 $v$ 가 저 조건을 만족하지 않는다면, $v$ 를 $S$ 에 넣어야 한다. 저 조건이 모든 정점에 대해 만족할때까지 $S$ 를 최대한으로 키우면, 이후 모든 갱신을 $S$ 에 한정해서 진행해도 된다.&lt;/p&gt;
&lt;h1&gt;2. $S$ 의 성질&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;놀랍게도 다음과 같은 사실이 성립한다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Theorem 1.&lt;/b&gt; 임의의 그래프와 업데이트에 대해 $E[|S|] \le 1$. 기댓값은 모든 순열 $\pi$ 에 대해서 취해졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 사실을 이해하기 위해서는 $\pi, S$ 에 대한 몇가지 구조적 성질을 이해해야 한다. 먼저 정의를 소개한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$S(\pi)$ 를, 현재 그래프와 업데이트를 순열 $\pi$ 에 대해 적용했을 때 반환되는 $S$ 라고 정의하자. 업데이트는 간선 $(u, v)$ 에 대해 적용되었으며 wlog $\pi(u) &amp;lt; \pi(v)$ 이다.&lt;/li&gt;
&lt;li&gt;$M_{old}(\pi)$ 를, 업데이트 전 현재 그래프에서 $\pi$ 에 대한 LFMIS로 정의하자.&lt;/li&gt;
&lt;li&gt;$M_{new}(\pi)$ 를, 업데이트 후 현재 그래프에서 $\pi$ 에 대한 LFMIS로 정의하자.&lt;/li&gt;
&lt;li&gt;$\pi_S$ 를, $\pi$ 에서 $S$ 에 속하는 원소들만 추려낸 부분수열로 정의하자.&lt;/li&gt;
&lt;li&gt;수열 $a, b$ 에 대해 $a + b$ 는 두 수열의 concatenation이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lemma 2&lt;/b&gt;. 임의의 그래프와 업데이트에 대해서, $S(\pi) \neq \emptyset$ 이라고 하자. $\pi_{V - S(\pi)} = \sigma_{V - S(\pi)}, \pi_{S(\pi)} = \sigma_{S(\pi)}$, $\sigma(u) &amp;lt; \sigma(v)$ 를 만족하는 모든 $\sigma$ 에 대해,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$S(\sigma) = S(\pi)$&lt;/li&gt;
&lt;li&gt;$M_{old}(\sigma) = M_{old}(\pi)$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Proof.&lt;/b&gt; 만약에&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\pi(x) + 1 = \pi(y)$ 이며 $x \in S(\pi), y \notin S(\pi)$ 인 임의의 두 $x, y$ 를 교환할 수 있거나&lt;/li&gt;
&lt;li&gt;$\pi(x) + 1 = \pi(y)$ 이며 $x \notin S(\pi), y \in S(\pi)$ 이며 $[x, y] \neq [u,v]$ 인 임의의 두 $x, y$ 를 교환할 수 있으면&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버블 정렬의 요령으로 Lemma 2가 증명됨을 관찰하자. 고로 $\sigma$ 가 저러한 $(\pi(x), \pi(y))$ 를 교환해서 얻은 순열이라고 가정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Part 1.&lt;/b&gt;&lt;br /&gt;먼저 $M_{old}(\sigma) = M_{old}(\pi)$ 임을 증명한다. 정의에 따라, 집합 $M$ 이 LFMIS라는 것은 다음 조건이 성립한다는 것과 동치이다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v \in M$ 일 경우, $pred_\pi(v) \cap M = \emptyset$&lt;/li&gt;
&lt;li&gt;$v \notin M$ 일 경우, $pred_\pi(v) \cap M \neq \emptyset$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$pred_\pi(v) = pred_\sigma(v)$ 가 모든 $v \notin {x, y}$ 에 대해서 성립하니, $v \in {x, y}$ 에 대해서만 해당 사실을 증명하면 된다. 만약 $x, y$ 간에 간선이 없다면, $pred_\pi(v) = pred_\sigma(v)$ 가 $x, y$ 에 대해서도 성립한다. 고로 $x, y$ 간에 간선이 있음을 가정하자. 증명은 $M_{old}(\sigma)$ 의 prefix에 대해 귀납적이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$x \notin M_{old}(\pi), y \notin M_{old}(\pi)$: $pred_\pi(v) \cap M_{old}(\pi) = pred_\sigma(v) \cap M_{old}(\sigma)$ 이라 귀납 가정에 의해 자명.&lt;/li&gt;
&lt;li&gt;$x, y \in M_{old}(\pi)$: 간선이 있어서 가정에 모순.&lt;/li&gt;
&lt;li&gt;$x \notin M_{old}(\pi), y \in M_{old}(\pi)$:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$x \in S(\pi), y \notin S(\pi)$: $x \in pred_\pi(y) \cap S(\pi)$ 이기 때문에 $pred_\pi(y) \cap S(\pi) \neq \emptyset$ 이고, 따라서 $y \in S(\pi)$ 여야 하여 가정에 모순이다.&lt;/li&gt;
&lt;li&gt;$x \notin S(\pi), y \in S(\pi)$: $pred_\sigma(y) \subseteq pred_\pi(y)$ 이니 $y \in M_{old}(\sigma)$ 이다. $pred_\sigma(x) \supseteq pred_\pi(x)$ 이니 $x \notin M_{old}(\sigma)$ 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$x \in M_{old}(\pi), y \notin M_{old}(\pi)$:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$x \in S(\pi), y \notin S(\pi)$: $pred_\pi(y) \cap (M_{old}(\pi) - S(\pi))$ 가 비지 않았다. 여기 속하는 $z$ 는 $x$ 가 아니니, $pred_\sigma(y) \cap M_{old}(\sigma)$ 에 속한다. 고로 $y \notin M_{old}(\sigma)$ 이다. $y \notin M_{old}(\sigma)$ 이니 $x \in M_{old}(\sigma)$ 이다.&lt;/li&gt;
&lt;li&gt;$x \notin S(\pi),y \in S(\pi)$: $pred_\pi(y) \cap (M_{old}(\pi) - S(\pi))$ 가 비었다. 하지만 $x \in pred_\pi(y) \cap (M_{old}(\pi) - S(\pi))$ 이다. 고로 가정에 모순이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Part 2.&lt;/b&gt;&lt;br /&gt;다음으로, $S(\sigma) \supseteq S(\pi)$ 임을 증명한다. $S$ 는 처음에 정점 $v$ 를 추가하는 것에서부터 시작하여 귀납적으로 정의된다. 이 과정에 대해 귀납법을 적용하여, $S(\pi)$ 에 들어가는 모든 정점은 $S(\sigma)$ 에도 들어감을 보인다. $M =M_{old}(\sigma) = M_{old}(\pi)$ 를 뜻한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Base case: $v \in S(\sigma)$ 임을 보이면 된다. $M_{old}(\sigma) = M_{old}(\pi)$, $\sigma(u) &amp;lt; \sigma(v)$ 이다. 고로 간선 추가의 경우는 정의상 자명하다. 간선 삭제를 생각해 보자. 만약 $pred_\sigma(v) \cap M = {u}$ 인 경우 역시 자명하다. $u$ 는 위 집합에서 사라질 수 없으니 저것이 성립하지 않을 수 있는 유일한 경우는 $\sigma$ 에서 $v, w$ 가 스왑된 후 $pred_\sigma(v) \cap M = {u, w}$ 가 성립할 때이다. 이 경우, $v \notin M, w \in M$ 이며 $v \in S(\pi), w \notin S(\pi)$ 이다. $pred_\pi(w) \cap S(\pi) \neq \emptyset$ 이라 $w \in S(\pi)$ 여야 하여 가정에 모순이다.&lt;/li&gt;
&lt;li&gt;Inductive case: $S(\pi)$ 에 새로 들어간 정점 $z$ 를 생각해 보자. 케이스가 두 가지로 나뉜다. $S$ 는 $z$ 가 들어가기 직전의 $S(\pi)$ 를 뜻한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$z \in M$: $pred_\pi(z) \cap S$ 가 비지 않았다. ${z} \cup S$ 의 순서는 $\pi$ 와 $\sigma$ 에서 모두 보존되니, $pred_\sigma(z) \cap S = pred_\pi(z) \cap S$ 라서 $v \in S(\sigma)$ 가 성립한다.&lt;/li&gt;
&lt;li&gt;$z \notin M$: $pred_\pi(z) \cap M = pred_\sigma(z) \cap M$ 임을 증명하면 된다. $z \notin {x, y}$ 일 경우 바로 성립한다. $z = x$ 인 경우를 보자. 이 경우 둘이 달라지기 위해서는 $y \in M$ 이며 $(x, y)$ 간에 간선이 있어야 한다. $y \notin S(\pi)$ 이니, $pred_\pi(y) \cap S(\pi) = \emptyset$ 이다. $x \in pred_\pi(y) \cap S(\pi)$ 이니 가정에 모순이다. $z = y$ 인 경우도 동일하게 증명된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Part 3.&lt;/b&gt;&lt;br /&gt;마지막으로, $S(\sigma) = S(\pi)$ 임을 증명한다. $S$ 가 만족해야 할 조건을 생각해 보자:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v \in M$ 일 경우, $pred_\pi(v) \cap S = \emptyset$ iff $v \notin S$.&lt;/li&gt;
&lt;li&gt;$v \notin M$ 일 경우, $pred_\pi(v) \cap (M - S) \neq \emptyset$ iff $v \notin S$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v \in M$ 일 경우, $pred_\sigma(v) \cap S(\pi) = \emptyset$ iff $v \notin S(\pi)$&lt;/li&gt;
&lt;li&gt;$v \notin M$ 일 경우, $pred_\sigma(v) \cap (M - S(\pi)) \neq \emptyset$ iff $v \notin S(\pi)$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 성립할 경우 $S(\sigma) = S(\pi)$ 임을 볼 수 있다. Part 2에서 $S(\sigma) \supseteq S(\pi)$ 임을 보였기 때문이다. $pred_\pi(v) = pred_\sigma(v)$ 가 모든 $v \notin {x, y}$ 에 대해서 성립하니, $v \in {x, y}$ 에 대해서만 해당 사실을 증명하면 된다. 만약 $x, y$ 간에 간선이 없다면, $pred_\pi(v) = pred_\sigma(v)$ 가 $x, y$ 에 대해서도 성립한다. 고로 $x, y$ 간에 간선이 있음을 가정하자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$x \notin M, y \notin M$: $pred_\pi(v) \cap M = pred_\sigma(v) \cap M$ 이라 자명&lt;/li&gt;
&lt;li&gt;$x, y\in M$: 간선이 있어서 가정에 모순.&lt;/li&gt;
&lt;li&gt;$x \notin M, y \in M$:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$x \in S(\pi), y \notin S(\pi)$: $x \in pred_\pi(y) \cap S(\pi)$ 이기 때문에 $pred_\pi(y) \cap S(\pi) \neq \emptyset$ 이고, 따라서 $y \in S(\pi)$ 여야 하여 가정에 모순.&lt;/li&gt;
&lt;li&gt;$x \notin S(\pi), y \in S(\pi)$: $pred_\pi(x) \cap (M - S(\pi)) \neq \emptyset$ 이면 $pred_\sigma(x) \cap (M - S(\pi)) \neq \emptyset$ 이다. $pred_\pi(y) \cap S(\pi) \neq \emptyset$ 이면 $pred_\sigma(y) \cap S(\pi) \neq \emptyset$ 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$x \in M, y\notin M$:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$x \in S(\pi), y \notin S(\pi)$: $pred_\sigma(x) \cap S(\pi) = pred_\pi(x) \cap S(\pi)$ 이며 $pred_\pi(y) \cap (M - S(\pi)) = pred_\sigma(y) \cap (M - S(\pi))$ 이다.&lt;/li&gt;
&lt;li&gt;$x \notin S(\pi), y \in S(\pi)$: $y \notin M$ 이기 때문에 $pred_\pi(y) \cap (M - S(\pi)) = \emptyset$ 이어야 하는데, $x \in pred_\pi(y) \cap (M - S(\pi))$.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\blacksquare$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lemma 3.&lt;/b&gt; 임의의 그래프와 업데이트에 대해서, $S(\pi) \neq \emptyset$ 이라고 하자. $\pi_{V - S(\pi)} = \sigma_{V - S(\pi)}, \pi_{S(\pi) - {v}} = \sigma_{S(\pi) - {v}}$, $\sigma(u) &amp;lt; \sigma(v)$ 를 만족하는 모든 $\sigma$ 에 대해, 만약 $\sigma_{S(\pi)}$ 의 첫 원소가 $v$ 라면 $S(\sigma) = S(\pi)$ 이고, 그렇지 않다면 $S(\sigma) = \emptyset$ 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Proof.&lt;/b&gt; 첫 원소가 $v$ 인 경우는 Lemma 2에 의해 자명하다. $\pi$ 를, $\sigma_{S(\pi)}$ 에서 $v$ 를 포함하는 prefix를 cyclic shift해서 $v$ 를 맨 앞으로 돌린 순열이라고 하자. 이 $\pi$ 에 대해서만 증명할 수 있다면, Lemma 2에 의해 모든 $\pi$ 에 대해서 증명할 수 있다. $\pi_{S(\pi)} = [v, w, \ldots]$ 라고 하자. $\sigma_{S(\pi)}$ 의 첫 원소는 $w$ 이다. $w$ 와 $v$ 간에 간선이 없다면 $w \notin S(\pi)$ 이기 때문에 $(v, w)$ 사이에 간선이 존재한다. 임의의 업데이트 후, $w$ 가 항상 $M(\sigma)$ 에 속하거나, $S(\sigma) = \emptyset$ 임을 증명할 수 있다. $S(\sigma) \neq \emptyset$ 가 가능한 업데이트 두 종류를 살펴보자:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$(u, v)$ 사이에 간선이 추가되었다고 하자. $v \in M(\pi)$ 였으니, $w \notin M(\pi)$ 이고 $pred_\pi(w) \cap (M - S(\pi)) = \emptyset$ 이다. 따라서 $pred_\pi(w) \cap M \subseteq {v}$ 이고, $pred_\sigma(w) \cap M = \emptyset$ 이다. 고로 $w \in M(\sigma)$ 이다.&lt;/li&gt;
&lt;li&gt;$(u, v)$ 사이에 간선이 제거되었다고 하자. $u \in M(\pi)$, $v \notin M(\pi)$, $pred_\pi(v) \cap M(\pi) = \emptyset$ (업데이트 후) 이다. $w$ 가 $v$ 에서의 연쇄 반응의 즉각적 결과면, $w$ 는 업데이트 전 $M(\pi)$ 에 속한다. 즉, $pred_\pi(w) \cap M(\pi) = \emptyset$ 이다. $pred_\sigma(w)\subseteq pred_\pi(w)$ 이며, $M(\sigma)$ 는 $w$ 의 위치 전까지는 모두 $M(\pi)$ 와 일치하니, $w \in M(\sigma)$ 이다. $\sigma$ 에 대한 업데이트는 $w$ 뒤 정점 $v$ 만 영향을 끼치니 업데이트 후에도 성립한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 $w \in M(\sigma)$ 이다. 이에 따라서 $v \notin M(\sigma)$ 이며 $w \in pred_{\sigma}(v) \cap M(\sigma)$ 이다. 고로 어떤 업데이트도 $v$ 를 $S$ 에 넣을 수 없다. $\blacksquare$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Main Theorem을 증명할 준비가 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Proof of Theorem 1.&lt;/b&gt; 업데이트가 두 정점 $(u, v)$ 사이에 이루어졌다고 하자 ($\pi(u) &amp;lt; \pi(v)$). $S(\pi) \neq \emptyset$ 인 모든 $\pi$ 에 대해서, 다음 집합 $Rot(\pi)$ 를 선언한다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$Rot(\pi) = {\pi^\prime | \pi^\prime_{S(\pi) \setminus {v}} = \pi_{S(\pi) \setminus {v}}, \pi^\prime_{V \setminus S(\pi)} = \pi_{V \setminus S(\pi)}, \pi^\prime(u) &amp;lt; \min_{w \in S(\pi)} \pi^\prime(w) }$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, $E[|S(\pi^\prime)| \mid \pi^\prime \in Rot(\pi)] = 1$ 임을 증명하자. $\pi$ 가 주어졌을 때, $V \setminus S(\pi)$ 가 등장하는 위치를 모두 고정하자. 이 위치가 고정되면, $u$ 와 나머지 $S(\pi)$ 가 어디 등장하는지가 고정되기 때문에, 조건 $\pi^\prime(u) &amp;lt; \min_{w \in S(\pi)} \pi^\prime(w)$ 가 성립하는지 아닌지가 결정된다. 이제 남은 위치에서 $v$ 를 맨 앞에 넣으면 $S(\pi^\prime) = S(\pi)$ 이고, 아니면 $S(\pi^\prime) = \emptyset$ 이다. 맨 앞에 넣을 확률이 정확히 $1/|S(\pi)|$ 이니 기댓값은 $1$ 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제, 서로 다른 두 순열 $\pi_1, \pi_2$ ($S(\pi_1) \neq \emptyset, S(\pi_2) \neq \emptyset$) 에 대해서 $Rot(\pi_1) = Rot(\pi_2)$ 이거나 $Rot(\pi_1) \cap Rot(\pi_2) = \emptyset$ 임을 보인다. 이것이 사실이라면, 모든 순열은 최대 하나의 서로 다른 $Rot$ 에 속하거나, 전혀 안 속하기 때문에 Theorem 1이 증명된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 순열 $\tau$ 가 $Rot(\pi_1) \cap Rot(\pi_2)$ 에 속한다고 하자. $\tau$에서 $v$ 를 빼다가 $u$ 의 바로 뒤에 배정하는 연산을 해도, $\tau$ 는 $Rot(\pi_1) \cap Rot(\pi_2)$ 에 그대로 속한다. $\pi_1$ 에서 $v$ 는 $S(\pi_1)$ 의 맨 앞에 배정되어 있고, 그건 $\tau$ 에서도 마찬가지이니, Lemma 2에 의해서 $S(\pi_1) = S(\tau)$ 이다. 동일한 이유로 $S(\pi_2) = S(\tau)$ 이다. 그리고 $\tau_{S(\tau)} = \pi_{S(\pi_1)}= \pi_{S(\pi_2)}, \tau_{V \setminus S(\tau)} = \pi_{V \setminus S(\pi_1)}= \pi_{V \setminus S(\pi_2)}$ 이다. 따라서 $Rot(\pi_1) = Rot(\pi_2)$ 이다. $\blacksquare$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사한 방식으로 다음을 증명할 수 있다. 이건 당장 필요하진 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Theorem 4.&lt;/b&gt; 임의의 그래프와 업데이트, 그리고 인자 $1 \le C \le A &amp;lt; B \le n$ 에 대해, 대해 $E[|S|] &amp;lt; \frac{n}{B - A}$. 기댓값은 다음을 만족하는 모든 순열 $\pi$ 에 대해 취해졌다: $\pi(u) = C, \pi(v) \in [A+1, B]$.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Proof of Theorem 4.&lt;/b&gt; $\mathcal{E} = {\pi|\pi(u) = C, \pi(v) \in [A+1, B]}$ 라 하자. $S(\pi) \neq \emptyset$ 이며 모든 $\pi$ 에 대해서, 다음 집합 $Rot(\pi)$ 를 선언한다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$Rot(\pi) = {\pi^\prime | \pi^\prime \in \mathcal{E}, \pi^\prime_{S(\pi) \setminus {v}} = \pi_{S(\pi) \setminus {v}}, \pi^\prime_{V \setminus S(\pi)} = \pi_{V \setminus S(\pi)}, A &amp;lt; \min_{w \in S(\pi)} \pi^\prime(w) }$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$E[|S(\pi^\prime)| \mid \pi^\prime \in Rot(\pi)]$ 를 계산하자. 고정된 $\pi$ 에 대해서 $S(\pi)$ 를 올바르게 배정하는 방법은 $(B - A) \times \binom{n - A - 1}{|S| - 1}$ 가지이다. 이 중 $S(\pi)$ 가 비지 않으려면 $v$ 가 맨 앞에 와야 한다. 이를 만족하는 배정의 개수는 $\binom{n - A}{|S|} - \binom{n - B}{|S|}$ 이다. 즉, 기댓값은 $|S| \frac{\binom{n - A}{|S|} - \binom{n - B}{|S|}}{(B - A) \binom{n - A - 1}{|S| - 1}} &amp;lt; \frac{n}{B - A}$ 이다.&lt;br /&gt;이제, 서로 다른 두 순열 $\pi_1, \pi_2$ ($S(\pi_1) \neq \emptyset, S(\pi_2) \neq \emptyset$) 에 대해서 $Rot(\pi_1) = Rot(\pi_2)$ 이거나 $Rot(\pi_1) \cap Rot(\pi_2) = \emptyset$ 임을 보인다. Theorem 1과 동일하게 하는데 $v$ 를 $A+1$ 번째 위치에 배정하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Theorem 5.&lt;/b&gt; 임의의 그래프와 업데이트, 그리고 인자 $1 \le A &amp;lt; B \le n$ 에 대해, 대해 $E[|S|] &amp;lt; \frac{2n}{B - A+1}$. 기댓값은 다음을 만족하는 모든 순열 $\pi$ 에 대해 취해졌다: $A \le \pi(u) &amp;lt; \pi(v) \le B$.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Proof of Theorem 5.&lt;/b&gt; 임의의 $X \neq Y$ 에 대해서 $\pi(u) = X, \pi(v) = Y$ 일 확률은 모두 균등하다. 고로 모든 가능한 $A \le X &amp;lt; Y \le B$ 에 대해서 Theorem 4를 사용하여 기댓값을 구하고 합하면 된다. 계산하면 $\sum_{X = A}^{B} \frac{B - X}{(B-A+1)(B-A)/2} \frac{n}{B - X} &amp;lt; \frac{2n}{B - A + 1}$ 이다.&lt;/p&gt;
&lt;h1&gt;3. $E[|S|] \le 1$ 임만을 사용한 알고리즘&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$|S|$ 의 크기가 작다는 것만으로 효율적인 알고리즘을 얻을 수는 없다. 다만 그래프의 최대 차수가 $\Delta$ 일 경우, $O(|S| \cdot \Delta)$ 시간에 작동하는 알고리즘을 얻을 수는 있다. $|S|$ 의 기댓값이 $1$ 이니 이것만으로 쿼리당 expected $O(\Delta)$ 시간에 작동하는 알고리즘을 얻는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘은 다음과 같다. 초기 $O(\Delta)$ 시간을 소비해서 $v \in S$ 인지를 판별한다. $v \in S$ 라면 $S$ 에 새로운 정점 $v$ 가 삽입되어야 한다. 새로운 정점이 $S$ 에 삽입되면 다음과 같이 추가 삽입이 필요한지를 결정한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v$ 랑 인접하면서 $\pi(w) &amp;gt; \pi(v)$ 인 정점들을 모두 순회한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약 $w \in M$ 이라면, $w$ 를 $S$ 에 삽입한다.&lt;/li&gt;
&lt;li&gt;만약 $w \notin M$ 이고 $v \in M$ 이라면, $w$ 의 카운트를 증가시킨다. 이 카운트가 $|pred_\pi(w) \cap M|$ 과 일치하게 되면, $w$ 를 $S$ 에 삽입한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 정점이 삽입되는데 $O(\Delta)$ 시간이 소모되니 expected $O(\Delta) = O(n)$ 시간에 알고리즘이 작동함을 볼 수 있다. 이제 $S$ 에 있는 정점들의 상태를 변경해야 한다. Lemma 2에 의해서, $S$ 안에 있는 정점들의 상대 순서만 유지할 수 있으면, $\pi_S$ 가 $\pi$ 의 suffix라고 생각해도 무방하다. 고로 $S$ 에 있는 정점들을 순서대로 돌면서, 기존 $M$ 을 거스르지 않고 갱신해 주면 된다. 갱신 이후 $|pred_\pi(w) \cap M|$ 카운터를 갱신에 맞게 조정해 주면 끝이다.&lt;/p&gt;
&lt;h1&gt;4. 차수 줄이기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 알고리즘 을 개선하는 방법은 그래프의 차수를 줄이는 것이다. 이게 무슨 말인지를 다음 Lemma를 통해 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lemma 6.&lt;/b&gt; $G_i$ 를, 그래프 $G$ 에서 $\pi(1), \pi(2), \ldots, \pi(i)$ 까지에 대해서 Greedy MIS를 구한 이후 남은 그래프라고 하자. 구체적으로, $G_i$ 는 $\pi(i) \notin M$ 이면 $G_{i-1}$ 이고, $\pi(i) \in M$ 이면 $G_{i-1}$ 에서 $\pi(i)$ 와 그에 인접한 정점을 모두 지운 그래프이다. $1 - n^{-9}$ 이상의 확률로 $G_i$ 의 최대 차수는 $\frac{10 n \log n}{i}$ 이하이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Proof.&lt;/b&gt; $v \in G_i$ 에 대해서, $v$ 의 최대 차수가 $\frac{10 n \log n}{i}$ 를 초과할 확률을 계산하자. 이는 $v$ 에 인접한 정점이 모두 $\pi$ 에서 $i+1$ 번째 이후로 등장한다는 것과 동치이다. $(1 - \frac{i}{n})^{n/i \times 10 \log n} \le n^{-10}$ 이니, union bound에 따라 $1 - n^{-9}$ 의 확률로 $G_i$ 의 최대 차수는 $\frac{10 n \log n}{i}$ 이하이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적당한 $1 \le k \le n$ 에 대해서, $G_k$ 를 explicit하게 관리하자. 업데이트가 들어오면 다음과 같이 처리한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약 양 끝점 중 하나가 $\pi(1), \pi(2), \ldots, \pi(k)$ 에 속한다면, $O(m)$ 시간에 전부 새로 계산한다.&lt;/li&gt;
&lt;li&gt;만약 양 끝점 모두가 $\pi(k+1), \ldots, \pi(n)$ 에 속한다면, $\tilde{O}(n / k)$ 시간에 위에서 말한 알고리즘대로 갱신해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재계산이 일어나는 확률은 $\frac{k}{n}$ 이니, 이 알고리즘은 $\tilde{O}(m \frac{k}{n} + \frac{n}{k})$ 시간에 동작한다. $k = \frac{n}{\sqrt m}$ 으로 잡으면, $\tilde{O}(\sqrt m)$ 에 각 쿼리를 해결할 수 있다.&lt;/p&gt;
&lt;h1&gt;5. 자료구조 -- 구성 및 정당성&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$O(\log^4 n)$ 시간에 문제를 해결해 보자. 관리하는 자료구조는 사실 앞의 알고리즘과 크게 다르지 않다. 자료구조는, 모든 $0 \le i \le \log n - 1$ 에 대해서, $G_{0} \supseteq G_{1} \supseteq G_{2} \supseteq \ldots \supseteq G_{\log n - 1}$ 을 관리한다. 여기서 $G_i$는, 그래프 $G$ 에서 $\pi(1), \pi(2), \ldots, \pi(2^i - 1)$ 까지에 대해서 Greedy MIS를 구한 이후 남은 그래프이다. (Lemma 6과 다른 정의를 overload하였다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$G_i$ 를 관리한다는 것은 말 그대로 induced subgraph 그 자체를 통으로 관리한다는 것이다. 즉 정점 집합이 있고 각 정점 집합에 인접 리스트 (해시 테이블) 로 간선이 표현된 형태이다. 이렇게 Naive한 표현만으로 전체 문제를 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간선이 추가되는 케이스를 살펴보자. $\pi(u) &amp;lt; \pi(v)$ 이다. 또한 $\pi(u) \in [2^a, 2^{a+1} - 1], \pi(v) \in [2^b, 2^{b+1}- 1]$ 이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;$u \notin M$: $V_i$ 가 전혀 바뀌지 않는다. 그냥 ${u, v} \subseteq V_i$ 인 $G_i$ 에 간선을 추가한다.&lt;/li&gt;
&lt;li&gt;$u \in M, v \notin M$: $v$ 는 $u$ 에 dominate되니, $V_{a+1}, \ldots, V_{\log n - 1}$ 에서 $v$ 를 제거한다. 이 과정에서 인접한 간선들도 제거될 수 있다. 이후 ${u, v} \subseteq V_i$ 인 $G_i$ 에 간선을 추가한다.&lt;/li&gt;
&lt;li&gt;$u \in M, v \in M$: 실제로 MIS가 바뀌는 경우로 이후 설명한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간선이 제거되는 케이스를 살펴보자. $\pi(u) &amp;lt; \pi(v)$ 이다. 또한 $\pi(u) \in [2^a, 2^{a+1} - 1], \pi(v) \in [2^b, 2^{b+1} - 1]$ 이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;$u \notin M$: $V_i$ 가 전혀 바뀌지 않는다. 그냥 ${u, v} \subseteq V_i$ 인 $G_i$ 에 간선을 제거한다.&lt;/li&gt;
&lt;li&gt;$u \in M, v \notin M, pred_\pi(v) \cap M \neq {u}$: 일단 ${u, v} \subseteq V_i$ 인 $G_i$ 에 간선을 제거한다. $V_{a+1}, \ldots, V_{\log n - 1}$ 에서 $v$ 가 $u$ 에만 dominate되었다면, 부활할 가능성이 존재한다. $v \notin V_{a}$ 일 경우 이는 불가능하다. 그렇지 않은 경우 $V_{a}$ 의 이웃들을 모두 순회하면서 $v$ 가 dominate되는 첫 시점을 찾고 이에 맞게 맞는 그래프에 정점 $v$ 와 대응되는 이웃을 추가한다.&lt;/li&gt;
&lt;li&gt;$u \in M, v \notin M, pred_\pi(v) \cap M = {u}$: 실제로 MIS가 바뀌는 경우로 이후 설명한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가/제거 모두에 대해서 1번 케이스는 $O(\log n)$ 시간에 가능하다. 2번 케이스는 $\frac{2^a}{n}$ 의 확률로 $O(\frac{n}{2^a} \log n)$ 의 시간을 사용한다. 후자는 whp로 보장되니 곱하면 $O(\log n)$ 시간이다. 고로 이 두 케이스는 무시하고 3번 케이스만 고려한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3번 케이스의 경우 $S(\pi) \neq \emptyset$ 이다. 고로 해야 할 일은:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$S(\pi)$ 를 계산&lt;/li&gt;
&lt;li&gt;$S(\pi)$ 안에서 $M$ 이 어떻게 갱신되는지 확인하고 이를 자료구조에 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5.1. $S(\pi)$ 계산하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙을 다시 상기해보면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v \in M$ 일 경우, $pred_\pi(v) \cap S \neq \emptyset$ iff $v \in S$&lt;/li&gt;
&lt;li&gt;$v \notin M$ 일 경우, $pred_\pi(v) \cap (M - S) = \emptyset$ iff $v \in S$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 가지 알아둘 것은 $S \subseteq V_b$ 라는 것이다. $S - V_b$ 에 속하는 정점이 있다면 이는 절대 $M$ 에 속할 수는 없고, $M$ 에 이웃한 정점일텐데 그렇게 되면 $pred_\pi(v) \cap (M - S)$ 가 빌 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선순위 큐 $T$를 관리하자. $T$는 $S$에 들어갈 수 있는 후보 정점을 $\pi(v)$ 순으로 관리한다. 초기에는 $T = {v}$ 로 시작하며, $T$ 가 비지 않을 때까지 다음을 반복한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\pi(v)$ 를 최소화하는 $z$ 를 $T$ 에서 뽑는다. 이미 처리한 정점이면 넘어간다.&lt;/li&gt;
&lt;li&gt;만약 $z \in M$ 이면
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$pred_\pi(z) \cap S \neq \emptyset$ 이라서 들어갔을 것이기 때문에 $z$ 를 $S$ 에 삽입한다.&lt;/li&gt;
&lt;li&gt;$\pi(z) \in [2^k, 2^{k+1} - 1]$ 이라고 하자. 정의상 $z \in V_k$ 이다.&lt;/li&gt;
&lt;li&gt;$V_k$ 에서 $\pi(w) &amp;gt; \pi(z)$ 인 모든 이웃 $w$ 를 $T$ 에 넣는다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$V_b$ 를 안 봐도 되는 이유는, $(V_b - V_k) \cap M$ 은 어차피 우선순위가 더 낮고, $(V_b - V_k) \setminus M$ 은 (a) $M \setminus S$ 에 속하는 이웃한테 dominate당해서, 어차피 못 올라오거나 (b) $M \cap S$ 에 속하는 이웃한테 dominate당해서, 그러한 이웃 중 $\pi$ 가 최소화되는 이웃을 보는 시점에 이미 $T$ 에 들어갔기 때문이다. (다시 말해, $pred_\pi(w) \cap M \subseteq S$ 를 만족하는 $w \in V_b$ 라면, 저 원소 중 첫 원소가 $S$ 에 들어갈 때 그 시점의 $V_k$ 에서는 무조건 살아 있고, 그래서 그 시점에 처리된다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아니면
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$pred_\pi(z) \cap (M - S) = \emptyset$ 인지를 확인해야 한다. 이를 위해:&lt;/li&gt;
&lt;li&gt;$V_b$ 에서 $\pi(w) &amp;lt; \pi(z)$ 인 모든 이웃 $w$ 를 보고, 이 중 $M-S$ 에 속하는 이웃이 있는지 확인한다. 이러한 이웃이 있으면 넘어간다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$V$ 에서 볼 필요는 없다. $(V - V_b) \cap M$ 이 비지 않았다면 어차피 $z \notin V_b$ 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아니면 $z$ 를 $S$ 에 삽입하고, $V_b$ 에서 $\pi(w) &amp;gt; \pi(z)$ 인 모든 이웃 $w$ 를 $T$ 에 넣는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘에서 자명하지 않은 부분은 이미 다 설명했으니 $S(\pi)$ 는 올바르게 계산됨을 볼 수 있다. $T_0$ 을 $T$ 에 한번이라도 존재했던 정점의 개수라고 하면, 알고리즘의 시간 복잡도는 $|T_0| \cdot O(\frac{n \log n}{2^b})$ 이다. $|T_0|$ 의 상한은 이후 다룬다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5.2. $M$ 갱신하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$S(\pi)$ 를 계산했으니, 인접 리스트에 간선을 추가/제거하고, 실제 $M$ 이 어떻게 갱신되는지를 계산하자. $S(\pi)$ 에 있는 정점들을 $\pi(v)$ 순서대로 순회한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 $v$ 는 확실히 $M$ 에서 위치를 바꾼다.&lt;/li&gt;
&lt;li&gt;$z \notin M$ 일 경우, $pred_\pi(z) \cap M \subseteq S$ 이다. 고로 $pred_\pi(z) \cap S$ 에서 $M$ 에 속하는 원소가 있는지를 확인하면 된다.&lt;/li&gt;
&lt;li&gt;$z \in M$ 일 경우, $pred_\pi(z) \cap (M - S)$ 는 어차피 갱신이 없으니 역시 $pred_\pi(z) \cap S$ 에서 $M$ 에 속하는 원소가 있는지를 확인하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 $S(\pi)$ 의 induced subgraph만 가지고도 MIS를 확인할 수 있다. 사실 $S(\pi)$ 의 induced subgraph에서 LFMIS를 구하는 것과 동치이고, $S(\pi)$ 밖은 신경쓸 필요가 없다. induced subgraph는 $V_b$ 에 포함되어 있으니 이를 통해 $|S(\pi)| \cdot O(\frac{n \log n}{2^b}) \le |T_0| \cdot O(\frac{n \log n}{2^b})$ 시간에 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$S(\pi)$ 에서 갱신되는 모든 정점 $v$ ($\pi(v) \in [2^{k}, 2^{k+1} - 1]$) 에 대해:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$v$ 가 새롭게 $M$ 에 들어가게 된다면, $G_{k+1}, G_{k+2}, \ldots$ 에 대해 $v$ 와 $v$ 의 이웃을 모두 제거한다. $v$ 의 이웃은 $V_k$ 에 있는 것을 순회하면 된다.&lt;/li&gt;
&lt;li&gt;$v$ 가 $M$ 을 떠나게 된다면, $v$ 와 $v$ 의 이웃이 부활할 가능성이 존재한다. 이 정점들이 $V_k$ 에 속하지 않을 경우 이는 불가능하다. 그렇지 않은 경우 $V_{k}$ 의 이웃들을 모두 순회하면서 해당 정점이 dominate되는 첫 시점을 찾고 이에 맞게 맞는 그래프에 정점 $v$ 와 대응되는 이웃을 추가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$T_1$ 을, 여기서 순회된 $v$ 와 $v$ 의 이웃들의 개수 합이라고 하자. 정점의 추가/제거는 $O(\frac{n \log n}{2^b})$ 시간에 할 수 있으니, 이 알고리즘은 $|T_1| \cdot O(\frac{n \log n}{2^b})$ 시간에 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 알고리즘 전체의 설명이 끝났다. 이 알고리즘이 왜 효율적인지 알아보자.&lt;/p&gt;
&lt;h1&gt;6. 시간 복잡도 분석&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크게 네 단계가 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$|S(\pi)|$ 의 크기 bound.&lt;/li&gt;
&lt;li&gt;$|T_0|$ 의 크기를 $O(|S(\pi)| \log^2 n)$ 으로 bound.&lt;/li&gt;
&lt;li&gt;$|T_1|$ 의 크기를 $O(|S(\pi)| \log^2 n)$ 으로 bound.&lt;/li&gt;
&lt;li&gt;모두 합치기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $\pi$ 의 확률 공간은 $\mathcal{E} = {\pi \mid \pi(u) &amp;lt; \pi(v), \pi(u) \in [2^a, 2^{a+1} - 1], \pi(v) \in [2^b, 2^{b+1}- 1]}$ 에서 uniform randomly이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 단계는 아주 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lemma 7.&lt;/b&gt; $E[|S(\pi)|] \le O(\frac{n}{2^b})$.&lt;br /&gt;&lt;b&gt;Proof.&lt;/b&gt; Theorem 4/5에 의해 자명.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 두 번째 단계로 넘어간다. $\Omega_{\pi} = {\pi^\prime \mid S(\pi^\prime) = S(\pi), \pi_{S(\pi)} = \pi^\prime_{S(\pi)}, \pi_{V -S(\pi)} = \pi^\prime_{V -S(\pi)}, \pi^\prime \in \mathcal{E}}$ 로 정의하자. 먼저 $E[|T_0| \mid \Omega_\pi]$ 를 bound하면서 시작할 것이다. 다음과 같은 사실들을 사용한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;임의의 $\sigma \in \Omega_\pi$ 에 대해 $S(\sigma) = S(\pi)$ 이며 $M_{old}(\sigma) = M_{old}(\pi)$ (Lemma 2)&lt;/li&gt;
&lt;li&gt;임의의 $\sigma \in \Omega_\pi$ 에 대해 $\sigma(v) \leq \min_{w \in T_0} \sigma(w)$ (알고리즘에 의해 자명)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lemma 8.&lt;/b&gt; 임의의 $k &amp;gt; b$ 에 대해서, $E[|(S \setminus {v}) \cap \sigma[2^b, 2^k-1]| \mid \sigma \in \Omega_\pi] &amp;lt; \frac{2^k|S|}{n}$&lt;br /&gt;&lt;b&gt;Proof.&lt;/b&gt; $\sigma(v) \in [2^b, 2^{b+1} - 1]$ 이다. $\sigma(v)$ 의 위치를 $j$ 로 고정하자. 그러면 $j + 1, \ldots, n$ 에서 $|S| - 1$ 개를 뽑는 각 조합과 $\Omega_\pi$ 에 있는 순열 간에 일대일 대응이 가능하다. 이 중 $j + 1, \ldots, 2^k - 1$ 에서 뽑힌 위치의 기댓값을 계산해야 한다. 그 기댓값은 $\frac{2^k - 1 - j}{n - j} (|S| - 1)$ 이고 이는 $\frac{2^k}{n}|S|$ 미만이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lemma 9.&lt;/b&gt; $E[|T_0| \mid \Omega_\pi] \le O(|S| \log^2 n) + O(n \log n /2^b)$&lt;br /&gt;&lt;b&gt;Proof.&lt;/b&gt; $E[|T_0 \setminus S| \mid \Omega_\pi] \le O(|S| \log^2 n) + O(n \log n /2^b)$ 을 증명하면 된다. $T_0 \setminus S$ 의 원소들은 모두 5.1의 알고리즘에 따라서 $V \setminus M$ 에 속한다. $V \setminus M$ 에 있는 원소가 $T_0$ 에 들어갈 가능성은, $z \in M$ 인 원소를 처리할 때 $V_k$ 에 속하는 모든 이웃을 넣는 과정 뿐이다. 즉, $T_0 \setminus S$ 의 크기는, $S$ 를 이루는 각 원소들의 $O(\frac{n \log n}{2^k})$ 의 합으로 upper bound된다. Lemma 1에 의해, $E[|S \setminus {v} \cap \sigma[2^{k-1}, 2^k - 1]| \mid \sigma \in \Omega_\pi] &amp;lt; \frac{2^k|S|}{n}$ 이다. 고로 $S \setminus {v}$ 를 이루는 각 원소들의 $O(\frac{n \log n}{2^k})$ 의 합은 $O(|S| \log^2 n)$ 이다. $v$ 에서 $O(n \log n/2^b)$ 개의 이웃을 넣으니 합하면 Lemma 9가 증명된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세번째 단계는 두 번째 단계랑 똑같이 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Lemma 10.&lt;/b&gt; $E[|T_1| \mid \Omega_\pi] \le O(|S| \log^2 n) + O(n \log n /2^b)$&lt;br /&gt;&lt;b&gt;Proof.&lt;/b&gt; $T_1$ 의 크기는, $S$ 를 이루는 각 원소들의 $O(\frac{n \log n}{2^k})$ 의 합으로 upper bound된다. 고로 Lemma 9의 증명을 그대로 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 최종 Theorem을 증명할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Theorem 11.&lt;/b&gt; 알고리즘은 expected $O(\log^4 n)$ 시간에 작동한다.&lt;br /&gt;&lt;b&gt;Proof.&lt;/b&gt; Lemma 9/10에 의해 $E[|T_0 \cup T_1| \mid \Omega_\pi] \le O(|S| \log^2 n) + O(n \log n/2^b)$ 이다. 또한 $\Omega_\pi$ 는 항상 동일한 집합이거나 서로소 집합이다. Theorem 4의 증명을 사용해도 되고, 더 간단하게 얘기하면 $S(\pi) \neq \emptyset$ 인 모든 $\pi$ 에 대해, $\Omega_\pi$ 는 equivalence class를 이룬다. ($V\setminus S$ 다음에 $S$ 가 오도록 정렬하는 canonical form을 이룰 수 있기 때문). 고로 서로 다른 $\Omega_\pi$ 들에 대해서 다음을 구하면 된다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\sum_{\Omega_\pi} E[|T_0 \cup T_1| \mid \Omega_\pi] \cdot Pr[\pi \in \Omega_\pi \mid \pi \in \mathcal{E}]$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\sum_{\Omega_\pi} E[|T_0 \cup T_1| \mid \Omega_\pi] \cdot Pr[\pi \in \Omega_\pi \mid \pi \in \mathcal{E}]$&lt;br /&gt;$\le \sum_{\Omega_\pi} O(|S(\pi)| \log^2 n + n \log n / 2^b) \cdot Pr[\pi \in \Omega_\pi \mid \pi \in \mathcal{E}]$&lt;br /&gt;$\le O(n \log n /2^b) + \sum_{\Omega_\pi} O(|S(\pi)| \cdot Pr[\pi \in \Omega_\pi \mid \pi \in \mathcal{E}] \cdot \log^2 n)$&lt;br /&gt;$\le O(n \log n / 2^b) + O(n \log^2 n / 2^b)$ (by Lemma 7)&lt;br /&gt;$\le O(n \log^2 n / 2^b)$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5장과 종합하면 고정된 $b$ 에 대해서 시간 복잡도는 expected $O(n^2 \log^3 n / 2^{2b})$ 이다. 한편, 주어진 쿼리가 해당 $b$ 를 얻을 확률은 최대 $O(2^{2b} / n^2)$ 이다. 모든 $b$ 에 대해 합하면 $O(\log^4 n)$ 으로 계산된다.&lt;/p&gt;</description>
      <category>공부/CS theory</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/366</guid>
      <comments>https://amugelab.tistory.com/366#entry366comment</comments>
      <pubDate>Fri, 23 Jan 2026 07:14:32 +0900</pubDate>
    </item>
    <item>
      <title>Dynamic $(\Delta+1)$-coloring</title>
      <link>https://amugelab.tistory.com/365</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최대 차수가 $\Delta$ 인 그래프를 $(\Delta + 1)$ 개의 색으로 색칠하는 문제를 생각해 보자. 이 문제는 정점을 아무 순서로 보면서 남는 색을 배정해 주면 선형 시간에 쉽게 해결할 수 있다. 그러니 간선이 추가되고 삭제되는 쿼리를 넣어보자. 쿼리당 $O(\Delta)$ 시간에 문제를 해결하는 것은 쉽다:&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;간선이 추가되었고, 만약 두 정점의 색이 다르다면, 한 정점에 대해서 남는 색을 배정해 준다. 남는 색을 찾아줘야 하기 때문에 $O(\Delta)$ 시간이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 빠른 알고리즘은 없을까? 이 문제를 처음 다룬 것은 내가 알기로는 &lt;a href=&quot;https://arxiv.org/abs/1711.04355&quot;&gt;Bhattacharya et al. 2018&lt;/a&gt; 이고, 당시에는 expected amortized $O(\log \Delta)$ 시간이 필요했다. 자료구조 자체도 다소 복잡한 편에 속한다. 현재는 expected worst-case $O(1)$ 시간에 하는 방법 (&lt;a href=&quot;https://arxiv.org/pdf/2512.09218&quot;&gt;Ghaffari, Koo 2025&lt;/a&gt;) 이 존재한다. 이 알고리즘은 저번 학기 지도교수님과 내가 함께 작업한 알고리즘이다. 쉬운 작업은 아니었지만, 결론적인 알고리즘은 매우 간단하다. PS 좀 한 사람 아무나 잡고 10분 안에 설명할 수 있을 거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 정점에 다음과 같은 방식으로 랜덤하게 라벨을 배정한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;절반의 정점을 랜덤하게 잡은 후 라벨 $0$ 을 배정한다.&lt;/li&gt;
&lt;li&gt;그리고 남은 정점 중 절반을 랜덤하게 잡은 후 라벨 $1$ 로 배정한다.&lt;/li&gt;
&lt;li&gt;그리고 남은 정점 중 절반을 랜덤하게 잡은 후 라벨 $2$ 로 배정한다.&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 정점 $v$ 에 대해서, 인접한 노드 중 라벨이 $k$ 이상인 노드의 수 기댓값은 최대 $\Delta \cdot 2^{-k}$ 임을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 정점 $v$ 에 대해서, 해당 정점과 인접하면서 레벨이 해당 정점 이하인 색의 리스트를 관리한다. $nb_{\leq}(v)$ 를 $v$ 보다 레벨이 작거나 같은 $v$ 의 이웃의 수라고 하면, 리스트의 크기는 $nb_\leq(v)$ 이하이다. 즉, 리스트에 등장하지 않는 색의 개수는 최소 $\Delta + 1 - nb_\leq(v)$ 개이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간선 삭제시에는 아무것도 할 필요가 없다. 간선이 추가되었는데 두 정점의 색이 다르다면 이것도 아무것도 할 필요가 없다. 그러니까 간선이 추가되었는데 두 정점의 색이 같은 경우가 문제다. 두 정점 중 가장 최근에 색이 바뀐 정점을 잡고 이 정점에 대해서 새 색을 부여한다. 이 과정을 Recolor라고 부르자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Recolor는 어떻게 할까? 이 리스트에서 등장하지 않는 색을 랜덤하게 샘플링하자. 등장하지 &lt;i&gt;않는&lt;/i&gt; 색을 샘플링해야 하는데, 해시 테이블 장난질을 하면 $O(1)$ 에 가능하다. 샘플링한 후 다음과 같은 작업을 하자:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 색을 가진 이웃의 개수가 몇 개인지를 Naive하게 세어 준다.&lt;/li&gt;
&lt;li&gt;해당 색을 가진 이웃이 $0$ 개면 그냥 그 색을 먹으면 된다.&lt;/li&gt;
&lt;li&gt;해당 색을 가진 이웃이 $1$ 개면, 그 이웃의 색을 먹고, 그 이웃을 재귀적으로 Recolor한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 이웃의 레벨은 나보다 무조건 높다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;해당 색을 가진 이웃이 $2$ 개 이상일 확률은 $1/2$ 이하이다. 그래서 그 경우에는 다시 샘플링한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$1/2$ 초과일 경우 $\frac{1}{2}(\Delta + 1 - nb_\leq(v)) \times 2$ 개 초과의 이웃이 나보다 레벨이 크다. 그래서 차수가 $\Delta$ 보다 커진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$v$ 의 라벨을 $l(v)$ 라고 하자. $v$를 Recolor하는 횟수 기댓값이 $O(1)$ 이다. 거기에 naive하게 이웃을 도는 것까지 생각해 보면 한 정점을 Recolor하는데 드는 시간은 $O(\Delta \cdot 2^{-l(v)})$ 이다. $1$ 개일 때 움직이는 이웃은 나보다 레벨이 높기 때문에 이후의 연산량 기댓값은 현재의 $1/2$ 이다. 고로 조화급수에 따라서 알고리즘 전체에서 써야 할 시간 기댓값은 $O(\Delta \cdot 2^{-l(v)})$ 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 생각해 보면 각 색이 샘플링될 확률이 최대 $1/(\Delta \cdot 2^{-l(v)})$ 이다. 왜냐면 샘플링 가능한 색의 개수가 $v$ 보다 레벨이 큰 이웃의 수보다 크기 때문이다. 이 확률이, $v$ 에 인접한 간선을 추가했을 때 반대쪽 끝점과 색이 똑같을 확률보다 크거나 같다. 그래서 애초에 Recolor가 불릴 확률이 최대 $1/(\Delta \cdot 2^{-l(v)})$ 이다. 곱하면 기댓값이 $O(1)$ 이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명한 알고리즘을 &lt;b&gt;그대로&lt;/b&gt; 구현하면 갱신 시간 기댓값이 amortized $O(1)$ 이다. 심심할때 일부 정점을 랜덤하게 재색칠하면 amortized를 뗄 수 있다. 결론을 내는 과정에서 대부분의 확률 변수를 독립 변수라고 가정했기 때문에, 엄밀한 증명은 아니다. 엄밀한 증명이 당연히 안 궁금하겠지만, 혹시 궁금하면 원문을 읽어보면 된다.&lt;/p&gt;</description>
      <category>공부/CS theory</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/365</guid>
      <comments>https://amugelab.tistory.com/365#entry365comment</comments>
      <pubDate>Mon, 12 Jan 2026 02:42:44 +0900</pubDate>
    </item>
    <item>
      <title>Decision Tree Complexity for 3SUM</title>
      <link>https://amugelab.tistory.com/364</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘을 모델링하는 여러 방법 중 하나는 Decision Tree이다. Decision Tree에서 알고리즘은 입력의 특정 부분을 읽어서 읽은 결과에 따라 YES / NO verdict를 결정하고, 비교 결과에 따라서 두 상태 중 하나로 분기한다. 예를 들어서 비교 정렬에서는 $x_i, x_j$ 를 읽은 다음에, $x_i - x_j$ 의 부호에 따라서 YES / NO verdict를 결정하고, 이 결과에 따라서 두 개의 자식 상태 중 하나로 분기한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Decision Tree의 최대 깊이는 보통 알고리즘 시간 복잡도의 lower bound를 구성하는데 자주 쓰인다. 비교 정렬에서는 결과 상태가 최소 $n!$ 개이니, 최대 깊이가 적어도 $\log_2 (n!) = O(n \log n)$ 이고, 그래서 모든 비교 정렬 알고리즘의 시간 복잡도는 적어도 $O(n \log n)$ 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 모든 알고리즘이 $x_i, x_j$ 를 읽은 다음에 $x_i - x_j$ 의 부호에 따라서 YES / NO verdict를 결정할 필요는 없다. 기수 정렬마냥 $A[x_i] = i$ 같은 연산을 할 수도 있고, 아니면 $\exp(x_i) - \sqrt{x_j}$ 같은 뜬금없는 식을 계산할 수도 있다. 최소한 그런 걸 안하는 알고리즘들에 대해서는 그렇다는 것이다. (&lt;i&gt;거의 모든&lt;/i&gt; 일반적인 알고리즘들이 저러한 연산을 안 / 못 하는 것을 경험적으로 알고 있으나, 이에 대한 formal argument가 있는지는 잘 모르겠다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 정렬의 예시로 돌아가서, 정렬은 Decision Tree의 최대 깊이가 최소 $O(n \log n)$ 이면서, 실제로 $O(n \log n)$ 의 깊이를 가지는 트리들이 여럿 알려져 있다 (Merge Sort, Heapsort 등등). 이 경우를 보면 알고리즘의 Decision Tree의 깊이와 실제 알고리즘의 시간 복잡도가 일치하는 것을 알 수 있다. 하지만 Decision Tree의 깊이는 짧지만 실제 그 깊이를 내는 알고리즘이 있는지 모르는 경우도 있다. 예를 들어 3SUM 문제가 그렇다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Problem (3SUM)&lt;/b&gt;. 수열 $a_1, a_2, \ldots, a_n$ 이 주어졌을 때, $a_i + a_j + a_k = 0$ 인 $1 \le i ,j, k \le n$ 이 있는지 판별하라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬 문제처럼 Decision Tree에서 $x_i - x_j$ 의 부호만 알려준다면 절대 못 풀거 같으니, 다음과 같은 연산을 허용하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Definition ($s$-linear decision tree)&lt;/b&gt;. 알고리즘은 $c_1, c_2, \ldots, c_s$ 와 $i_1, i_2, \ldots, i_s$ 를 제시한 후 $\sum_{1 \le k \le s} c_k a_{i_k}$ 의 부호를 알 수 있다 ($0$ 초과, $0$, $0$ 미만)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 3SUM의 $O(n^3)$ brute-force 알고리즘은 깊이 $O(n^3)$ 의 $3$-linear decision tree로 구현할 수 있다. 잘 생각해 보면 $O(n^2)$ two-pointer 알고리즘도 깊이 $O(n^2)$ 의 $3$-linear decision tree로 구현할 수 있다. 여기까지만 보면 여전히 Decision Tree의 깊이와 알고리즘의 시간 복잡도는 거의 일치하는 것 같다. 하지만 오늘 얘기할 알고리즘 (&lt;a href=&quot;https://arxiv.org/abs/1404.0799&quot;&gt;Gr&amp;oslash;nlund, Pettie 2014&lt;/a&gt;) 은 3SUM을 $O(n^2 \log n)$ 시간과 $O(n^{3/2} \log n)$ decision tree 깊이에 해결한다. 사실 원본에서는 $O(n^{3/2} \sqrt{\log n})$ 깊이에 해결하지만, 어차피 후속 논문에서 $O(n^{3/2})$ 로 누가 줄여놨으니 여기서는 무시하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘은 다음과 같다. $4$-linear decision tree이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 수열 $a$ 를 $O(n \log n)$ 시간에 정렬하자. (Decision Tree에서 $a_i -a_j$ 부호 물어봐서 $O(n \log n)$ 깊이에 가능)&lt;/li&gt;
&lt;li&gt;$g = \sqrt n$ 으로 잡고, 수열을 크기 $g$의 버킷으로 묶는다 (즉 $i$ 번 버킷에는 $a_{(i-1)g+1}, a_{(i-1)g+2}, \ldots, a_{ig}$ 가 있음). 편의상 $n = g^2$ 이고 $g$ 는 정수이다.&lt;/li&gt;
&lt;li&gt;$D = \bigcup_{1 \le i \le n/g, 1 \le j, k \le g} (a_{(i-1)g + j} - a_{(i-1)g + k})$ 로 정의하자. 즉 같은 버킷에서 온 $x, y$ 에 대해서 $a_x - a_y$ 의 합집합이다. $|D| = O(n^{3/2})$ 이다.&lt;/li&gt;
&lt;li&gt;$D$ 를 정렬하자. ($4$-linear decision tree니까 정렬 가능하다. 복잡도 깊이 모두 $O(n^{3/2} \log n)$ 이다.)&lt;/li&gt;
&lt;li&gt;각 $1 \le i, j \le n/g$ 에 대해, $A_{i, j} = \{a_x + a_y \mid x \in [(i-1)g + 1, ig], y \in [(j-1)g + 1, jg]\}$ 로 정의하자. 즉 $x$ 는 $i$ 번 버킷에서, $y$ 는 $j$ 번 버킷에서 왔다.&lt;/li&gt;
&lt;li&gt;$A_{i, j}$ 를 정렬한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복잡도는 $O(g^2 \log (g^2) \times (n/g)^2) = O(n^2 \log n)$ 이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Decision Tree 깊이는 0이다.&lt;/b&gt; $a_x + a_y &amp;lt; a_{x^\prime} + a_{y^\prime}$ 을 비교하는 것은, $a_x - a_{x^\prime} &amp;lt; a_y - a_{y^\prime}$ 을 비교하는 것과 동일하다. $x, x^\prime$ 은 한 버킷에서 왔고, $y, y^\prime$ 역시 한 버킷에서 왔다. 즉, 비교되는 두 원소 모두 $D$ 에 속한다. $D$ 를 정렬해 놨으니 상대 순서만 비교해서 $A_{i, j}$ 를 비교할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;모든 $k$ 에 대해:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Two pointers를 사용하면 봐야 할 버킷 쌍이 $O(n/g)$ 개 임을 알 수 있다.&lt;/li&gt;
&lt;li&gt;각 버킷에 대해 $-a_k \in A_{i, j}$ 인지 이분 탐색으로 테스트한다.&lt;/li&gt;
&lt;li&gt;복잡도 깊이 모두 $O(n^{3/2} \log n)$ 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고로 위 알고리즘은 Decision Tree 복잡도와 실제 알고리즘의 복잡도가 다른 경우에 속한다. 당연하지만, 쓸데없는 연산을 하면 실제 알고리즘의 복잡도는 Decision Tree와 별개로 무한정으로 늘릴 수 있다. 그러니 위 알고리즘에서 낭비되는 연산이 있는 건 아닌지를 생각해 볼 수도 있을 것이다. 현재 각 decision tree 콜에서 평균 $O(\sqrt n)$ 정도의 연산을 &lt;i&gt;낭비&lt;/i&gt; 하고 있다고 하면, 이 낭비를 평균 $O(n^{1/2 - \epsilon})$ 으로만 줄여도 3SUM Conjecture를 반증할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여담으로 $k$-linear decision tree에서 $k$-SUM의 깊이는 $k$ 가 짝수일 때 $\Omega(n^{k/2})$, 홀수일 때 $\Omega(n^{(k+1)/2})$ 여야 함이 알려져 있다. (&lt;a href=&quot;https://people.csail.mit.edu/virgi/6.1420/papers/ldt-3sum.pdf&quot;&gt;Erickson 1995&lt;/a&gt;) 즉 $3$-linear decision tree에서는 $O(n^2)$ 보다 잘 할 수 없고, $4$ 인 게 중요하다.&lt;/p&gt;</description>
      <category>공부/CS theory</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/364</guid>
      <comments>https://amugelab.tistory.com/364#entry364comment</comments>
      <pubDate>Sun, 4 Jan 2026 01:31:29 +0900</pubDate>
    </item>
    <item>
      <title>여름 서부 여행기 (2/2)</title>
      <link>https://amugelab.tistory.com/363</link>
      <description>&lt;h1&gt;Part 3. Oregon Coast&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7585.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVRtoX/dJMcahQejJL/MywSonDSIs1gj7I9nveAk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVRtoX/dJMcahQejJL/MywSonDSIs1gj7I9nveAk0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVRtoX/dJMcahQejJL/MywSonDSIs1gj7I9nveAk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVRtoX%2FdJMcahQejJL%2FMywSonDSIs1gj7I9nveAk0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7585.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보스턴으로 가는 비행기가 밤 11시 정도로 잡혀 있어서 Oregon Coast를 크게 한 바퀴 돌고 올 계획을 짰다. Oregon Hwy 34가 뭔가 구불구불하고 재밌어 보여서, 그 길로 서쪽으로 들어간 다음에 해안을 따라 북쪽으로 올라오고, 남는 시간에 따라 적당히 포틀랜드로 복귀할 생각을 대충 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7582.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZCezK/dJMcah3LtHO/fbIkHHZdr4uXWCwfxukxX0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZCezK/dJMcah3LtHO/fbIkHHZdr4uXWCwfxukxX0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZCezK/dJMcah3LtHO/fbIkHHZdr4uXWCwfxukxX0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZCezK%2FdJMcah3LtHO%2FfbIkHHZdr4uXWCwfxukxX0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7582.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가는 길에 Alsea Falls라고 하는 곳을 들렀다. 작은 강이 폭포를 이루고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7576.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pki7M/dJMcaelFrLO/0WIGdZY2DQfSlEKuNo7yWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pki7M/dJMcaelFrLO/0WIGdZY2DQfSlEKuNo7yWK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pki7M/dJMcaelFrLO/0WIGdZY2DQfSlEKuNo7yWK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpki7M%2FdJMcaelFrLO%2F0WIGdZY2DQfSlEKuNo7yWK%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7576.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7578.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czqzEc/dJMcafLD4No/vZcKulVdHYWyO0mWFmIbeK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czqzEc/dJMcafLD4No/vZcKulVdHYWyO0mWFmIbeK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czqzEc/dJMcafLD4No/vZcKulVdHYWyO0mWFmIbeK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczqzEc%2FdJMcafLD4No%2FvZcKulVdHYWyO0mWFmIbeK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7578.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몰랐는데 이 지역은 rainforest가 형성되어 있어서 특이한 이끼가 낀 나무들을 많이 볼 수 있었다. 올림픽 반도 같은 곳에만 있는 줄 알았는데, 오리건 해안가에도 rainforest가 있다고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7593.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boD77L/dJMcajHhjLR/bpA1iNB9asXLXFTZxIZGB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boD77L/dJMcajHhjLR/bpA1iNB9asXLXFTZxIZGB1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boD77L/dJMcajHhjLR/bpA1iNB9asXLXFTZxIZGB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboD77L%2FdJMcajHhjLR%2FbpA1iNB9asXLXFTZxIZGB1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7593.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 달려서 해안가에 도착했다. Hwy 34는 그냥 나무가 많고 되게 구불구불했다. 추천할 생각은 없음. 이 해안가는 샌프란 근처처럼 모래가 깎여내려가는 형태이다. 그리고 (아마 화산활동으로 만들어진?) 특이한 돌덩이들이 많이 형성되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7602.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OnrNP/dJMcad78gLc/qC5ACr3NDY40RkOIhUU7T1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OnrNP/dJMcad78gLc/qC5ACr3NDY40RkOIhUU7T1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OnrNP/dJMcad78gLc/qC5ACr3NDY40RkOIhUU7T1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOnrNP%2FdJMcad78gLc%2FqC5ACr3NDY40RkOIhUU7T1%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7602.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돌덩이를 가까이서 보면 이런 느낌이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7605.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MtdGX/dJMcadUA3XG/h29K2rEQu2YZweLP89cdj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MtdGX/dJMcadUA3XG/h29K2rEQu2YZweLP89cdj1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MtdGX/dJMcadUA3XG/h29K2rEQu2YZweLP89cdj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMtdGX%2FdJMcadUA3XG%2Fh29K2rEQu2YZweLP89cdj1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7605.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 누워있다가 다시 출발.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7612.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brKPBq/dJMcai2FLNF/RIYwSV54IxSKh0QDKl6HHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brKPBq/dJMcai2FLNF/RIYwSV54IxSKh0QDKl6HHk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brKPBq/dJMcai2FLNF/RIYwSV54IxSKh0QDKl6HHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrKPBq%2FdJMcai2FLNF%2FRIYwSV54IxSKh0QDKl6HHk%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7612.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해안가를 따라 더 올라가서 Newport에 도착했다. 여기서 20번 국도가 동쪽으로 출발해서, 대략 3365마일 (=5415km) 을 가다가 보스턴의 Kenmore Square에서 끝난다. Kenmore Square에 가면, Newport, OR 3365 miles라는 똑같이 생긴 표지판이 있다. 학교에서 멀지 않은 곳이라 자주 보는 편인데, 결국 이번 기회에 3365마일 너머에서 반대편 표지판을 보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7614.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U9xW2/dJMcain4faa/rnG94xINdbCiCIBKGSZVNK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U9xW2/dJMcain4faa/rnG94xINdbCiCIBKGSZVNK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U9xW2/dJMcain4faa/rnG94xINdbCiCIBKGSZVNK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU9xW2%2FdJMcain4faa%2FrnG94xINdbCiCIBKGSZVNK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7614.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7619.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJL6t1/dJMcaj1z6Xj/fYU9bKOatjUL8CEDSME1tk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJL6t1/dJMcaj1z6Xj/fYU9bKOatjUL8CEDSME1tk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJL6t1/dJMcaj1z6Xj/fYU9bKOatjUL8CEDSME1tk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJL6t1%2FdJMcaj1z6Xj%2FfYU9bKOatjUL8CEDSME1tk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7619.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bayfront로 내려가면 수산시장 같은 게 형성되어 있다. 관광객이 많이 오는 동네라는 느낌을 받았다. 여기도 여름이 아닐 때는 샌프란마냥 물개가 꽥꽥대는 것 같다. 나는 8월에 왔기 때문에 물개는 전혀 없었다. 다 짝짓기하러 캘리로 내려가셨다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7626.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXdwHR/dJMcain4fan/6WmkVXWgcKWkHsumE0BMU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXdwHR/dJMcain4fan/6WmkVXWgcKWkHsumE0BMU0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXdwHR/dJMcain4fan/6WmkVXWgcKWkHsumE0BMU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXdwHR%2FdJMcain4fan%2F6WmkVXWgcKWkHsumE0BMU0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7626.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7627.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqKQs9/dJMcain4fap/c5SgpWYCN11RD5jpcfrpSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqKQs9/dJMcain4fap/c5SgpWYCN11RD5jpcfrpSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqKQs9/dJMcain4fap/c5SgpWYCN11RD5jpcfrpSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqKQs9%2FdJMcain4fap%2Fc5SgpWYCN11RD5jpcfrpSk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7627.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올라가는 길에 멋있어서 찍었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7628.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zITxN/dJMcajtJ9Xt/CkKf1FONYhrmhrvKf0NKy0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zITxN/dJMcajtJ9Xt/CkKf1FONYhrmhrvKf0NKy0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zITxN/dJMcajtJ9Xt/CkKf1FONYhrmhrvKf0NKy0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzITxN%2FdJMcajtJ9Xt%2FCkKf1FONYhrmhrvKf0NKy0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7628.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7631.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnoOxK/dJMcajtJ9Xu/0DHFIPKLbCmejvi0YFVT70/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnoOxK/dJMcajtJ9Xu/0DHFIPKLbCmejvi0YFVT70/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnoOxK/dJMcajtJ9Xu/0DHFIPKLbCmejvi0YFVT70/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnoOxK%2FdJMcajtJ9Xu%2F0DHFIPKLbCmejvi0YFVT70%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7631.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저녁, 이 레스토랑이 거의 유일한 음식 옵션이었다. 거의 오지같았던 동네 분위기와는 달리 안에 들어가니 관광객들이 많았다. 음식은 맛있었는데 가격이 꽤 비쌌다. 그리고 혼밥 난이도가 최상위권이었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7638.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ3zZJ/dJMcaacu0ld/qP49XfTkL5cSLDOAcDRA1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ3zZJ/dJMcaacu0ld/qP49XfTkL5cSLDOAcDRA1k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ3zZJ/dJMcaacu0ld/qP49XfTkL5cSLDOAcDRA1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ3zZJ%2FdJMcaacu0ld%2FqP49XfTkL5cSLDOAcDRA1k%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7638.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돌아가는 길에 창가에 보이는 풍경이 너무 멋지길래 차를 돌려서 세웠다. Pacific City Beach라는 곳이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7633.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AIrtm/dJMcaacu0lC/aSSsdKoTPPKn9tHe5jHo0k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AIrtm/dJMcaacu0lC/aSSsdKoTPPKn9tHe5jHo0k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AIrtm/dJMcaacu0lC/aSSsdKoTPPKn9tHe5jHo0k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAIrtm%2FdJMcaacu0lC%2FaSSsdKoTPPKn9tHe5jHo0k%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7633.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7634.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oI8r6/dJMcaezcCgy/0d7nv5WWoiEXQadG937XO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oI8r6/dJMcaezcCgy/0d7nv5WWoiEXQadG937XO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oI8r6/dJMcaezcCgy/0d7nv5WWoiEXQadG937XO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoI8r6%2FdJMcaezcCgy%2F0d7nv5WWoiEXQadG937XO1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7634.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7636.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xvjF1/dJMcaiaw4D3/4yqYuMlkS4SOH8KzNgGwV1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xvjF1/dJMcaiaw4D3/4yqYuMlkS4SOH8KzNgGwV1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xvjF1/dJMcaiaw4D3/4yqYuMlkS4SOH8KzNgGwV1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxvjF1%2FdJMcaiaw4D3%2F4yqYuMlkS4SOH8KzNgGwV1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7636.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽에는 해변가가 있고, 오른쪽에는 sand dune이 막고 있다. 리조트가 형성되어 있는 거 보면 관광객이 꽤 오는 곳으로 보인다. 해가 질 때의 풍경이 절경이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sand dune이 올라갈만해 보여서 등반을 해 봤다. 옛날에 실패해본 경험이 있어서 이번에는 신발을 벗고 전략적으로(?) 접근했다. 그렇게 하니 올라가는게 그다지 힘들지 않았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7646.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2j3dN/dJMcaiBBrFV/R1uwRho1zcDdxgCCBLxkLK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2j3dN/dJMcaiBBrFV/R1uwRho1zcDdxgCCBLxkLK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2j3dN/dJMcaiBBrFV/R1uwRho1zcDdxgCCBLxkLK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2j3dN%2FdJMcaiBBrFV%2FR1uwRho1zcDdxgCCBLxkLK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7646.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7648.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DF73N/dJMcae0gXZV/4qY1dwDHTyaRqGBPnQeVZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DF73N/dJMcae0gXZV/4qY1dwDHTyaRqGBPnQeVZ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DF73N/dJMcae0gXZV/4qY1dwDHTyaRqGBPnQeVZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDF73N%2FdJMcae0gXZV%2F4qY1dwDHTyaRqGBPnQeVZ1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7648.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7651.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QzMjG/dJMcae0gXZW/8k2kJgCVPIVZk012XVcc31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QzMjG/dJMcae0gXZW/8k2kJgCVPIVZk012XVcc31/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QzMjG/dJMcae0gXZW/8k2kJgCVPIVZk012XVcc31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQzMjG%2FdJMcae0gXZW%2F8k2kJgCVPIVZk012XVcc31%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7651.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7653.jpeg&quot; data-origin-width=&quot;6620&quot; data-origin-height=&quot;3938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSs4cD/dJMcaiBBrGX/fFUONCCNNCjJLKMRitrSck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSs4cD/dJMcaiBBrGX/fFUONCCNNCjJLKMRitrSck/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSs4cD/dJMcaiBBrGX/fFUONCCNNCjJLKMRitrSck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSs4cD%2FdJMcaiBBrGX%2FfFUONCCNNCjJLKMRitrSck%2Fimg.jpg&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;6620&quot; height=&quot;3938&quot; data-filename=&quot;IMG_7653.jpeg&quot; data-origin-width=&quot;6620&quot; data-origin-height=&quot;3938&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 해변가만 있는게 아니라, 모래 위로 올라가면 특이한 풍경이 있어서 좋았다. 여긴 정말 좋은 곳이었고 나중에도 한번 다시 오고 싶다. 지금은 구름이 너무 많이 껴 있는데, 구름이 적당히 낀 상태로 일몰을 볼 수 있으면 정말 멋질 거라고 생각했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7656.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BqOCv/dJMcain4ff2/tiBE59CwLuX5KXi5ywNny0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BqOCv/dJMcain4ff2/tiBE59CwLuX5KXi5ywNny0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BqOCv/dJMcain4ff2/tiBE59CwLuX5KXi5ywNny0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBqOCv%2FdJMcain4ff2%2FtiBE59CwLuX5KXi5ywNny0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7656.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7657.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtU0lV/dJMcahioled/IicMTb8ZZ51kk5g9IwZ9a1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtU0lV/dJMcahioled/IicMTb8ZZ51kk5g9IwZ9a1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtU0lV/dJMcahioled/IicMTb8ZZ51kk5g9IwZ9a1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtU0lV%2FdJMcahioled%2FIicMTb8ZZ51kk5g9IwZ9a1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7657.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7658.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRVUwm/dJMcahiolee/iOSMkbBiWkq04ikLLOxC90/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRVUwm/dJMcahiolee/iOSMkbBiWkq04ikLLOxC90/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRVUwm/dJMcahiolee/iOSMkbBiWkq04ikLLOxC90/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRVUwm%2FdJMcahiolee%2FiOSMkbBiWkq04ikLLOxC90%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7658.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돌아가는 동안 길 위에서 사슴을 봤다.. 다행이도 교차로를 막 지난 후라서 속도가 아주 느린 상태였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7659.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM34kp/dJMcagcIvcj/wTD6vCnn9JhrR3OEioxrkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM34kp/dJMcagcIvcj/wTD6vCnn9JhrR3OEioxrkk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM34kp/dJMcagcIvcj/wTD6vCnn9JhrR3OEioxrkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM34kp%2FdJMcagcIvcj%2FwTD6vCnn9JhrR3OEioxrkk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7659.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간에 해가 좀 지고 안개가 잔뜩 꼈을때 잠시 pullout해서 사진을 찍었다. 사진으로는 표현하기 어렵지만 저기 서 있으면 말로 표현하기 어려운 분위기가 느껴진다. 저게 목적지에서 가까운 곳이었으면 좋았겠지만, 아쉽게도 아직 해변가를 벗어나지 못 한 상태였다. 해변가를 벗어난 이후에는 해가 완전히 졌고, 거기서 Oregon Hwy 6을 따라서 포틀랜드로 갔다. 정말 어둡고 구불구불한 산길을 한시간 반쯤 건너야 했는데, 앞 뒤 차들이 너무 빨리 달려서 무서웠다. 낭만이고 뭐고 없는 손에 꼽을 정도로 무서운 운전이었다. 그래도 별 일 없이 PDX로 잘 살아 돌아갔다.&lt;/p&gt;
&lt;h1&gt;Part 4: Seattle, WA&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드 트립으로 온 거라 시애틀 자체에서는 거의 시간을 쓰지 않았다. 시애틀에서 시간을 썼던 얘기가 궁금하다면 &lt;a href=&quot;https://koosaga.com/334&quot;&gt;이 곳&lt;/a&gt;을 보면 된다. 시애틀에 한 네 번쯤 온거 같은데, 이 때 처음으로 날씨 안 좋은 시애틀을 경험했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8/15&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 Rainier를 가기로 했었는데 비가 와서 Olympic National Park를 가는 것으로 선회했다. 기상 문제로 급하게 계획을 바꾼거라, 그냥 Olympia를 기준으로 시계 방향으로 반도를 쭉 돌고 온다 정도의 목표만 있었다. 올림픽 반도가 크다는 건 그때도 인지하고 있어서, 다소 빡센 계획이라고 생각은 했는데, 이 날 일어날 더한 일들까지 예상하지는 못했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7685.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0GD0s/dJMcadUA4lX/8pHuDU8Oc3EdIWOcM97uB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0GD0s/dJMcadUA4lX/8pHuDU8Oc3EdIWOcM97uB1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0GD0s/dJMcadUA4lX/8pHuDU8Oc3EdIWOcM97uB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0GD0s%2FdJMcadUA4lX%2F8pHuDU8Oc3EdIWOcM97uB1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7685.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7687.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8a5sn/dJMcadUA4lV/I9XJyY6wjmRXbwks8V1u1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8a5sn/dJMcadUA4lV/I9XJyY6wjmRXbwks8V1u1k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8a5sn/dJMcadUA4lV/I9XJyY6wjmRXbwks8V1u1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8a5sn%2FdJMcadUA4lV%2FI9XJyY6wjmRXbwks8V1u1k%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7687.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7690.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nXWcb/dJMcaeMJM7h/VYKgOAkcLNiQQiDa3k3ckk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nXWcb/dJMcaeMJM7h/VYKgOAkcLNiQQiDa3k3ckk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nXWcb/dJMcaeMJM7h/VYKgOAkcLNiQQiDa3k3ckk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnXWcb%2FdJMcaeMJM7h%2FVYKgOAkcLNiQQiDa3k3ckk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7690.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7691.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cATPzY/dJMcahQekii/OMMQqtgkKZJ8AKELn6GnkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cATPzY/dJMcahQekii/OMMQqtgkKZJ8AKELn6GnkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cATPzY/dJMcahQekii/OMMQqtgkKZJ8AKELn6GnkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcATPzY%2FdJMcahQekii%2FOMMQqtgkKZJ8AKELn6GnkK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7691.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ruby Beach라는 곳이다. 날씨가 상당히 좋지 못한데, 보통 날씨가 그렇게 좋지 않은 곳이고 사실 그게 어울리는 곳이기도 하다. 구름이 Olympic Mountains를 넘지 못해서 항상 습하고 비가 많이 오는 곳이다. 그래서 숲이 바다 바로 앞까지 형성되어 있고, 여기서는 태평양의 파도가 숲을 덮치면서 나무들을 쓸어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Forks라는 마을을 들어가서 밥을 먹었다. 불을 다 꺼놓은 굉장히 음침한 Mexican restaurant를 들어갔는데, 알고 보니 일부러 그렇게 하는 게 아니고 도시 전체에 정전이 일어나서 (!) 불이 켜지지 않는 것이었다. 다행이도 주방은 정상영업해서 음식은 먹었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음에는 가장 기대했던 곳이었던 Hoh Rainforest를 보러 갔는데, 여기는 진입로가 침수되어서 (!) 갈 수가 없었다. 이때 이미 시간이 4시를 넘어가기도 했고, 기상 상황 때문에 볼 수 있는게 더 이상 없을 것 같아서, 그냥 101 southbound로 돌아가기로 했다. 그런데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;101 southbound로 Amanda Park 근처에서 도로가 통제되었다. 처음에 Hoh Rainforest에서부터 알 수 있었으면 그렇게 큰 문제는 아니지만, 시계 반대방향으로 1시간 반 넘게 간 후에야 알게 된 것이라서 정말 크게 시간 손해가 발생하게 되었다. 그래서 결국 억지로라도 반도를 한 바퀴 돌게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Olympic 반도의 태평양 연안은, Forks에서 Amanda Park 사이의 100km 가까이 되는 구간에 사람이 사는 곳을 전혀 보지 못했다. 내 입장에서도 정말 당황스러웠는데 이 길을 자주 써야 하는 로컬들은 어떨지가 궁금했다. 아무튼 당시에는 진짜 무서웠고, 지금 생각해도 예상치 못하게 엄청난 오지를 들어갔다 왔다고 생각이 든다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7707.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnsaiu/dJMcacBnZZc/jckqJVDJg78dl29mZRDClk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnsaiu/dJMcacBnZZc/jckqJVDJg78dl29mZRDClk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnsaiu/dJMcacBnZZc/jckqJVDJg78dl29mZRDClk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdnsaiu%2FdJMcacBnZZc%2FjckqJVDJg78dl29mZRDClk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7707.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7708.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baP1qY/dJMcaaDzmn4/1YnUlD0il5Z7YpH2X3s4g1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baP1qY/dJMcaaDzmn4/1YnUlD0il5Z7YpH2X3s4g1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baP1qY/dJMcaaDzmn4/1YnUlD0il5Z7YpH2X3s4g1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaP1qY%2FdJMcaaDzmn4%2F1YnUlD0il5Z7YpH2X3s4g1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7708.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7709.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c93qAK/dJMcacajCNM/HxDqhy12ihOTAeboGGeMgk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c93qAK/dJMcacajCNM/HxDqhy12ihOTAeboGGeMgk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c93qAK/dJMcacajCNM/HxDqhy12ihOTAeboGGeMgk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc93qAK%2FdJMcacajCNM%2FHxDqhy12ihOTAeboGGeMgk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7709.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;울며 겨자먹기로 Crescent Lake까지 돌아왔다. 지금 사진으로 보니까 진짜 대단한 풍경이라고 생각이 든다. Port Angeles를 가니까 해가 다 졌다. 계획에도 없던 페리를 타는 등 온갖 경험을 다 했지만, 다행이도 숙소에는 자정 전에 도착했다. 고생을 많이 하긴 했지만, 어쨌든 문제들을 잘 해결해서 도착을 했고, 특이한 경험도 많이 있었던 재미있는 하루였다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8/16&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7719.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbmylj/dJMcaajgDKp/KZUNTgahgaWicRUjllXZl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbmylj/dJMcaajgDKp/KZUNTgahgaWicRUjllXZl0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbmylj/dJMcaajgDKp/KZUNTgahgaWicRUjllXZl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbmylj%2FdJMcaajgDKp%2FKZUNTgahgaWicRUjllXZl0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7719.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7724.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebyxtS/dJMcagKyo6v/csQLTCzucuzUfeEtMS7NhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebyxtS/dJMcagKyo6v/csQLTCzucuzUfeEtMS7NhK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebyxtS/dJMcagKyo6v/csQLTCzucuzUfeEtMS7NhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebyxtS%2FdJMcagKyo6v%2FcsQLTCzucuzUfeEtMS7NhK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7724.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시애틀에서 페리를 타고 Bremerton으로 향했다. 페리 자체는 전날에도 탔지만 그 때는 시애틀에서 조금 떨어진 곳에서 타기도 했고 결정적으로 한 밤중이라 보이는 게 없었다 (ㅠㅠ) Bremerton으로 가는 좋은 교통수단일 뿐만 아니라 전망이 엄청나게 멋지다. 시애틀 도심을 한 눈에 확 보여주다가 얼마 안 가서 조용한 자연 속으로 들어가는 느낌이 아주 좋았다. 샌프란도 그렇고 서부 도시에서 페리를 타 보는게 참 좋은 (그런데 사람들이 별로 많이 하지 않고 저렴한!) 액티비티인거 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7735.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnmQ3O/dJMcae0gYyl/F8rYk1CiAPuoAXa6yc4V31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnmQ3O/dJMcae0gYyl/F8rYk1CiAPuoAXa6yc4V31/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnmQ3O/dJMcae0gYyl/F8rYk1CiAPuoAXa6yc4V31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnmQ3O%2FdJMcae0gYyl%2FF8rYk1CiAPuoAXa6yc4V31%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7735.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7738.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x3yKC/dJMcadmK8eX/zEalsKD987YzKhbBYqU7P0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x3yKC/dJMcadmK8eX/zEalsKD987YzKhbBYqU7P0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x3yKC/dJMcadmK8eX/zEalsKD987YzKhbBYqU7P0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx3yKC%2FdJMcadmK8eX%2FzEalsKD987YzKhbBYqU7P0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7738.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lake Crescent Revisited.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7743.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byOdp5/dJMcaiO8CN5/RHxo6lpQmzycF68FJxfV81/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byOdp5/dJMcaiO8CN5/RHxo6lpQmzycF68FJxfV81/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byOdp5/dJMcaiO8CN5/RHxo6lpQmzycF68FJxfV81/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyOdp5%2FdJMcaiO8CN5%2FRHxo6lpQmzycF68FJxfV81%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7743.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7744.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vVvBQ/dJMcac9dXau/fU7ti0SAhpTYoN7ZxMqk70/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vVvBQ/dJMcac9dXau/fU7ti0SAhpTYoN7ZxMqk70/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vVvBQ/dJMcac9dXau/fU7ti0SAhpTYoN7ZxMqk70/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvVvBQ%2FdJMcac9dXau%2FfU7ti0SAhpTYoN7ZxMqk70%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7744.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7747.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sDVJS/dJMcaiO8CN6/qYk4NFf4IiwcDtjMay0P01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sDVJS/dJMcaiO8CN6/qYk4NFf4IiwcDtjMay0P01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sDVJS/dJMcaiO8CN6/qYk4NFf4IiwcDtjMay0P01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsDVJS%2FdJMcaiO8CN6%2FqYk4NFf4IiwcDtjMay0P01%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7747.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7764.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb3q5B/dJMcac9dXat/gCFp7LP3YpkS1uv8FVy1sk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb3q5B/dJMcac9dXat/gCFp7LP3YpkS1uv8FVy1sk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb3q5B/dJMcac9dXat/gCFp7LP3YpkS1uv8FVy1sk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb3q5B%2FdJMcac9dXat%2FgCFp7LP3YpkS1uv8FVy1sk%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7764.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Olympic National Park를 또 갔는데, 이번에도 날씨가 좋지 않아서 많은 걸 하지는 못했다. 구체적으로는, 이날 Hurricane Ridge를 올라가려고 했는데, 안개가 너무 심하게 껴서 그냥 중간에 차를 돌리고 포기했다. 대신 Lake Crescent 근처에서 짧은 하이킹을 했다. 약간의 rainforest를 지나가면 아주 높은 폭포를 볼 수 있다. (사진으로 보면 별로 높아보이지 않지만, 최소 10미터는 된다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7769.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HIpVg/dJMcafkzIYq/VMkWeq1DiR4RXNvna2BKsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HIpVg/dJMcafkzIYq/VMkWeq1DiR4RXNvna2BKsK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HIpVg/dJMcafkzIYq/VMkWeq1DiR4RXNvna2BKsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHIpVg%2FdJMcafkzIYq%2FVMkWeq1DiR4RXNvna2BKsK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7769.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝나고 Lake Crescent에서 잠깐 쉬다가 돌아갔다. 낚시나 물놀이 하는 사람들이 많았다. 이때는 날씨가 개니까 어제보다 더 보기 좋다고 생각했다. 돌이켜서 봤을 때는 전날의 사진이 훨씬 훌륭해 보인다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8/17&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7774.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LOU4I/dJMb99LqFJo/rKKyyHos5znY9oZXsapszK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LOU4I/dJMb99LqFJo/rKKyyHos5znY9oZXsapszK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LOU4I/dJMb99LqFJo/rKKyyHos5znY9oZXsapszK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLOU4I%2FdJMb99LqFJo%2FrKKyyHos5znY9oZXsapszK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7774.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Port Townsend에서 페리를 타고 Fort Casey 방향으로 출발했다. 전날 이 페리가 (1) 인기가 많아서 예약제로 운영되고 (2) 이미 꽉 차있다 는 사실을 보고 약간 패닉했는데, 다행이도 비예약석 6개 정도를 매 페리마다 비워둬서, 1시간 정도 기다린 후 안전하게 탑승했다. 예약을 받는 페리가 워싱턴주 내에서 이것밖에 없는 것으로 기억한다. nowhere to nowhere인줄 알았는데, 이렇게 인기가 많은 노선일 줄은 상상도 못했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7778.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ncCXq/dJMcaaDzmtI/OZg56nuWhC917UaaETMCaK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ncCXq/dJMcaaDzmtI/OZg56nuWhC917UaaETMCaK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ncCXq/dJMcaaDzmtI/OZg56nuWhC917UaaETMCaK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FncCXq%2FdJMcaaDzmtI%2FOZg56nuWhC917UaaETMCaK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7778.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미국 사람들은 바다가 쫙 펼쳐진 곳에서는 Fort를 짓고 산의 풍경이 잘 보이는 곳에는 Fire Lookout을 짓는다. Juan de Fuca 해협이 한 눈에 들어오는 Fort Casey라는 곳이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7783.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPCtqK/dJMcakzp2zy/qwQSGNRmpiLn87vg0kDvhk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPCtqK/dJMcakzp2zy/qwQSGNRmpiLn87vg0kDvhk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPCtqK/dJMcakzp2zy/qwQSGNRmpiLn87vg0kDvhk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPCtqK%2FdJMcakzp2zy%2FqwQSGNRmpiLn87vg0kDvhk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7783.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deception Pass라는 곳이다. 다리가 아주 멋지다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7786.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pyY1A/dJMcajN2VAv/fn0ambLocj0Y56Sloc1tw0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pyY1A/dJMcajN2VAv/fn0ambLocj0Y56Sloc1tw0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pyY1A/dJMcajN2VAv/fn0ambLocj0Y56Sloc1tw0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpyY1A%2FdJMcajN2VAv%2Ffn0ambLocj0Y56Sloc1tw0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7786.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;낚시하는 사람들이 많다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7789.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Idn8z/dJMcajmYyDx/u509ECtOIFSmQ2wulF3sYk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Idn8z/dJMcajmYyDx/u509ECtOIFSmQ2wulF3sYk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Idn8z/dJMcajmYyDx/u509ECtOIFSmQ2wulF3sYk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIdn8z%2FdJMcajmYyDx%2Fu509ECtOIFSmQ2wulF3sYk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7789.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7790.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyjDcR/dJMcajmYyDz/yYAJ8M2K8T1Ce9kBVF0Egk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyjDcR/dJMcajmYyDz/yYAJ8M2K8T1Ce9kBVF0Egk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyjDcR/dJMcajmYyDz/yYAJ8M2K8T1Ce9kBVF0Egk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyjDcR%2FdJMcajmYyDz%2FyYAJ8M2K8T1Ce9kBVF0Egk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7790.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7800.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vN5f7/dJMcacuCq5M/TKKBD5cmHMDQz0mOcJ4kf1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vN5f7/dJMcacuCq5M/TKKBD5cmHMDQz0mOcJ4kf1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vN5f7/dJMcacuCq5M/TKKBD5cmHMDQz0mOcJ4kf1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvN5f7%2FdJMcacuCq5M%2FTKKBD5cmHMDQz0mOcJ4kf1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7800.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 다리 위. 사진만 보면 거의 하와이 같다. 실제로는 깎아지른 절벽과 PNW 특유의 evergreen 때문에, 태평양 열대 섬 이상의 멋이 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7791.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CLSxk/dJMcacVGK5b/IsTPcbS3vnkff8aMOM3Kw1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CLSxk/dJMcacVGK5b/IsTPcbS3vnkff8aMOM3Kw1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CLSxk/dJMcacVGK5b/IsTPcbS3vnkff8aMOM3Kw1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCLSxk%2FdJMcacVGK5b%2FIsTPcbS3vnkff8aMOM3Kw1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7791.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&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;Deception Pass를 지나서 Bellingham을 찍고 North Cascade National Park쪽으로 향했다. Bellingham은 I-5로 왔다갔다 했는데 무슨 고속도로 주제에 경치가 되게 좋았던 기억이 난다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7809.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W7krK/dJMcahQektN/YJMoflBpV46Hm7TpAgDdPk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W7krK/dJMcahQektN/YJMoflBpV46Hm7TpAgDdPk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W7krK/dJMcahQektN/YJMoflBpV46Hm7TpAgDdPk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW7krK%2FdJMcahQektN%2FYJMoflBpV46Hm7TpAgDdPk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7809.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;North Cascades National Park는 웰컴 사인이 특이하게 생겼다. 돌덩이 안에 빙하? 를 쌓아놨는데 상당히 귀엽다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7812.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBxOS8/dJMcabiaWrG/YOmZZsxJvDksXSyRjRa5kK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBxOS8/dJMcabiaWrG/YOmZZsxJvDksXSyRjRa5kK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBxOS8/dJMcabiaWrG/YOmZZsxJvDksXSyRjRa5kK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBxOS8%2FdJMcabiaWrG%2FYOmZZsxJvDksXSyRjRa5kK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7812.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7816.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lRzV3/dJMcaboWuvJ/YwzLJuIBVbKkCWkapW5qCK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lRzV3/dJMcaboWuvJ/YwzLJuIBVbKkCWkapW5qCK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lRzV3/dJMcaboWuvJ/YwzLJuIBVbKkCWkapW5qCK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlRzV3%2FdJMcaboWuvJ%2FYwzLJuIBVbKkCWkapW5qCK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7816.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Diablo&amp;nbsp;Lake.&amp;nbsp;빙하가&amp;nbsp;녹은&amp;nbsp;물은&amp;nbsp;암석&amp;nbsp;입자들이&amp;nbsp;묻어나와서&amp;nbsp;저런&amp;nbsp;도자기&amp;nbsp;빛&amp;nbsp;색깔을&amp;nbsp;낸다.&amp;nbsp;여기는&amp;nbsp;정말&amp;nbsp;물감을&amp;nbsp;탄&amp;nbsp;것처럼&amp;nbsp;비현실적인&amp;nbsp;색을&amp;nbsp;띄는&amp;nbsp;곳이었다.&amp;nbsp;호수&amp;nbsp;뿐만&amp;nbsp;아니라&amp;nbsp;주변의&amp;nbsp;산들도&amp;nbsp;아름다운&amp;nbsp;곳이었다.&amp;nbsp;이&amp;nbsp;호수는&amp;nbsp;(내가&amp;nbsp;알기로는)&amp;nbsp;아래에&amp;nbsp;댐을&amp;nbsp;지어서&amp;nbsp;생긴&amp;nbsp;인공호수로,&amp;nbsp;이&amp;nbsp;근처에&amp;nbsp;수력발전소가&amp;nbsp;있고&amp;nbsp;시애틀&amp;nbsp;근교&amp;nbsp;전기&amp;nbsp;공급의&amp;nbsp;상당수를&amp;nbsp;담당하고&amp;nbsp;있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7820.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crA0b2/dJMcabP0S7M/kymbfskhjfy4KXdoULX6CK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crA0b2/dJMcabP0S7M/kymbfskhjfy4KXdoULX6CK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crA0b2/dJMcabP0S7M/kymbfskhjfy4KXdoULX6CK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrA0b2%2FdJMcabP0S7M%2Fkymbfskhjfy4KXdoULX6CK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7820.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 뒤에는 Ross Lake라는 호수가 있다. 캐나다까지 뻗을 정도로 크고 길게 형성된 호수로, Diablo Lake보다는 색깔이 더 현실적이다. 호수를 따라 북쪽으로 한참 가면 Desolation Peak라는 산이 있다. Jack Kerouac이 그 산 정상에 있는 Fire lookout에서 63일을 살았다고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7822.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAhnsO/dJMcabJfiA4/kizk5FVk1yByt3ou3L0XhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAhnsO/dJMcabJfiA4/kizk5FVk1yByt3ou3L0XhK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAhnsO/dJMcabJfiA4/kizk5FVk1yByt3ou3L0XhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAhnsO%2FdJMcabJfiA4%2Fkizk5FVk1yByt3ou3L0XhK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7822.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7824.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4f5Nv/dJMcaelFsde/0AMV89xydkg3TI18mx8jTk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4f5Nv/dJMcaelFsde/0AMV89xydkg3TI18mx8jTk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4f5Nv/dJMcaelFsde/0AMV89xydkg3TI18mx8jTk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4f5Nv%2FdJMcaelFsde%2F0AMV89xydkg3TI18mx8jTk%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7824.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Washington Pass에서 Cascade Range를 가로지른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7830.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVJGQD/dJMcafZbgDY/aJqJMqISWgBQtfNksPaXUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVJGQD/dJMcafZbgDY/aJqJMqISWgBQtfNksPaXUk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVJGQD/dJMcafZbgDY/aJqJMqISWgBQtfNksPaXUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVJGQD%2FdJMcafZbgDY%2FaJqJMqISWgBQtfNksPaXUk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7830.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해가&amp;nbsp;딱&amp;nbsp;질&amp;nbsp;때쯤&amp;nbsp;방문했고,&amp;nbsp;아름다운&amp;nbsp;사진을&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pass를 넘어가면 처음 나오는 동네인 Winthrop에 우리 숙소가 있었다. 불멍을 하고 싶었는데 다른 일행이 이미 자리를 선점하고 있기에, 그냥 그 일행에 껴서 이런 저런 이야기를 했다. 아이다호 분들인데, PCT 최북단 부분을 4주 정도 하고 오셨다고. 원래 국경을 넘어 BC로 돌아오는게 국룰인데 트럼프때문에 여기까지 돌아와야 했다고 짜증을 내고 계셨다. 아무튼 얘기만 들어도 너무 재밌어보였고 나도 언젠가 PCT를 해 보고 싶다는 생각이 들었다. 그저께 우리가 올림픽 반도에서 고생하고 있었을 때 그 근처에 큰 폭풍이 있었다는 이야기를 이 때 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 다음날에는 Washington Pass 근처에서 한 4마일 정도의 하이킹을 하고 동쪽으로 향했다. 이것도 꽤 좋은 하이킹이었다. 난 이 여행을 Glacier NP까지 따라가다 중간에 한국으로 돌아갔고, 같이 한 일행은 덴버까지 하다가 보스턴으로 돌아갔다. Glacier에서 하이킹을 스킵해서 그런건지는 모르겠지만 지금 돌아봤을 때 이 여행에서 제일 기억에 남고 멋있었던 곳은 North Cascade였다. 다음에 올 때는 샌프란에서부터 걸어와야 하나? 잭 케루악처럼 Fire lookout에서 한달 살기를 할까? ㅎㅎ;; 역시 망상은 즐겁다.&lt;/p&gt;</description>
      <category>생각</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/363</guid>
      <comments>https://amugelab.tistory.com/363#entry363comment</comments>
      <pubDate>Thu, 30 Oct 2025 13:21:44 +0900</pubDate>
    </item>
    <item>
      <title>여름 서부 여행기 (1/2)</title>
      <link>https://amugelab.tistory.com/362</link>
      <description>&lt;h1&gt;Part 1: San Francisco, CA&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7.18&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 전날 밤에 하루 종일 잠을 못 자고 밤을 샜다. 생활 패턴 문제가 아니라 누워서 못 잔 것이고, 잠을 못 잘만한 개인적인 이유도 있었다. 당연히지만 뜬 눈으로 밤을 지새우니 고문이 따로 없었고, 사람을 보러 나가지 않으면 해결이 안 될 것 같았다. 내가 보스턴에서는 당분간 볼 만한 친구가 없어서, 이 연옥을 탈출하기 위해서는 샌프란시스코라도 가야 하나 하는 생각이 들었다. 그렇게 더 생각해 보다 지금 내가 할 수 있는 최선인것 같아 바로 추진했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오전 11시 반에 친구한테 소파에서 잘 수 있는지를 물어봤고, 와도 된다는 답장을 받았다. 답장을 받은 즉시 오후 2시 비행기를 예약하고, 가방 하나만 들고 샌프란시스코를 향했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3DF85ADB-37CF-453A-A617-ED808A618539.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v9R8t/dJMcaho9T65/Ch1BhNHGI7SMKKkfD9gRi1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v9R8t/dJMcaho9T65/Ch1BhNHGI7SMKKkfD9gRi1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v9R8t/dJMcaho9T65/Ch1BhNHGI7SMKKkfD9gRi1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv9R8t%2FdJMcaho9T65%2FCh1BhNHGI7SMKKkfD9gRi1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;3DF85ADB-37CF-453A-A617-ED808A618539.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;C9B3F22D-5D4C-4ECE-B926-991B695C6C0C.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5y4KY/dJMcaaDzkMe/9kkZxeO0z0XKZ9cdMWYtdK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5y4KY/dJMcaaDzkMe/9kkZxeO0z0XKZ9cdMWYtdK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5y4KY/dJMcaaDzkMe/9kkZxeO0z0XKZ9cdMWYtdK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5y4KY%2FdJMcaaDzkMe%2F9kkZxeO0z0XKZ9cdMWYtdK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;C9B3F22D-5D4C-4ECE-B926-991B695C6C0C.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7242.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4V6MK/dJMcaho9T7U/PSXY1am2oZFh4gYpGN2OGK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4V6MK/dJMcaho9T7U/PSXY1am2oZFh4gYpGN2OGK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4V6MK/dJMcaho9T7U/PSXY1am2oZFh4gYpGN2OGK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4V6MK%2FdJMcaho9T7U%2FPSXY1am2oZFh4gYpGN2OGK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7242.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&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;따뜻한 밥을 얻어먹고 몇가지 해야 할 일들을 마친 후 잤다. 잠은 당연히 잘 잤다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7.19&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아침 6시 반에 너무 개운하게 일어났다. 코드포스를 했는데 문제가 안 좋아서 점수를 약간 잃었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7248.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kSTB2/dJMcagRjWUC/hpp9CRO2ZFypux8q0zjVq1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kSTB2/dJMcagRjWUC/hpp9CRO2ZFypux8q0zjVq1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kSTB2/dJMcagRjWUC/hpp9CRO2ZFypux8q0zjVq1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkSTB2%2FdJMcagRjWUC%2Fhpp9CRO2ZFypux8q0zjVq1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7248.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버클리에 사는 rkm0959를 보러 친구 차를 얻어타고 East Bay로 향했다. 이 길에서 오클랜드를 처음 봤는데, 생각보다 스카이라인이 높고 멋있는 건물이 많았다. 물론 고속도로에 쓰레기 버려놓은 것도 덤.. 오클랜드가 옛날에는 무섭다고 생각했는데 요즘은 그냥 특이한 곳이라고 이미지가 좀 바뀐 것 같다. 호기심이 드는 도시이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7258.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mHyaU/dJMcaaKkWSo/GZQxHhJu0CAp40DHLgsyO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mHyaU/dJMcaaKkWSo/GZQxHhJu0CAp40DHLgsyO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mHyaU/dJMcaaKkWSo/GZQxHhJu0CAp40DHLgsyO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmHyaU%2FdJMcaaKkWSo%2FGZQxHhJu0CAp40DHLgsyO1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7258.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7260.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL3wcB/dJMcaaKkWSl/JISAxhNYwTT6gcLVQXDuX0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL3wcB/dJMcaaKkWSl/JISAxhNYwTT6gcLVQXDuX0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL3wcB/dJMcaaKkWSl/JISAxhNYwTT6gcLVQXDuX0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL3wcB%2FdJMcaaKkWSl%2FJISAxhNYwTT6gcLVQXDuX0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7260.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이스크림을 좀 먹다가 산책하자는 얘기가 나와서 근처 공원을 들렀다. Bay를 끼고 있는 공원인데, 샌프란시스코의 스카이라인과 다리 3개 (Bay, Golden Gate, Richmond)를 다 볼 수 있는 아주 멋진 공원이었다. 그나저나 여기로 오는 길에서는 버려진 것 같은 RV에 사람들이 수상하게 왔다갔다하고 있었는데 좀 무서웠다. 그리고 Richmond Bridge -&amp;gt; Golden Gate Bridge로 돌아왔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7276.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvdbmi/dJMb99ScehB/dWWDgCVEkcV1OOXfl77SAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvdbmi/dJMb99ScehB/dWWDgCVEkcV1OOXfl77SAK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvdbmi/dJMb99ScehB/dWWDgCVEkcV1OOXfl77SAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdvdbmi%2FdJMb99ScehB%2FdWWDgCVEkcV1OOXfl77SAK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7276.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운전해주던 친구는 이제 좀 질린거 같은 눈치였지만, 그러거나 말거나 금문교는 위대한 다리이다. 집에 도착한 후 스탠포드에 있는 고등학교 동기를 오랜만에 만났다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7.20&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아인타를 보러 갔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7299.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uI34P/dJMcajHhioy/Iqjumq3xTVwAgt5kqeTr00/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uI34P/dJMcajHhioy/Iqjumq3xTVwAgt5kqeTr00/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uI34P/dJMcajHhioy/Iqjumq3xTVwAgt5kqeTr00/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuI34P%2FdJMcajHhioy%2FIqjumq3xTVwAgt5kqeTr00%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7299.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7300.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Ksvc/dJMcajHhioI/5sOuv6g9k2IIYnbxoXudAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Ksvc/dJMcajHhioI/5sOuv6g9k2IIYnbxoXudAK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Ksvc/dJMcajHhioI/5sOuv6g9k2IIYnbxoXudAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Ksvc%2FdJMcajHhioI%2F5sOuv6g9k2IIYnbxoXudAK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7300.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캘트레인 / MUNI. 사실 MUNI는 돈 어케 내야 하는지 몰라서 무임승차했다. 시민 여러분 감사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7307.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfEy2E/dJMcaaQ6x0Q/TptWtjM8gdGQxdeOOv9eI1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfEy2E/dJMcaaQ6x0Q/TptWtjM8gdGQxdeOOv9eI1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfEy2E/dJMcaaQ6x0Q/TptWtjM8gdGQxdeOOv9eI1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfEy2E%2FdJMcaaQ6x0Q%2FTptWtjM8gdGQxdeOOv9eI1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7307.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재팬타운 근처 대호에서 점심을 먹었다. 점심 이후의 계획은 딱히 없었다. 내가 Pier 39나 구경시켜달라고 했는데, 가는 길이 너무 멀어서 딱히 생각이 없는 것 같았다. 괜히 멀리 가지 않고 근처에 있는 Golden Gate Park나 걸어가 보기로 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7318.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBebd/dJMcahbCLgx/0becNeYw5FUiekFpM3Gzv1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBebd/dJMcahbCLgx/0becNeYw5FUiekFpM3Gzv1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBebd/dJMcahbCLgx/0becNeYw5FUiekFpM3Gzv1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBebd%2FdJMcahbCLgx%2F0becNeYw5FUiekFpM3Gzv1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7318.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 정신차려보니까 Presidio까지 왔다. 음?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7320.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNfiv/dJMcadmK6n7/FMetf4gMHKTldyaVkhHlK1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNfiv/dJMcadmK6n7/FMetf4gMHKTldyaVkhHlK1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNfiv/dJMcadmK6n7/FMetf4gMHKTldyaVkhHlK1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNfiv%2FdJMcadmK6n7%2FFMetf4gMHKTldyaVkhHlK1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7320.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바다가 눈에 보이길래 거기까지 걸어가기로 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7323.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVKZfq/dJMcafrli2P/ypkvpfKKLIKxrPgtwp3I01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVKZfq/dJMcafrli2P/ypkvpfKKLIKxrPgtwp3I01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVKZfq/dJMcafrli2P/ypkvpfKKLIKxrPgtwp3I01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVKZfq%2FdJMcafrli2P%2FypkvpfKKLIKxrPgtwp3I01%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7323.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 바닷가까지 왔다. 금문교에서 버스를 타고 돌아가기로 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7341.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Teux/dJMcaacuYZS/V0yTm7BdtbDc4URMWR9Ot1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Teux/dJMcaacuYZS/V0yTm7BdtbDc4URMWR9Ot1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Teux/dJMcaacuYZS/V0yTm7BdtbDc4URMWR9Ot1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Teux%2FdJMcaacuYZS%2FV0yTm7BdtbDc4URMWR9Ot1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7341.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 많이 올라와야 해서 힘들었다. 고생한 김에 더 걸어 보기로 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7349.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xIp1p/dJMcaj8lGcr/5002UIrK3Jil5QQRQUlcwK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xIp1p/dJMcaj8lGcr/5002UIrK3Jil5QQRQUlcwK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xIp1p/dJMcaj8lGcr/5002UIrK3Jil5QQRQUlcwK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxIp1p%2FdJMcaj8lGcr%2F5002UIrK3Jil5QQRQUlcwK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7349.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Welcome to Marin County! 그렇게 시 경계를 넘어갔다. 이제는 진짜 반지점을 넘어가서 완주하는거 말고는 답이 없다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7361.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qv7gT/dJMcacBnX9B/YEN5kwGEC2IdSoTYiHYqQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qv7gT/dJMcacBnX9B/YEN5kwGEC2IdSoTYiHYqQk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qv7gT/dJMcacBnX9B/YEN5kwGEC2IdSoTYiHYqQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqv7gT%2FdJMcacBnX9B%2FYEN5kwGEC2IdSoTYiHYqQk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7361.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완주!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7355.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJvSTt/dJMcaaQ6x3n/aQVRD7Kdjz7fpAC6BAQcy0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJvSTt/dJMcaaQ6x3n/aQVRD7Kdjz7fpAC6BAQcy0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJvSTt/dJMcaaQ6x3n/aQVRD7Kdjz7fpAC6BAQcy0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJvSTt%2FdJMcaaQ6x3n%2FaQVRD7Kdjz7fpAC6BAQcy0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7355.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&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;이 때 아인타 폰은 방전되고 내 폰은 3% 정도였다. 운 좋게도 방전되기 전에 우버 기사가 잡혀서, 폰이 꺼지기 전에 번호판을 외우고 기사를 잘 찾아서 돌아갔다. 번호판을 까먹었거나 기사를 못 잡았으면 조난당했을지도... 있지만 두 사람 다 그런 케이스를 딱히 걱정하지는 않는 것 같다. 아인타 방에 들어가서 휴대폰을 적당히 충전한 후 저녁을 먹기 위해 떠났다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7368.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgeZCn/dJMcaaXR7f6/HB9uft1Xi3mTWXOjMhq5z1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgeZCn/dJMcaaXR7f6/HB9uft1Xi3mTWXOjMhq5z1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgeZCn/dJMcaaXR7f6/HB9uft1Xi3mTWXOjMhq5z1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgeZCn%2FdJMcaaXR7f6%2FHB9uft1Xi3mTWXOjMhq5z1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7368.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7367.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BleLk/dJMcaeTvmW7/202k2U4KaPNtrzpZy4Kmm1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BleLk/dJMcaeTvmW7/202k2U4KaPNtrzpZy4Kmm1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BleLk/dJMcaeTvmW7/202k2U4KaPNtrzpZy4Kmm1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBleLk%2FdJMcaeTvmW7%2F202k2U4KaPNtrzpZy4Kmm1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7367.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;냠&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7372.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AVGQ6/dJMcaap2bfl/WwASzku5YDE5CtkKpahYxK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AVGQ6/dJMcaap2bfl/WwASzku5YDE5CtkKpahYxK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AVGQ6/dJMcaap2bfl/WwASzku5YDE5CtkKpahYxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAVGQ6%2FdJMcaap2bfl%2FWwASzku5YDE5CtkKpahYxK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7372.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7373.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TzX0U/dJMcaap2bfh/g40Er09UGLBU67qOhR9kvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TzX0U/dJMcaap2bfh/g40Er09UGLBU67qOhR9kvK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TzX0U/dJMcaap2bfh/g40Er09UGLBU67qOhR9kvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTzX0U%2FdJMcaap2bfh%2Fg40Er09UGLBU67qOhR9kvK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7373.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;샌프란시스코의 경사.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7378.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDXflN/dJMcacuCpvV/6XeiwkvaY8vKv5WdN63M1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDXflN/dJMcacuCpvV/6XeiwkvaY8vKv5WdN63M1K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDXflN/dJMcacuCpvV/6XeiwkvaY8vKv5WdN63M1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDXflN%2FdJMcacuCpvV%2F6XeiwkvaY8vKv5WdN63M1K%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7378.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7384.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d5MoVw/dJMcahQeius/j5i73tiYSSXOkmeT3IAkG0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d5MoVw/dJMcahQeius/j5i73tiYSSXOkmeT3IAkG0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5MoVw/dJMcahQeius/j5i73tiYSSXOkmeT3IAkG0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd5MoVw%2FdJMcahQeius%2Fj5i73tiYSSXOkmeT3IAkG0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7384.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Coit Tower라는 곳에서 샌프란시스코를 내려다 볼 수 있다. 여기서의 전망도 멋있지만, 여기까지 오는 길도 정말 좋았다. 타워 자체는 안 올라갔다. 늦어서 못 올라간건지 안 올라간건지는 기억이 나지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7391.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yxwhx/dJMcaajgBAP/JyymyytbwZgpz4OEFwdk80/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yxwhx/dJMcaajgBAP/JyymyytbwZgpz4OEFwdk80/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yxwhx/dJMcaajgBAP/JyymyytbwZgpz4OEFwdk80/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYxwhx%2FdJMcaajgBAP%2FJyymyytbwZgpz4OEFwdk80%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7391.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분명히 처음에는 Pier 39가 멀다고 시작했던 것 같은데? 결국에는 배 긁는 물개를 찍고 갔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7403.png&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;2778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ik7lP/dJMcagw1c0p/Q287qphEPyAEJO76k4tNQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ik7lP/dJMcagw1c0p/Q287qphEPyAEJO76k4tNQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ik7lP/dJMcagw1c0p/Q287qphEPyAEJO76k4tNQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIk7lP%2FdJMcagw1c0p%2FQ287qphEPyAEJO76k4tNQ1%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;1284&quot; height=&quot;2778&quot; data-filename=&quot;IMG_7403.png&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;2778&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러고 돌아가는 길도 한참을 걸어가다가 BART 정거장을 찾아서 탈출했다. 이날 결국 4만보를 찍었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;샌프란시스코 하면 테크랑 차깨는거 말고는 생각나는게 없었는데 이 날 도시에서 너무 즐거운 시간을 보냈다. 내가 생각했던 것보다 훨씬 크고 다양한 볼거리가 있는 멋진 도시였다. 특히 힘들었던 시기에 도움을 얻기 위해서 방문했던 곳이고, 그런 시기에 나를 도와준 사람들이 있는 곳이라 더 소중한 경험인 것 같다. 생각해보면, 역사적으로도 샌프란시스코는 나처럼 2시간 뒤에 떠나는 비행기를 타고 도피해야 했던 사람들의 안식처였지 않는가. 세계 최고의 도시에서 좋은 시간을 보내면서, 앞으로도 이 곳이 최고의 도시로 남기를 기원했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7404.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbgadG/dJMcafkzGYK/3I9e43Ik2OsgR3KskHUd70/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbgadG/dJMcafkzGYK/3I9e43Ik2OsgR3KskHUd70/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbgadG/dJMcafkzGYK/3I9e43Ik2OsgR3KskHUd70/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbgadG%2FdJMcafkzGYK%2F3I9e43Ik2OsgR3KskHUd70%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7404.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 날에는 전에 다니던 회사에 몰래 들어가서 점심을 얻어먹다가 CTO님에게 걸려서 혼났다. 는 농담이고 같이 점심을 먹었다. 퇴사한지 3년이 넘어가는데 올 때마다 환대해 주셔서 감사했다. 그리고 비행기 타고 돌아갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돌아온 이후에는 잘 잤다.&lt;/p&gt;
&lt;h1&gt;Part 2: Portland, OR&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Mount St. Helens&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PDX에서 출발했다. 차로 대충 2시간 정도 걸린다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7442.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edcpvR/dJMcahQeiAc/uYs42b3F7rUIkaEJ3V26Z0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edcpvR/dJMcahQeiAc/uYs42b3F7rUIkaEJ3V26Z0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edcpvR/dJMcahQeiAc/uYs42b3F7rUIkaEJ3V26Z0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FedcpvR%2FdJMcahQeiAc%2FuYs42b3F7rUIkaEJ3V26Z0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7442.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7440.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/16XGn/dJMcaksErij/HPORHtqp3wJJLxeglkowo0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/16XGn/dJMcaksErij/HPORHtqp3wJJLxeglkowo0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/16XGn/dJMcaksErij/HPORHtqp3wJJLxeglkowo0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F16XGn%2FdJMcaksErij%2FHPORHtqp3wJJLxeglkowo0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7440.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7443.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DolTc/dJMcabbpj3w/0lwnCKYo6yim5D51n25RjK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DolTc/dJMcabbpj3w/0lwnCKYo6yim5D51n25RjK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DolTc/dJMcabbpj3w/0lwnCKYo6yim5D51n25RjK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDolTc%2FdJMcabbpj3w%2F0lwnCKYo6yim5D51n25RjK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7443.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가는 길은 꽤 좋은 드라이브였다. 저 다리는 꽤 무서웠다. 마지막 사진에서는 Weyerhaeuser라는 벌목 회사에서 화산 폭발 이후 수많은 나무를 심었다고 호감작을 하고 있다. Mount St. Helens 근처에서는 벌목 산업이 꽤 크게 형성되어 있다고 한다. 여기는 Rainier 근처랑 다르게 보호구역으로 지정이 되어 있지는 않고 벌목을 꽤 할 수 있는 것 같았다. 산으로 들어가는 길에서도 큰 나무들을 잔뜩 쌓아서 다니는 트럭들을 쉽게 마주칠 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7452.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JN9qq/dJMcaezcBt0/TTT38mkoshAb3gS36SxK2k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JN9qq/dJMcaezcBt0/TTT38mkoshAb3gS36SxK2k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JN9qq/dJMcaezcBt0/TTT38mkoshAb3gS36SxK2k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJN9qq%2FdJMcaezcBt0%2FTTT38mkoshAb3gS36SxK2k%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7452.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Visitor Center에서 산을 한 눈에 볼 수 있다. Mount St. Helens는 활화산이고, 1980년 5월에 크게 폭발했다. 당시 사상자가 50명 이상 나올 정도로 피해가 큰 화산 폭발이었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7446.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EwHan/dJMcacH9y3o/CbYzeINNCPLuyXKFN5EpU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EwHan/dJMcacH9y3o/CbYzeINNCPLuyXKFN5EpU0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EwHan/dJMcacH9y3o/CbYzeINNCPLuyXKFN5EpU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEwHan%2FdJMcacH9y3o%2FCbYzeINNCPLuyXKFN5EpU0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7446.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래에 깔린 호수도 아름답다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7449.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/02jFh/dJMcaksErzf/uc4eFjYxAp5Ogivu3sntxK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/02jFh/dJMcaksErzf/uc4eFjYxAp5Ogivu3sntxK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/02jFh/dJMcaksErzf/uc4eFjYxAp5Ogivu3sntxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F02jFh%2FdJMcaksErzf%2Fuc4eFjYxAp5Ogivu3sntxK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7449.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cascade Range에서 최근 일어난 화산 폭발 기록. 혈기왕성한 친구다. 20세기 이후에 터진 화산은 Lassen Peak (1915) 과 Mount St. Helens (1980) 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 있는 Visitor Center는 길의 끝이 아니고, 원래는 10마일 정도 더 산쪽으로 들어가면 Observatory가 있다. 아쉽게도 2년전에 산사태가 나서 그 길은 무너졌고... 지금은 접근할 수가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올 때 딱히 계획을 가지고 온 것은 아니라, 센터에 있는 ranger에게 하이킹 옵션을 물어봤고, Hummock Trail이라는 곳을 추천받아서 그 곳으로 갔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7459.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JprR9/dJMcaiVUcwx/3IR2naMkFjpgMe3mhwKp01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JprR9/dJMcaiVUcwx/3IR2naMkFjpgMe3mhwKp01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JprR9/dJMcaiVUcwx/3IR2naMkFjpgMe3mhwKp01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJprR9%2FdJMcaiVUcwx%2F3IR2naMkFjpgMe3mhwKp01%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7459.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mount St. Helens가 폭발하면서 뿌린 화산재 더미들을 볼 수 있는 트레일이었다. 볼록하게 튀어나온 검은 더미들이 화산재가 쌓인 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7464.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BMAeL/dJMcacnQLly/MA6jkleK5KdkPN2Hc5sXNk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BMAeL/dJMcacnQLly/MA6jkleK5KdkPN2Hc5sXNk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BMAeL/dJMcacnQLly/MA6jkleK5KdkPN2Hc5sXNk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBMAeL%2FdJMcacnQLly%2FMA6jkleK5KdkPN2Hc5sXNk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7464.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hummock Trail을 반 바퀴쯤 돌면 Boundary Trail이 나온다. 다음 Viewpoint는 4마일을 더 가면 나온다고 한다. 이때 시간이 오후 4시 정도였으니, 왕복 8마일을 하는 건 당연히 불가능하겠지만, 끝까지는 못 가더라도 중간에 뭐가 있지 않을까 하는 생각 (그리고 샌프란에서 얻은 근거없는 자신감도 약간) 에 Trail 방향으로 향했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7465.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8zpVL/dJMcad1mD0y/kwgJPExyvm9n02KQkxZEqk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8zpVL/dJMcad1mD0y/kwgJPExyvm9n02KQkxZEqk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8zpVL/dJMcad1mD0y/kwgJPExyvm9n02KQkxZEqk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8zpVL%2FdJMcad1mD0y%2FkwgJPExyvm9n02KQkxZEqk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7465.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7466.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c76OyQ/dJMcaap2bEy/zNnznuvmF5kBZf2mjbuSDk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c76OyQ/dJMcaap2bEy/zNnznuvmF5kBZf2mjbuSDk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c76OyQ/dJMcaap2bEy/zNnznuvmF5kBZf2mjbuSDk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc76OyQ%2FdJMcaap2bEy%2FzNnznuvmF5kBZf2mjbuSDk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7466.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Boundary Trail 상에서 경치가 좋은 곳들이다. 화산 폭발 과정에서 나무가 거의 다 죽어서 그늘이 없고, 그러면서도 경사가 꽤 심해서 꽤나 고된 트레일이었다. Cascade Range라는 생각이 전혀 안 들고, 네바다의 사막에 떨어진 거 같은 느낌을 받을 수 있었다. 대부분의 곳은 지금 찍은 것만큼 경치가 좋지 않아서, 이 사진들을 건지러 1마일 정도 들어갔다가 바로 돌아갔다. 아주 작정하고 끝까지 들어갈게 아니면 그렇게 좋은 선택은 아닌 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7467.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbRyuP/dJMcaap2bEP/L1kuDJU8SV1VrK0A3saX1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbRyuP/dJMcaap2bEP/L1kuDJU8SV1VrK0A3saX1K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbRyuP/dJMcaap2bEP/L1kuDJU8SV1VrK0A3saX1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbRyuP%2FdJMcaap2bEP%2FL1kuDJU8SV1VrK0A3saX1K%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7467.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7474.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xNMg1/dJMcafZbfup/SyICKqUZnSrOTLIfc3x3Y1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xNMg1/dJMcafZbfup/SyICKqUZnSrOTLIfc3x3Y1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xNMg1/dJMcafZbfup/SyICKqUZnSrOTLIfc3x3Y1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxNMg1%2FdJMcafZbfup%2FSyICKqUZnSrOTLIfc3x3Y1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7474.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hummock Trail 자체는 그렇게 힘들지 않고 그늘진 곳도 많은데, 아까 돈 detour때문에 정말 지친 상태로 와서 힘들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7477.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B4ayN/dJMb99SceIQ/fMCBa3kiPK8QoQJ10Dkxn1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B4ayN/dJMb99SceIQ/fMCBa3kiPK8QoQJ10Dkxn1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B4ayN/dJMb99SceIQ/fMCBa3kiPK8QoQJ10Dkxn1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB4ayN%2FdJMb99SceIQ%2FfMCBa3kiPK8QoQJ10Dkxn1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7477.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돌아오기 전 Visitor Center에서 봤던 멋진 호수 앞을 방문했다. 수영하는 아이들이 정말 많았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7483.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4UVDn/dJMb99SceJ1/UE8YhbW7xJd9kZykpHTHRk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4UVDn/dJMb99SceJ1/UE8YhbW7xJd9kZykpHTHRk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4UVDn/dJMb99SceJ1/UE8YhbW7xJd9kZykpHTHRk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4UVDn%2FdJMb99SceJ1%2FUE8YhbW7xJd9kZykpHTHRk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7483.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여행 끝. St Helens는 동쪽으로도 진입할 수가 있는데, 나중에 다시 올 일이 있다면 그렇게도 해보고 싶다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Downtown&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7496.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhH5Bk/dJMcagX5Boy/tJgSPMDwXxq3DWoYnt1cXK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhH5Bk/dJMcagX5Boy/tJgSPMDwXxq3DWoYnt1cXK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhH5Bk/dJMcagX5Boy/tJgSPMDwXxq3DWoYnt1cXK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhH5Bk%2FdJMcagX5Boy%2FtJgSPMDwXxq3DWoYnt1cXK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7496.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7500.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DqCzk/dJMcagqfCzi/BMyjowGWpD57oMBtwPxj2K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DqCzk/dJMcagqfCzi/BMyjowGWpD57oMBtwPxj2K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DqCzk/dJMcagqfCzi/BMyjowGWpD57oMBtwPxj2K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDqCzk%2FdJMcagqfCzi%2FBMyjowGWpD57oMBtwPxj2K%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7500.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7506.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/McLGe/dJMcacnQLn2/1paiYWlWySvAhumMfJ4wBk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/McLGe/dJMcacnQLn2/1paiYWlWySvAhumMfJ4wBk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/McLGe/dJMcacnQLn2/1paiYWlWySvAhumMfJ4wBk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMcLGe%2FdJMcacnQLn2%2F1paiYWlWySvAhumMfJ4wBk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7506.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7509.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b43PSD/dJMcagX5BoF/R0tjKBhgqH0dpNwkibFIqk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b43PSD/dJMcagX5BoF/R0tjKBhgqH0dpNwkibFIqk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b43PSD/dJMcagX5BoF/R0tjKBhgqH0dpNwkibFIqk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb43PSD%2FdJMcagX5BoF%2FR0tjKBhgqH0dpNwkibFIqk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7509.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Japanese Garden. 사진으로 보니까 그냥 Pacific Northwest Garden인거 같다. (당연히 칭찬이다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7531.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXq9pc/dJMcafrljAm/nrKHn1rOgehvkmksCZwqKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXq9pc/dJMcafrljAm/nrKHn1rOgehvkmksCZwqKk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXq9pc/dJMcafrljAm/nrKHn1rOgehvkmksCZwqKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXq9pc%2FdJMcafrljAm%2FnrKHn1rOgehvkmksCZwqKk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7531.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; data-ke-style=&quot;alignCenter&quot;&gt;&lt;span class=&quot;bar_progress&quot;&gt;&lt;/span&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; data-ke-style=&quot;alignCenter&quot;&gt;&lt;span class=&quot;bar_progress&quot;&gt;&lt;/span&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rose&amp;nbsp;Test&amp;nbsp;Garden.&amp;nbsp;포틀랜드가&amp;nbsp;장미로&amp;nbsp;유명하다고&amp;nbsp;한다.&amp;nbsp;장미&amp;nbsp;대회에서&amp;nbsp;수상한&amp;nbsp;작품들을&amp;nbsp;전시해&amp;nbsp;놓은&amp;nbsp;것으로&amp;nbsp;보였다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7544.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpxeYw/dJMcaaQ6yve/IKbc0uwsM7V3LjJ1j2G8K0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpxeYw/dJMcaaQ6yve/IKbc0uwsM7V3LjJ1j2G8K0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpxeYw/dJMcaaQ6yve/IKbc0uwsM7V3LjJ1j2G8K0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpxeYw%2FdJMcaaQ6yve%2FIKbc0uwsM7V3LjJ1j2G8K0%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7544.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내려오는&amp;nbsp;길에&amp;nbsp;야자수??&amp;nbsp;를&amp;nbsp;봤다&amp;nbsp;왜&amp;nbsp;여기..??&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7556.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YTV29/dJMcadtwGun/teuMlkBTjldPJWiejzIo0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YTV29/dJMcadtwGun/teuMlkBTjldPJWiejzIo0K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YTV29/dJMcadtwGun/teuMlkBTjldPJWiejzIo0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYTV29%2FdJMcadtwGun%2FteuMlkBTjldPJWiejzIo0K%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7556.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Old Town에는 Voodoo Donuts라고 하는 신기한 도넛집이 있다. 귀여운 도넛을 프레첼 막대기로 부두인형마냥 찔러서 저주를 거는 컨셉이다. 오렌지 색이 흘러나오는 (ㅋㅋ) 연출이 귀엽다. 도넛은 &quot;정말&quot; 달았다. 미국식 &quot;달다&quot;를 초월하는 수준의 단맛이었고, 남자 둘이 달려들어서 거의 중도포기 할 뻔했으나 어떻게 잘 해치웠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7551.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkEUs5/dJMcaeMJLWj/PXEsskeYFgABIqeeRidSIk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkEUs5/dJMcaeMJLWj/PXEsskeYFgABIqeeRidSIk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkEUs5/dJMcaeMJLWj/PXEsskeYFgABIqeeRidSIk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkEUs5%2FdJMcaeMJLWj%2FPXEsskeYFgABIqeeRidSIk%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7551.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7557.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXizrt/dJMcagX5Bp3/KoXGmlnJgdoIEiFMMOAlFk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXizrt/dJMcagX5Bp3/KoXGmlnJgdoIEiFMMOAlFk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXizrt/dJMcagX5Bp3/KoXGmlnJgdoIEiFMMOAlFk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXizrt%2FdJMcagX5Bp3%2FKoXGmlnJgdoIEiFMMOAlFk%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7557.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7565.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTcwya/dJMcagDMP9k/1eyDdZHAsGzS8jLHnv7geK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTcwya/dJMcagDMP9k/1eyDdZHAsGzS8jLHnv7geK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTcwya/dJMcagDMP9k/1eyDdZHAsGzS8jLHnv7geK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTcwya%2FdJMcagDMP9k%2F1eyDdZHAsGzS8jLHnv7geK%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7565.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포틀랜드는 SF / 시애틀과 다른 고유의 멋이 있는 곳이다. Downtown은 깔끔하다고 말할수는 없지만 그 나름의 매력이 있는 곳임은 확실하다. 지금은 안타까운 일이 일어나고 있지만 빨리 복구됐으면 좋겠다. 생각해보면 8월에 갈 수 있었던게 참 운이 좋았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7567.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tO5E2/dJMcagRjXtv/p48ZOozHwORTreiY7sKEK1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tO5E2/dJMcagRjXtv/p48ZOozHwORTreiY7sKEK1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tO5E2/dJMcagRjXtv/p48ZOozHwORTreiY7sKEK1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtO5E2%2FdJMcagRjXtv%2Fp48ZOozHwORTreiY7sKEK1%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7567.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7568.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UI3uK/dJMcahJsIWO/eoIyNxf1h5kzs5K6YdMOs1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UI3uK/dJMcahJsIWO/eoIyNxf1h5kzs5K6YdMOs1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UI3uK/dJMcahJsIWO/eoIyNxf1h5kzs5K6YdMOs1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUI3uK%2FdJMcahJsIWO%2FeoIyNxf1h5kzs5K6YdMOs1%2Fimg.jpg&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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_7568.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Powell's Bookstore. 특이한 책들이 많았다. 읽고 싶었던 책 하나를 집었는데, 나오는 길에 &quot;Pacific Northwest Selection&quot; 이라고 책을 팔고 있길래 거기서도 두 권을 충동적으로 집었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7573.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4JcBZ/dJMcaj1z53p/HM1zmq95Sb6pyBNLenTyH0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4JcBZ/dJMcaj1z53p/HM1zmq95Sb6pyBNLenTyH0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4JcBZ/dJMcaj1z53p/HM1zmq95Sb6pyBNLenTyH0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4JcBZ%2FdJMcaj1z53p%2FHM1zmq95Sb6pyBNLenTyH0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7573.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7574.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmpmYs/dJMcafkzHqS/NkLh4n6CwuwKip66LshLa0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmpmYs/dJMcafkzHqS/NkLh4n6CwuwKip66LshLa0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmpmYs/dJMcafkzHqS/NkLh4n6CwuwKip66LshLa0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmpmYs%2FdJMcafkzHqS%2FNkLh4n6CwuwKip66LshLa0%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7574.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근처에 Deschutes Brewing이라고 하는 브루어리가 있어서 거기서 저녁을 먹었다. 맥주와 음식 모두 아주 훌륭했다. 다시 가고 싶당 ㅠ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7571.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CbKqE/dJMcabJfhdQ/9Wly5HMRaGzVEsHwg04yvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CbKqE/dJMcabJfhdQ/9Wly5HMRaGzVEsHwg04yvK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CbKqE/dJMcabJfhdQ/9Wly5HMRaGzVEsHwg04yvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCbKqE%2FdJMcabJfhdQ%2F9Wly5HMRaGzVEsHwg04yvK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_7571.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝!&lt;/p&gt;</description>
      <category>생각</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/362</guid>
      <comments>https://amugelab.tistory.com/362#entry362comment</comments>
      <pubDate>Thu, 30 Oct 2025 11:19:56 +0900</pubDate>
    </item>
    <item>
      <title>SCPC 2025 후기</title>
      <link>https://amugelab.tistory.com/361</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;대회 시작 전&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터 세팅 설정 시간을 몇 분 준다. 근데 워낙 이상한 환경이라서 설정 시간 안에 제대로 세팅하기가 쉽지 않다. 다행이도 옆자리에 앉아있던 &lt;a href=&quot;https://www.acmicpc.net/user/fefe&quot;&gt;신민철 (fefe)&lt;/a&gt; 가 환경 변수 설정 등을 알려줘서 VS Code를 사용할 수 있게 되었다. 이 세팅 때문에 우승 여부가 갈렸을 수도 있다. 무한한 감사를 표한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1번&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아주 간단한 문제였는데, 이런 버그를 만들고 찾지 못했다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;int ret = 0;  
{  
int ret = 0;  
...
}  
return ret;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일도 사실상 처음 해 본 거라, 여러 상황을 의심하다가 오래 걸렸던 것 같다. 결국 20분 걸려서 솔브.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2번&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빡빡해 보이는 제한이 있는 문제였다. 열을 8개씩 묶으면 될 거라고 생각했는데, python이 깔려있지 않아 손으로 $256 * 125 + 125000$ 을 했더니 만점 제한에 살짝 못 미쳤다. 그런데 C++로 $b \in {7, 8, 9}$ 에 대해 $(2^b - b - 1) * N/b + (N/b-1)N$ 을 계산해보니 $b = 8$에서 만점 제한 이하가 찍혔다. 그래서 처음 생각한 풀이를 짜서 AC를 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 문제를 풀었을 때 1등과 20분 정도의 시간 차이가 났다. 시작이 느려서 느낌이 좋지 않았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4번&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3번을 읽어봤고 생각해봤는데 풀이가 잘 떠오르지 않았다. $K \le 4$ 인걸 보면 깔끔한 풀이는 없을 거 같아서 4번으로 도망갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4번은 &quot;깔끔하고 간단한&quot; 풀이가 존재하는 문제긴 했다. 이제 문제는 이걸 트리 DP로 구현하는 건데, DP 상태 인자가 많아서 그 부분은 전혀 간단하지 않았다. 처음에 문제 상황을 제대로 정리하고 들어가지 못했고, 짜다가 틀려서 놓친 부분을 추가하는 식으로 이 때문에 DP 인자가 각 정점당 2~3개에서 5개로 증가했다. 코딩 다 하고 제출까지 한 뒤에 새로 틀린 부분을 찾고 새로운 인자를 추가하는 식으로 작업하다가멘탈이 나갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VS Code에서 Linter 설정은 결국 실패해서, 코드 auto indent가 없이 코딩을 진행했다. 트리 DP 구현을 위해 한 7중 정도의 for문이 있었는데, 중괄호가 닫히지 않았다고 컴파일이 되지 않았다. auto indent가 없어서 코드들의 줄이 안 맞아서, 10분동안 빠진 중괄호만 찾고 있었다. 이 때도 멘탈이 갈렸는데, 괄호 짝을 맞춘 이후에는 AC를 받았다. 이때는 이미 4번 first solve도 나오고 3번 솔버도 많이 나온 상태. &lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5번&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4번을 풀고 얼마 안되어서 이미 스코어보드에 960점이 있었다. 속도전으로는 승산이 없는 상태였기 때문에 5번에서 무조건 점수를 냈어야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크에 완전 방향 그래프가 있었는데 난 그 문제를 푸는 방법을 두 가지 알고 있었다. 하나는 그냥 아무 생각 없이 인접 행렬을 comparator로 정렬하는 풀이고, 다른 하나는 끝점을 고정한 후 postorder를 찍어서 해밀턴 경로를 찾는 방식. 근데 x-&amp;gt;y, y-&amp;gt;x 방향의 간선이 모두 존재할 수 있음을 간과하다가 푸는 데 오래 걸렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 정점의 indegree가 1인 그래프는 문제 조건을 자명히 만족한다. 그래서 처음에는 모든 정점의 indegree를 1로 만드는 방향으로 접근했다. 만약에 정점의 indegree가 2 이상이면, 들어오는 정점들을 모두 방문하는 해밀턴 경로가 존재하니 (36점), 해밀턴 경로의 끝점을 유일한 indegree로 지정해준 후 pseudotree에서 쉬운 문제를 해결할 수 있다고 생각했다. 근데 이 접근을 잘 생각해보니까 자기들끼리 사이클을 형성할 수 있다는 이슈가 있었다. 그 이슈를 해결하기 위해서 사이클 노드가 생겼을 때 거기서 사이클로 들어오는 간선을 자료구조를 사용해서 찾아주는 방향으로 생각했는데, 이렇게 되니까 각 정점의 in-degree를 small-to-large 같은 걸로 관리해야 해서, 문제의 풀이가 너무 복잡해졌다.&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;대회 창에서 5번 만점자가 1명 등장했다. (종료 30분 전쯤) 이 때 풀이가 아주 복잡한 문제는 아닐거라는 직감을 받았고, 간단한 풀이들을 생각했다. 어쨌든 완전 방향 그래프도 이 문제의 입력 중 하나이니, 만점 풀이가 존재한다면 완전 방향 그래프에서 해밀턴 경로를 구할 수 있어야 할 것이다. 그래서 완전 방향 그래프를 해결하는 풀이들을 고치는 방향으로 생각해 보았다. 인접 행렬을 정렬하는 건 말이 안 되는 것 같으니, 각 정점에 대해서 해당 정점을 도달할 수 있는 모든 정점을 DFS로 방문하고 그 postorder가 경로이기를 기도했다. 이는 놀랍게도 사실이었고, 그래서 모든 정점에 대해서 해당 정점에서 끝나는 경로를 DFS로 찾는 $O(nm)$ 풀이를 제출해서 맞았다. (종료 20분 전)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 이슈는 최적의 끝점을 어떻게 찾느냐였다. 이것도 처음에는 좋은 방법이 보이지 않았는데, 잘 생각해보니 SCC를 구하고 longest path를 찾으면 입력 그래프의 성질에 따라서 그게 reachable한 정점의 개수와 동일하다는 것을 깨달았다. 그래서 급하게 SCC를 짜서 만점을 받았다. (종료 10분 전)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3번&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남은 10분동안 떨면서 3번의 15점을 구현했다. 3번을 아주 고민해보지 않은 것은 아니라서, 15점은 구현만 하면 됐다. 생각보다 구현이 간단해서 5분 정도 안에 점수를 올렸다. 그 와중에 3번의 counting 서브태스크가 상당히 쉽다는 것을 깨달아서 슬퍼졌다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;대회 후&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 100 / 200 / 15 / 300 / 400 = 1015점 으로 마무리.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프리즈가 된 1시간 동안 5번에서 60점 초과를 받은 사람이 단 한명도 없을지 의문이었는데, 또 한편으로는 5번 문제가 60점 / 400점 사이에 유의미한 서브태스크가 있어보이지는 않아서 가능성이 있다고도 생각했다. 난 느낌상 다른 5번 만점자가 4솔브는 아닐 거라고 짐작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 대회가 끝나고 바로 5번 만점자를 찾았고, 실제로 4솔브가 아니었다. 그러면 우승 가능성이 있으니, 5번을 풀었다는 사실을 공개하지 않기로 했다 (ㅎㅎ). 얘기해 보니 960점으로 끝낸 사람들이 3명 정도 있길래, 기대를 품고 시상식을 기다렸다. 그리고 특별상에 내 이름이 호명되지 않아서 우승을 직감했다 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 1등상을 수상했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 1000점을 얻은 게 마지막 10분이니, 대회 시간 절대다수를 수상권 밖에 있다가 마지막 10분 뒤집기로 우승을 했다. 10년 넘게 대회하면서 이렇게 &quot;역전승&quot; 으로 이겨본 게 처음인거 같다. 보통 초반부터 상위권을 계속 유지하지 않으면 후반에 말리는 경우가 많았던 것 같은데, 5번에서 운이 엄청나게 좋았다고 생각한다. 한편으로&amp;nbsp;960점&amp;nbsp;수상자가&amp;nbsp;3명이나&amp;nbsp;되는걸&amp;nbsp;보면&amp;nbsp;속도전에서는&amp;nbsp;상대가&amp;nbsp;안&amp;nbsp;되는&amp;nbsp;것&amp;nbsp;같고,&amp;nbsp;그런&amp;nbsp;면에서&amp;nbsp;이번에&amp;nbsp;결국&amp;nbsp;은퇴할&amp;nbsp;수&amp;nbsp;있어서&amp;nbsp;다행이라고&amp;nbsp;생각했다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;아무튼&amp;nbsp;PS&amp;nbsp;하면서&amp;nbsp;손에&amp;nbsp;꼽을&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;정도로&amp;nbsp;예상하기&amp;nbsp;어렵고&amp;nbsp;짜릿한&amp;nbsp;우승이었다.&lt;/p&gt;</description>
      <category>생각</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/361</guid>
      <comments>https://amugelab.tistory.com/361#entry361comment</comments>
      <pubDate>Sun, 31 Aug 2025 22:41:07 +0900</pubDate>
    </item>
    <item>
      <title>IOI 2025 Day 2</title>
      <link>https://amugelab.tistory.com/360</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;볼리비아 수크레에서 IOI 2025 Day 2 대회가 진행되었다. 한국 학생들의 최종 성적은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우민규, 100 / 99.33 / 93 / 100 / 82.45 / 100, 574.78점, &lt;b&gt;2등 (금메달)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;이유찬, 100 / 58.89 / 86 / 66 / 72.89 / 83, 466.77점, 16등 &lt;b&gt;(금메달)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;정민찬, 100 / 79.77 / 100 / 66 / 30 / 83, 458.77점, 19등 &lt;b&gt;(금메달)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;변재우, 39 / 76.25 / 86 / 100 / 64.45 / 83, 448.7점, 24등 &lt;b&gt;(금메달)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국 팀은 Day 2에도 기세를 이어 대단히 좋은 성적을 내었다. 우민규 학생은 Day 1에도 4등의 성적으로 대회를 마무리했는데, Day 2에서는 이를 더 끌어올려 종합 2등의 아주 우수한 개인 성적으로 대회를 마무리했다. Day 1 금메달권이었던 이유찬 학생과 정민찬 학생 역시 Day 2에서도 좋은 결과를 유지하였다. Day 1 60등이었던 변재우 학생은 Day 2 종합 11등의 성적으로 점수를 크게 올려 금메달권에 진입하였다. 이에 따라 한국 팀은 1992년 이후 IOI 출전 이래 &lt;b&gt;첫 전원 금메달&lt;/b&gt; 업적을 달성하였다. 축하합니다! 정민찬 학생과 변재우 학생의 경우 내년에도 IOI를 참가할 수 있다. 앞으로도 좋은 결과를 내기를 기원한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20250802_191226.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GKXOf/btsPRoix3JF/CkiUCqzZFXiNcyEMTWhqY1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GKXOf/btsPRoix3JF/CkiUCqzZFXiNcyEMTWhqY1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GKXOf/btsPRoix3JF/CkiUCqzZFXiNcyEMTWhqY1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGKXOf%2FbtsPRoix3JF%2FCkiUCqzZFXiNcyEMTWhqY1%2Fimg.jpg&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;4000&quot; height=&quot;3000&quot; data-filename=&quot;20250802_191226.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해 IOI의 우승자는 중국의 Hengxi Liu 학생이다. Day 1을 만점, Day 2를 종합 1등의 성적으로 마무리하였고, 총 591.23점의 총점으로 대회를 마쳤다. 축하합니다! 올해 참가 팀 중 전원 금메달을 달성한 팀은, 중국 / 한국 / 루마니아 총 3개국이다. 총점 합으로는 중국이 가장 높으며, 한국의 총점이 루마니아보다 아주 약간 (1949.02 &amp;gt; 1938.13) 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해 Day 2의 마지막 문제인 장애물(obstacle) 은 한국의 조승현(&lt;a href=&quot;https://cphof.org/profile/codeforces:ainta&quot;&gt;ainta&lt;/a&gt;) 가 출제하였다. 조승현은 IOI 2020에서도 &lt;a href=&quot;https://koosaga.com/260&quot;&gt;plants&lt;/a&gt;라는 문제를 출제했으며, 한국 IOI 선발고사를 포함한 다양한 대회에서 꾸준히 출제 활동을 이어나가고 있다. 한국 출제자들이 좋은 문제를 IOI에 기여하는 것이 바람직하고 좋다고 생각한다. 축하합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, 관심이 있다면 올해 IOI를 참가한 &lt;a href=&quot;https://lighton.tistory.com/24?category=953225&quot;&gt;이유찬 학생의 참가 후기&lt;/a&gt; 와, 현장 코치로 참여한 &lt;a href=&quot;https://qwerasdfzxcl.tistory.com/47&quot;&gt;박상훈 코치의 문제 풀이&lt;/a&gt; 를 읽어보는 것을 추천한다. Day 2의 이주(migration) 문제 풀이는 박상훈 코치의 풀이를 읽고 작성하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현한 코드는 &lt;a href=&quot;https://github.com/koosaga/olympiad/tree/master/IOI&quot;&gt;https://github.com/koosaga/olympiad/tree/master/IOI&lt;/a&gt; 에 모두 올라와 있다.&lt;/p&gt;
&lt;h1&gt;Day 2 Problems PDF&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cVXJu9/dJMb84cieLC/K5IKLKWz4CeuQHMQKgDW50/festival-en.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;festival-en.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.14MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/oU1BV/dJMb84cieLD/AI3XqCTWumKC4jc7RmzEPk/festival-ko_KR.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;festival-ko_KR.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.23MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bblwpB/dJMb81mkUl3/bnxOytkw6q1M0ZVtX5dxz0/migrations-en.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;migrations-en.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.21MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/o7KkI/dJMb88Mw0sy/TEX43IkPUInk1rpbwu8wk0/migrations-ko_KR.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;migrations-ko_KR.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.46MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/crjSUn/dJMb9L4RuIz/ql1t2rwleGyVLagpKZsKkk/obstacles-en.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;obstacles-en.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.16MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bKZtqP/dJMb9X5h2Yv/LBKkZOMi1bRKIyj7QkANlK/obstacles-ko_KR.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;obstacles-ko_KR.pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.23MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;Problem 4. 축제 (festival)&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠폰 -&amp;gt; 물건, 토큰 -&amp;gt; 동전으로 표현한다. (쿠폰으로 토큰을 산다는 말을 벌써 10번 넘게 쓰다 지웠다.)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 1 (5점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$T[i] = 1$ 이니, 물건을 구매하면 그냥 가격만큼 동전 개수가 줄어든다. 물건 가격의 합을 $A$ 이하로 하면서 최대한 많은 물건을 구매하면 된다. 모든 물건을 가격 순으로 정렬한 후, 가장 저렴한 물건부터 사면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 2, 4 (27점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 $T[i]$ 를 가진 물건이 여럿 있으면, 이 중 가격 $P[i]$ 를 최소로 하는 물건을 구매하지 않을 이유가 없다. 각 $t = 1, 2, 3, 4$ 에 대해서, $T[i] = t$ 인 물건들을 $P[i]$ 순으로 정렬하자. 매 순간 구매한 물건의 집합은 $P[i]$ 순서상 prefix를 이룬다. 즉, 현재 $T[i] = t$ 인 물건을 몇 개 구매했는지 알면 무슨 물건을 샀는지도 바로 알 수 있다. $DP[c_1][c_2][c_3][c_4]$ 를, $T[i] = t$ 인 물건을 $c_t$ 개 샀을 때 동전 개수의 최댓값이라고 정의하자. 서브태스크 $4$ 에서는 이 DP를 $O(N^4)$ 에 계산할 수 있고, 서브태스크 2에서는 이 DP를 $O(N^2)$ 에 계산할 수 있다 ($c_3 = c_4 = 0$).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한가지 까다로운 점은 $DP$ 값이 매우 커질 수 있다는 점인데, 동전의 개수가 $N\cdot A$ 이상이면 남은 물건을 전부 구매할 수 있다. 고로, DP 값이 $10^{15}$ 초과로 넘어가면 $10^{15}$ 로 잘라줘도 문제가 없다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 3 (39점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$T[i] = 1$ 인 물건을 산 직후 $T[j] &amp;gt; 1$ 인 물건을 샀다고 하자. 두 물건을 다 살 수 있었으니 어차피 동전은 $P[i] + P[j]$ 이상으로 있었을 것이다. 그런데 $T[j] &amp;gt; 1$ 인 물건을 사고 $T[i] = 1$ 인 물건을 사면, 남은 동전의 개수에 비례해서 추가 보상을 얻고 $T[i] = 1$ 인 물건을 살 수 있다. 고로, 이 경우 $T[i] = 1$ 인 물건을 나중에 사는 것이 무조건 이득이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Exchange argument로 위와 같은 논리를 반복하면, $T[i] &amp;gt; 1$ 인 물건을 다 산 이후에 $T[i] = 1$ 인 물건을 사는게 이득임을 알 수 있다. $T[i] = 2$ 인 물건을 몇개 샀는지 고정하자. 어차피 가격이 낮은 것부터 샀을 테니, 산 이후 남은 동전 개수를 알 수 있다. 남은 동전 개수를 알면, 이를 통해 $T[i] = 1$ 인 동전을 몇개 더 살 수 있는지도 부분합과 이분 탐색을 통해서 알 수 있다. 고로, 모든 경우의 수를 $O(N \log N)$ 에 계산할 수 있어 문제가 해결된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 5 (66점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크 5에서는 모든 물건을 살 수 있다는 것이 보장되기 때문에, 물건을 사는 정확한 순서만 찾을 수 있으면 문제를 해결할 수 있다. &lt;a href=&quot;https://www.acmicpc.net/problem/2180&quot;&gt;동전의 개수가 중간에 음수가 되어도 되고, 물건을 모두 산 이후 남은 동전의 개수를 최대화하는 유형의 문제&lt;/a&gt; 가 여럿 있다. 이러한 문제의 전략을 사용할 수 있을까? 모든 물건을 살 수 있다면 남은 동전의 개수가 $0$ 개 이상이어야 하며, 중간에 동전의 개수가 음수가 될 수는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다행이도, 남은 동전의 개수가 $0$ 개 이상이 되는 순서만 있으면, 중간에 동전의 개수가 음수가 되는 경우를 걱정할 필요는 없다. 만약 어떤 순간에 동전의 개수가 음수가 된다면, 이후 동전의 개수를 절대 $0$ 이상으로 되돌릴 수는 없다. 고로, 남은 동전의 개수가 $0$ 개 이상이 되기만 하면 항상 올바른 순서이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 남은 동전의 개수를 최대화하는 문제를 풀어보자. 초기 동전 개수가 $X$ 이고, 두 물건 $(P_1, T_1), (P_2, T_2)$ 가 있다고 하자. 둘을 사는 순서는 두 가지이다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$(P_1, T_1)$ 인 물건을 사고 $(P_2, T_2)$ 인 물건을 사는 시나리오에서는, 동전 개수가 $X \rightarrow T_1 (X - P_1) \rightarrow T_2 (T_1 (X - P_1) - P_2)$ 가 된다.&lt;/li&gt;
&lt;li&gt;$(P_2, T_2)$ 인 물건을 사고 $(P_1, T_1)$ 인 물건을 사는 시나리오에서는, 동전 개수가 $X \rightarrow T_2 (X - P_2) \rightarrow T_1 (T_2 (X - P_2) - P_1)$ 가 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(P_1, T_1)$ 을 $(P_2, T_2)$ 보다 먼저 사는 것을 정당화하려면, $T_2 (T_1 (X - P_1) - P_2) \geq T_1 (T_2 (X - P_2) - P_1)$ 가 성립해야 한다. 이 식을 정리하면:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$T_1 T_2 P_2 + T_1 P_1 \geq T_1 T_2 P_1 + T_2 P_2$&lt;br /&gt;$P_2 + P_1 / T_2 \geq P_1 + P_2 / T_1$&lt;br /&gt;$P_2 (1 - 1/T_1) \geq P_1 (1 - 1/T_2)$&lt;br /&gt;$\frac{P_1}{1 - 1/T_1} \leq \frac{P_2}{1 - 1/T_2}$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 된다. 즉, Exchange argument에 의해서 남은 동전 개수를 최대화하는 순서는 모든 값을 $P / (1 - 1/T)$ 순으로 정렬해서 얻을 수 있다. $T = 1$ 인 경우에는 저 값을 계산할 수가 없는데, 서브태스크 3의 논리에 의해서 $T = 1$ 인 경우는 항상 $T &amp;gt; 1$ 인 경우보다 뒤에 오게 된다. 고로 $T = 1$ 의 우선순위가 가장 뒤로 밀리게끔 정렬해 주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 물건을 이러한 순서로 정렬하면 $O(N \log N)$ 시간에 서브태스크 5를 해결할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 6 (82점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 물건에 대해서 $T[i] (A - P[i]) &amp;lt; A$ 가 성립한다. 즉, 초기 상태에서 해당 물건을 구매하면 무조건 손해가 발생한다. 더 나아가서, 그 이후의 동전 개수가 $X \leq A$ 개라면, $T[i] (X - P[i]) &amp;lt; X$ 역시 성립하기 때문에, 현재 가격과 상관 없이 가지고 있던 동전을 잃게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 금액이 $A$ 였다고 할 때, $A$ 에서의 손실이 각 물건을 사면서 얼마나 증가하는지를 살펴보자. $L \geq 0$ 에 대해, $A - L$ 인 상태에서 물건 $i$ 를 사서 동전 개수가 $A - L^\prime$ 이 되었다면, $A - L^\prime = (A - L - P[i]) T[i]$ 가 성립한다. 문제 조건과 결합해서 전개하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$A - L^\prime = (A - L - P[i]) T[i] &amp;lt; A - L \cdot T[i]$&lt;br /&gt;$L^\prime &amp;gt; L \cdot T[i]$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고로, 초기 금액에서의 손실이 매번 최소 $T[i]$ 배 증가한다. 손실액은 $A$ 이상일 수 없기 때문에, 이는 $T[i] \geq 2$ 인 물건을 최대 $\log_2 A + O(1)$ 개만 구매할 수 있음을 의미한다. 여기서 서브태스크 3/4의 풀이로 환원할 수 있지만, 서브태스크 5의 관찰을 사용해서 조금 더 빠르고 구현하기 쉬운 풀이를 소개한다. 모든 $T[i] \geq 2$ 인 물건을 서브태스크 5의 순서대로 정렬하자. 물건을 모두 구매하지 않고 그 부분집합만 구매한다고 하더라도, 물건을 구매하는 순서는 서브태스크 5의 순서와 동일할 것이다. 고로 이 순서에 기반해서 DP를 구성할 수 있다. $DP[i][j]$ 를 첫 $i$ 개의 물건 중 $j$ 개의 물건을 샀을 때 동전 개수의 최댓값이라고 정의하자. 살 수 있는 물건의 수가 $\log_2 A + O(1)$ 개이니 이 DP를 $O(N \log A)$ 시간에 계산할 수 있다 (반환값이 $10^{15}$ 초과일때 오버플로우를 막기 위해 적당히 잘라주는 것을 잊지 말자.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DP를 전부 계산한 이후에는, $T[i] \geq 2$ 인 물건을 $p$ 개 구매했을 때 남은 동전 개수를 알 수 있다. 모든 $p$ 에 대해서, 남은 동전 개수로 $T[i] = 1$ 인 물건을 가격 순으로 구매해보면, 살 수 있는 물건 수의 최댓값을 알 수 있다. DP 테이블을 역추적하면 최적해 역시 반환 가능하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;만점 풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크 5와 6의 풀이를 합치면 만점 풀이가 나온다. 서브태스크 6이 전체 문제에 대해 강력한 힌트를 준다고 느껴진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크 5의 순서대로 모든 물건을 정렬하자. 앞에서 설명했듯이, 모든 물건을 구매하지 않는다고 하더라도 서브태스크 5의 순서를 따라도 된다. 현재 동전의 개수를 $C = A$ 라고 했을 때, 만약 첫 번째 물건이 $T[i] (C - P[i]) \geq C$ 를 만족할 경우, 이 물건을 사지 않을 이유가 없다: 물건의 개수를 늘릴 뿐만 아니라 동전의 개수 역시 손해를 보지 않기 때문이다. 동전의 개수가 줄지 않는다면, 계속해서 맨 앞에 있는 물건을 구매하자. 이 과정에서 $C \geq NA$ 가 되었을 경우 모든 물건을 살 수 있으니 그냥 현재 순서를 반환하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 첫 번째 물건이 $T[i] (C - P[i]) &amp;lt; C$ 를 만족한다고 하자. 이 경우, 남은 모든 물건이 $T[i] (C - P[i]) &amp;lt; C$ 를 만족함을 증명할 수 있다. 만약 $T[j] (C - P[j]) \geq C$ 를 만족하는 물건이 있다고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$T[i] (C - P[i]) &amp;lt; C \leq T[j] (C - P[j])$&lt;br /&gt;$(T[i] - 1) C &amp;lt; T[i] P[i]$&lt;br /&gt;$T[j] P[j] \leq (T[j] - 1) C$&lt;br /&gt;$\frac{T[j]P[j]}{T[j] - 1} \leq C &amp;lt; \frac{T[i]P[i]}{T[i] - 1}$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 서브태스크 5와 같이 모든 물건이 정렬되어 있다는 가정에 모순이다. (0으로 나누는 문제가 있지만, $T[i] = 1$ 인 물건들은 어차피 $T[i] (C - P[i]) &amp;lt; C$ 이다.) 고로, 서브태스크 6의 풀이를 그대로 적용하여 전체 문제를 $O(N \log (NA))$ 시간에 해결할 수 있다.&lt;/p&gt;
&lt;h1&gt;Problem 5. 이주 (migration)&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 1, $Z \le 9999$ (10점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$dist(u, v)$ 를 두 정점 $u, v$ 간의 거리라고 정의하자. $0$ 을 보내다가 마지막 메시지에 $dist(0, i)$ 를 최대화하는 $i$ 를 적어 보내면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 1, $Z \le 3$ (30점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$i \le N - 14$ 까지 $0$ 을 보낸다. 이후 남은 14개의 메시지를 사용하여 정답을 커뮤니케이션한다. 14개의 메시지를 보내기 전 $dist(0, i)$ 를 최대화하는 $1 \le i \le N - 14$ 을 계산하고, 이를 길이 14의 이진 문자열 $s_1, s_2, \ldots, s_{14}$ 로 변환한다. 남은 14개의 메시지로:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이진 문자열의 한 비트 $s_i$&lt;/li&gt;
&lt;li&gt;이번에 들어온 정점이 $dist(0, i)$ 의 최댓값을 갱신했다면 $1$, 아니면 $0$&lt;br /&gt;을 보내자. $[0, 3]$ 범위의 메시지만으로도 2비트를 충분히 보낼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 실행에서는:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약에 $dist(0, i)$ 가 갱신된 메시지가 14개 중 존재한다면 그 중 가장 마지막 메시지에 대응되는 정점&lt;/li&gt;
&lt;li&gt;없다면 이진 전개된 $i$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 반환하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크 2부터는 모든 풀이에서 $Z = 4$ 를 가정한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;$M \le 19$ (81.28점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크 1과 유사하게 진행하는데, 이번에는 양 끝점을 전부 보내야 해서 $[0, 4]$ 안에 값을 모두 넣기가 조금 빡빡하다. $M = O(\log N)$ 을 달성할 수 있는 방법이 여러 가지 있는데 그 중 가장 구현하기 간단한 방법을 소개한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$i &amp;lt; N - 19$ 까지는 $0$ 을 보낸다. 이제 $i = N - 19$ 가 되었을 때, 마지막 $18$ 개 정점을 제외한 트리의 지름을 $O(N)$ 시간에 계산할 수 있다. 계산한 끝점을 $u, v$ 라고 하였을 때:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$i \in [N - 19, N -14]$ 에서 6번의 메시지로 $u$ 를 보낸다. $(u \le N - 19 \le 5^6$)&lt;/li&gt;
&lt;li&gt;$i \in [N - 13, N - 8]$ 에서 6번의 메시지로 $v$ 를 보낸다. ($v \le N - 19 \le 5^6$)&lt;/li&gt;
&lt;li&gt;$i \in [N - 7, N - 6]$ 에서 &lt;i&gt;바뀐&lt;/i&gt; $u$ 의 위치를 보낸다 ($13 \le 5^2$)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 $u$ 의 위치는 $[N - 18, N - 7]$ 중 하나이다. 만약 지난 $u$ 의 위치가 그대로 유지되었다면 $24$ 를, 아니면 $N - 7 - u$ 를 보내면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$i \in [N - 5, N - 4]$ 에서 &lt;i&gt;바뀐&lt;/i&gt; $v$ 의 위치를 보낸다 ($8 \le 5^2$)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 $v$ 의 위치는 $[N - 12, N - 5]$ 중 하나이다. 만약 지난 $v$ 의 위치가 그대로 유지되었다면 $24$ 를, 아니면 $N - 5 - v$ 를 보내면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$i = N - 3$ 에서 &lt;i&gt;바뀐&lt;/i&gt; $u$ 의 위치를 보낸다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 $u$ 의 위치는 $[N - 6, N - 3]$ 중 하나이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$i = N -2$ 에서 &lt;i&gt;바뀐&lt;/i&gt; $v$ 의 위치를 보낸다 ($8 \le 5^2$)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 $v$ 의 위치는 $[N - 4, N - 2]$ 중 하나이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$i = N - 1$ 에서 &lt;i&gt;바뀐&lt;/i&gt; $u, v$ 의 위치를 모두 보낸다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 $u$ 의 위치는 $[N - 2, N - 1]$ 중 하나이고, 새로운 $v$ 의 위치는 $N - 1$ 이다. 고로 $2 \times 3 = 6$ 가지 경우가 있는데, 지름일 경우 $u = v = N - 1$ 이 성립할 수는 없기 때문에, 이 경우를 무시하면 $5$ 가지 경우가 되어서 위치를 보낼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$i$ 번 정점이 추가된 상태에서 새로운 지름을 계산할 때, 기존 지름의 끝점을 둘 다 바꾸지 않도록 해야 함에 유의하자. 기존 지름이 $(u, v)$ 라면, 새 지름은 $(u, v), (u, i), (i, v)$ 중 하나에 속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 알고리즘을 내가 구현했을 때는 $M \le 17$ 이 나와서 83점 정도를 얻었고, $M \le 11$ 을 얻어서 &lt;a href=&quot;https://codeforces.com/blog/entry/145228?#comment-1300069&quot;&gt;93점 정도를 얻은 사람도 있는 것 같다&lt;/a&gt;. 결국 메시지 개수가 실제 상한만큼 보내지려면 내가 보내는 모든 메시지가 $0$ 초과이도록 테스트 케이스를 잘 설계해야 하는데, 준비하는 입장에서 쉽지 않을 것 같다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;만점 풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만점을 받기 위해서는 $M \le 8$ 까지 줄여야 한다. 어렵기보다는 굉장히 더러운 종류의 문제에 가깝다. 작년 message와 다르게 올해 소수점 문제들은 별로 흥미롭지 않다고 느껴지는데, 다행이도 두 문제 다 변별력이 거의 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 이 문제의 만점 풀이를 고민해 보지 않았다. 아래 적게 될 풀이는 모두 &lt;a href=&quot;https://qwerasdfzxcl.tistory.com/48&quot;&gt;박상훈 코치의 블로그&lt;/a&gt; 의 내용을 &lt;s&gt;표절했다&lt;/s&gt; 기반으로 작성되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;81점 풀이의 한계점은 모든 통신을 마지막 $M$ 개의 메시지를 사용해서 한다는 점이다. 가능한 지름의 경우의 수가 $5^{11}$ 을 초과하기 때문에, 이 전략은 최소 $12$ 개의 메시지를 강제한다. 실제로 메시지를 보낼 수 있는 시간이 $N$ 개라는 점을 사용하면, 언제 메시지를 보냈는지를 사용하여 더 많은 정보를 통신할 수 있다. 예를 들어서, 보내는 사람이 답을 처음부터 알고 있다면, 단순히 지름의 양 끝점 $u, v$ 에 메시지 $1$ 을 실어서 $M = 2$ 로 문제를 해결할 수 있다. 물론 처음부터 답을 아는 것은 당연히 불가능하지만, $12$ 번의 꽉 찬 메시지를 보내는 대신 긴 기간에 걸쳐서 적은 개수의 메시지를 보내는 것의 효율성을 보여주는 예시이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만점 풀이에서는 필요한 정보들을 단계적으로 나눠서 보낼 것이다. 첫 단계가 시작하기 전, 현재까지 추가된 모든 끝점이 지름의 후보가 될 수 있다. $i$ 번 단계가 시작되었고 그 길이가 $A$ 라면, 그동안 한 번의 메시지는 총 $4A + 1$ 의 정보를 보낼 수 있다. 이 정보를 통해서, 어떠한 끝점들을 후보에서 쳐낼 수 있다. DP 등을 사용하여, 다음과 같은 $5$ 개의 단계를 찾아낼 수 있다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$116$의 시간 동안 $465$의 정보를 보내면, 끝점의 후보를 $334$ 개로 줄일 수 있다 ($465 = 30 \times 31 / 2$).&lt;/li&gt;
&lt;li&gt;$20$의 시간 동안 $81$의 정보를 보내면, 끝점의 후보를 $\lceil (116+334) / 9 \rceil = 50$ 개로 줄일 수 있다.&lt;/li&gt;
&lt;li&gt;$6$의 시간 동안 $25$의 정보를 보내면, 끝점의 후보를 $\lceil (50 + 20) / 5 \rceil = 14$ 개로 줄일 수 있다.&lt;/li&gt;
&lt;li&gt;$2$의 시간 동안 $9$의 정보를 보내면, 끝점의 후보를 $\lceil (14+6) / 3 \rceil = 7$ 개로 줄일 수 있다.&lt;/li&gt;
&lt;li&gt;$2$의 시간 동안 $9$의 정보를 보내면, 끝점의 후보를 $\lceil (7+2) / 3 \rceil = 3$ 개로 줄일 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 끝점의 후보가 $3$ 개 있고, 시간이 $2$만큼 지난 상태에 도달한다 (즉 5단계의 마지막 시간에 지름이 업데이트 되어 있을 수 있다.) $3$ 의 시간 동안 메시지 $3$개를 써서 지름을 결정할 수 있으면 $M \le 8$ 로 문제를 해결할 수 있다. 이를 어떻게 하는지 소개한다. 기존 지름의 끝점 후보를 $0, 1, 2$ 라고 하고, $N - 4, N - 3, N - 2, N - 1$ 번 정점을 $A, B, C, D$ 라고 하자. (왼쪽 $0$ 과 오른쪽 $0$ 은 다른 정점임에 유의하면 좋다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$N - 3$ 번 정점에서는 $A, B$ 에 대한 정보를 안다. 다음과 같이 $5$ 개의 그룹으로 상태를 나누고, 그룹 번호를 반환하자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$(00, 01, 10, 11, 0A)$&lt;/li&gt;
&lt;li&gt;$(22, 20, 2A, A2, A0)$&lt;/li&gt;
&lt;li&gt;$(02, 0B, 12, 1A)$&lt;/li&gt;
&lt;li&gt;$(21, 1B, 2B, AB)$&lt;/li&gt;
&lt;li&gt;$(A1, B0, B1, B2)$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$N - 2$ 번 정점에서는 $A, B, C$ 에 대한 정보를 안다. 이전에 나눈 $5$ 개의 그룹 각각에 대해, 다음과 같이 $5$ 개의 그룹으로 또 상태를 나누자 ($i$ 번째 줄은 $N - 3$ 번 정점에서 $i$ 번째 그룹에 속한 지름 후보들에 대해 나누는 그룹을 나타낸다).&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$((00, 01), (10, 11), (0C, 1C), (C0, C1), (0A, CA))$&lt;/li&gt;
&lt;li&gt;$((22, 20), (2A, 2C), (A2, AC), (C0, A0), (C2, CA))$&lt;/li&gt;
&lt;li&gt;$((02, 0B), (0C, 1C), (12, 1A), (C2, CA), (CB))$&lt;/li&gt;
&lt;li&gt;$((21, 2C), (1B, 2B), (AB, CB), (1C, AC), (C1))$&lt;/li&gt;
&lt;li&gt;$((A1, AC), (B0, B1), (B2, BC), (C0, C1), (C2))$&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로, 가능한 지름 후보가 $2$ 개로 좁혀졌으며, 하나의 끝점의 값은 정확히 알게 된다 (즉, 후보가 $xy, xz$ 꼴이거나 $yx, zx$ 꼴). 일반성을 잃지 않고 후보가 $xy, xz$ 꼴이라고 하자. $N -1$ 번 정점에서는 가능한 지름 후보가 $\{xy, xz, xD, Dy, Dz\}$ 꼴로 나온다. 이 중 무엇인지를 반환하면 전체 문제를 해결할 수 있다. (마지막 몇 문단은 정말 그대로 베껴 써서 미안하지만, 아쉽게도 내가 더할만한 내용이 없다.)&lt;/p&gt;
&lt;h1&gt;Problem 6. 장애물 (obstacles)&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 1, 3 (23점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$NM \leq 600,000$ 이 성립한다. DFS / Union Find 등으로 연결 컴포넌트를 구하고 쿼리로 주어진 두 셀이 같은 컴포넌트에 있는지 확인하면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 2 (37점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 줄이 아닌 곳에서 좌우로 이동할 이유가 없다. $(0, S), (0, D)$ 가 건조하면 $(N-1, S), (N-1, D)$ 도 건조하니, $T[0] = T[N - 1]$ 으로 두고 $N =1$ 인 경우로 환원할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브태스크 5 (83점)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브태스크 5의 경우 모든 쿼리가 $L = 0, R = M - 1$ 을 만족한다. 사실 이 문제에서 의미가 있는 몇 안되는 서브태스크이다. 만점 풀이가 이상한 것도 아니고, 83점과 100점 사이에 $O(NM)$ 서브태스크 같은 게 있을 법도 한데 왜 없는지 모르겠다. Day 2 모든 문제에 대해서 부분점수가 대단히 관대하게 매겨져 있다고 느꼈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서술 편의상 모든 $H[i]$ 가 다르다고 가정한다. $(H[i], i)$ 쌍을 사전순으로 비교하는 식으로 하면 구현에 큰 차이가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 각 셀을 $NM$ 개의 정보를 사용하지 않고 표현하는 방법을 고민해 보자. 현재 있는 건조한 셀에서 행을 바꾸지 않고 움직일 수 있는 열들의 연속 구간을 생각해 보자. 이 연속 구간은 구간에 있는 셀의 &lt;i&gt;최댓값&lt;/i&gt; 에 따라 정의된다. 이 최댓값보다 값이 작은 셀들은 모두 도달 가능하고, 큰 셀들은 모두 도달이 불가능하다. 다시 말해, $L[i]$ 를, $j &amp;lt; i, H[j] &amp;gt; H[i]$ 인 최대 $j$ (없으면 $-1$), $R[i]$ 를 $j &amp;gt; i, H[j] &amp;gt; H[i]$ 인 최소 $j$ (없으면 $M$) 이라고 정의하면, 도달 가능한 $H$ 의 최댓값이 열 $i$ 에서 얻어진다면, $[L[i] + 1, R[i] - 1]$ 번 열을 모두 도달 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$0$ 번 행에서 바로 $S \rightarrow D$ 로 갈 게 아니면, 이 연속 구간을 넓히면서 $D$ 에 도달할 수 있도록 최대한 노력해야 할 것이다. 이를 조금 더 구체적으로 정의하기 위해 몇 가지 관찰이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관찰 1.&lt;/b&gt; 현재 $[L[i] + 1, R[i] - 1]$ 번 열을 도달 가능하고, 구간을 넓히기 위해 $L[i]$ 번 열을 도달하고 싶다고 하자. 이를 위해서는, 현재 도달 가능한 열 중 $H[j]$ 값을 최소로 하는 열을 타고 간 후, $L[i]$ 번 열을 도달할 수 있을 정도로 $T[k]$ 값이 큰 행 $k$ 를 찾으면 된다. 이후 이 행에서 $L[i]$ 번 열로 이동하면 구간을 넓힐 수 있다.&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.&lt;/b&gt; $[L[i] + 1, R[i] - 1]$ 형태의 구간은 트리를 이룬다. 구체적으로, $H$ 의 최댓값을 루트로 하는 Cartesian Tree의 서브트리 구간이 정확히 저것에 일치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관찰 4.&lt;/b&gt; $[L[i] + 1, R[i] - 1]$ 에서 구간을 넓히기 위해서는, $L[i]$ 번 열에 도달하거나 $R[i]$ 번 열에 도달할 수 있어야 한다. 일반성을 잃지 않고 $H[L[i]] &amp;lt; H[R[i]]$ 라고 하자. $R[i]$ 번 열에 도달할 수 있는데 $L[i]$ 번 열에 도달할 수 없는 경우는 없다. 고로, $L[i], R[i]$ 중 높이가 높은 쪽의 확장은 지금 당장 시도할 필요가 없고, 높이가 낮은 방향으로 확장을 시도하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관찰을 종합하면 다음과 같다. 서술 편의상 Cartesian Tree가 무엇인지 안다고 가정한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 상태는 Cartesian Tree의 노드에 정확히 대응된다.&lt;/li&gt;
&lt;li&gt;각 상태에서 도달 가능한 열의 집합은, Cartesian Tree 상 특정 노드의 서브트리에 속하는 열의 집합이다.&lt;/li&gt;
&lt;li&gt;구간을 넓히는 것은 Cartesian Tree의 특정 노드에서 부모 노드로 이동하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀 $(0, S)$ 에서 $(0, D)$ 로 가는 것은, 노드 $S$ 와 노드 $D$ 에서 구간 넓히기를 반복해서 같은 노드에 도달할 수 있는가와 동일하다. 각 노드 $v$ 에 대해서, Cartesian Tree 상 부모 $par_v$ 로 상태를 이동 가능한지 여부를 전부 계산해두자. 서로 이동 가능한 간선들으로 그래프를 만들었을 때, $(0, S)$ 에서 $(0, D)$ 를 갈 수 있다는 것은 $S$ 와 $D$ 가 같은 컴포넌트에 속한다는 것과 동치이다. 고로, 저 여부만 전부 계산해 두면 전체 문제를 Union-Find로 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$f(t)$ 를, $0$ 번 행에서 높이 $t$ 초과의 행에 도달할 수 있는 최대 $h$ 라고 정의하자. $T$ 의 Prefix minimum과 Prefix maximum을 계산해 두면, 높이가 $t$ 초과인 가장 가까운 행을 이분 탐색으로 찾을 수 있고, 그 행까지 가는 길 상 $T[i]$ 의 최솟값 역시 알 수 있다. 이 최솟값보다 $H[j]$ 가 작은 열이 서브트리 안에 있으면, 높이 $t$ 초과의 행에 도달할 수 있다. 즉, $submin_v$ 를 $v$ 의 서브트리에 있는 열 중 $H[j]$ 의 최소라고 정의하면 (트리 DP로 계산 가능), $submin_v &amp;lt; f(H[par_v])$ 일 때 $v$ 에서 $par_v$ 로 이동이 가능하다. 각 $v$ 마다 이를 $O(\log N)$ 시간에 판정할 수 있으니, 전체 문제를 $O(N + M \log N)$ 시간에 해결할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;만점 풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반성을 잃지 않고 $S \le D$ 라고 가정하자. 최대한 모든 이동을 $[S, D]$ 구간 안에서 처리하는데, 꼭 필요할 경우 구간 밖에 있는 열들을 사용하고, 그것도 $[S, D]$ 구간에 가장 가까운 것을 우선적으로 사용하는 전략을 찾자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$[S, D]$ 구간에서 $H[j]$ 를 최대화하는 열이 $M$ 이라고 하자. Cartesian Tree와 유사하게 &quot;구간 확장&quot;을 해서 부모 노드에 도달하는 것을 시도하면, 결국 매번 확인해야 하는 것은:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$S$ 에서 $R[S]$ 를 도달하기 위해 필요한 추가 열들은 무엇인가?&lt;/li&gt;
&lt;li&gt;$R[S]$ 에서 $R[R[S]]$ 를 도달하기 위해 필요한 추가 열들은 무엇인가?&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;$R^{k-1}[S]$ 에서 $M$ 을 도달하기 위해 필요한 추가 열들은 무엇인가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이다. 당연하게도, 이 때 필요한 추가 열들은 모두 $M$의 왼쪽에 있다. 고로&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$S$ 에서 배열 $R$ 을 타고 $M$ 에 도달할 때 필요한 추가 열들이 모두 $L$ 이후에 있는가?&lt;/li&gt;
&lt;li&gt;$D$ 에서 배열 $L$ 을 타고 $M$ 에 도달할 때 필요한 추가 열들이 모두 $R$ 이전에 있는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 문제를 각각 해결하면 된다. 첫 번째 문제를 풀 수 있으면 두 번째 문제는 똑같이 해결 가능하니, 첫 번째 문제의 풀이만 논의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$L_p[S]$ 를, $S$ 에서 $R[S]$ 를 도달하기 위해 필요했던 가장 왼쪽 열이라고 정의하자. 위 문제는, $S$ 에서 $R[S]$ 를 타고 $M$ 으로 가는 길에서, $L_p[S] \geq L$ 이 항상 만족했는지를 판별하는 문제와 똑같다. $L_p[S]$ 를 전부 구했다고 하면, Sparse table을 사용하여, 점 $x$ 에서 $R$ 을 $2^k$ 번 타고 갔을 때 도착하는 위치, 그리고 그 경로 상의 $L_p$ 값의 최솟값 등을 계산해 두는 식으로 쿼리를 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 이 문제도 쿼리 처리는 크게 중요하지 않고, 모든 $S$ 에 대해서 $L_p[S]$ 를 구하는 문제로 귀결된다. $S$ 에서 $R[S]$ 로 가기 위해서는, $H[j] &amp;lt; f(H[R[S]])$ 인 열 $j$ 를 찾아야 한다. 현재 확실히 도달 가능한 열의 집합은 $[S, R[S] - 1]$ 이고, 필요에 따라서 왼쪽에 있는 열들을 사용할 수 있다. 이에 따라서 여러 케이스들을 고려해 보자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$j \in [S, R[S] - 1]$ 중 $H[j] &amp;lt; f(H[R[S]])$ 를 만족하는 $j$ 가 존재하면, 무조건 확장이 가능하다. 고로 $L_p[S] = S$ 이다.&lt;/li&gt;
&lt;li&gt;$j \in [L[S] + 1, S]$ 중 $H[j] &amp;lt; f(H[R[S]])$ 를 만족하는 $j$ 가 존재한다면, 그 중 가장 오른쪽에 있는 $j$ 를 찾자. 이 $j$ 는, 범위만 허락한다면 무조건 도달이 가능하다. 고로 이러한 $j$ 를 $L_p[S]$ 로 두면 된다.&lt;/li&gt;
&lt;li&gt;이 외 경우는 $L_p[S] \le L[S]$ 일 뿐만 아니라 $j$ 를 찾기 위해 $L[S]$ 방향으로 확장이 필요하다. 일단 현재 서브트리에서 $L[S]$ 방향으로 확장이 가능한지를 확인하자. 확장이 가능하다면, $L[S]$ 로 일단 움직인다. 그 후 $j \in [L[L[S]] + 1, L[S]]$ 중 $H[j] &amp;lt; f(H[R[S]])$ 를 만족하는 $j$ 가 존재하는지를 또 찾고....&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 두 케이스는 $H$ 에 대한 세그먼트 트리가 있으면 $O(\log M)$ 시간에 확인할 수 있다. 문제는 마지막 케이스인데, 다소 복잡할 뿐만 아니라 단순히 적힌 대로 &quot;확장&quot; 을 반복하면 계산이 얼마나 오래 걸릴 지도 모른다. 이는 생각보다 아주 간단하게 해결이 가능하다. $L[S]$ 로 확장이 가능하다면, $R[L[S]] = R[S]$ 이다. 고로, 확장이 가능할 때 필요한 최소 $L$ 은 그냥 $L_p[L[S]]$ 로 정의된다. 만약 $L_p[S]$ 를 $S$ 가 증가하는 순서대로 계산하면 해당 값이 무엇인지 알 수 있으니, 각각의 값을 $O(\log M)$ 시간에 계산할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로, 전체 문제가 $O(M \log M + M \log N + N)$ 시간에 해결된다. 나는 귀찮아서 두 번째 케이스를 $O(\log^2 M)$ 에 해결했지만 충분히 빨랐다.&lt;/p&gt;</description>
      <category>공부/Problem solving</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/360</guid>
      <comments>https://amugelab.tistory.com/360#entry360comment</comments>
      <pubDate>Tue, 12 Aug 2025 15:37:16 +0900</pubDate>
    </item>
  </channel>
</rss>