<?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>Sat, 18 Apr 2026 07:29:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>구사과</managingEditor>
    <item>
      <title>BOJ -&amp;gt; QOJ 문제 마이그레이션</title>
      <link>https://amugelab.tistory.com/371</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;BOJ 서비스 종료에 관해서 Qingyu님과 이야기를 나누었는데, Qingyu님이 기존 문제를 &lt;a href=&quot;https://qoj.ac/&quot;&gt;QOJ.ac&lt;/a&gt;로 마이그레이션하는 데 있어 도움을 주실 의향이 있다고 해 주셔서 마이그레이션 신청을 받고자 합니다. 도움을 주신 Qingyu님에게 큰 감사를 표합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이미 본인의 문제가 QOJ에 등록되어 있으나 출제자로 본인이 표시되어 있지 않음&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 &lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLScQdldxvKDyD-LCWPq7WbRQbUOUndcsZN2vsGZ3Glf--zmSpw/viewform&quot;&gt;Google Form&lt;/a&gt;을 통해서 신청해 주세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;BOJ에만 등록되어 있는 본인 문제를 QOJ에 등록하고 싶음&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 &lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSf4JqYt9bR1iFDMi3SWlQIrWDeXlu0JyI15HQlXflGzssOTMg/viewform&quot;&gt;Google Form&lt;/a&gt;을 통해서 신청해 주세요. 아래 사항을 꼭 읽어주세요:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Polygon package가 있다면 따로 데이터 압축 파일을 보내지 않고 권한을 주시는 쪽이 훨씬 편리합니다. 제 Polygon ID는 백준 ID와 동일합니다. 저한테 해당 문제 혹은 전체 프로젝트에 READ 이상의 권한을 주시고, &quot;테스트 데이터&quot; 항목에는 해당 문제의 ID를 적어주시면 됩니다. 그러면 최신 package로 업로드될 예정입니다. 예를 들어 아래 문제의 ID는 &quot;235745&quot; 입니다. &lt;b&gt;만약 verify 넣고 최신 revision에서 package 생성이 실패한다면 업로드해 드릴 수 없습니다. verify 넣고 생성되는지 확인해 주세요.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKzW4/dJMb99MNjFk/3Vckvj9k726bSRR9dSQkV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKzW4/dJMb99MNjFk/3Vckvj9k726bSRR9dSQkV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKzW4/dJMb99MNjFk/3Vckvj9k726bSRR9dSQkV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKzW4%2FdJMb99MNjFk%2F3Vckvj9k726bSRR9dSQkV0%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;354&quot; height=&quot;391&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;704&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 압축 파일 링크가 업로드 시점에 작동하지 않으면 업로드해 드릴 수 없습니다.&lt;/li&gt;
&lt;li&gt;BOJ에만 있는 데이터를 제가 따로 구해 드릴 수는 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고 사항&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4/17 추가) 폼은 최소한 4월 말일까지는 열어두겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영어 지문 여부를 물어보지만, 필수는 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 언제 올라올지 보장해 드릴 수 없으며, 사유 없이 임의로 문제 업로드를 거부할 수 있습니다. 문제 업로드가 성공하거나 실패하였다고 따로 reminder를 보내드리지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;궁금하신 사항이 있다면 제 백준 ID 골뱅이 gmail.com으로 이메일을 남겨주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4/17 추가) Polygon migration의 경우: 대회 전체를 추가하시는 경우 개별 ID를 안 적어 주시고 그냥 Contest id를 보내주셔도 무방합니다. 이 경우 대회 전체에 READ 이상의 권한을 저한테 추가해 주세요. Contest ID는 5자리 이하의 정수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4/17 추가) 혹시 대회 스코어보드가 있다면 공개 링크를 추가해 주세요. 스코어보드도 같이 업로드해 드릴 수 있습니다. 폼도 이에 맞게 수정했습니다.&lt;/p&gt;</description>
      <category>공부/Problem solving</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/371</guid>
      <comments>https://amugelab.tistory.com/371#entry371comment</comments>
      <pubDate>Fri, 17 Apr 2026 03:08:03 +0900</pubDate>
    </item>
    <item>
      <title>Multiplicative Weights Update</title>
      <link>https://amugelab.tistory.com/370</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://sites.google.com/site/thsaranurak/teaching/intro-algo&quot;&gt;Thatchaphol Saranurak&lt;/a&gt; 강의를 듣고 안 까먹으려고 작성&lt;/p&gt;
&lt;h2&gt;1. Warmup: Two Action Setting&lt;/h2&gt;
&lt;p&gt;$n$ 명의 전문가와 함께 주식 시장을 $T$일에 걸쳐 예측하려고 한다. 매일 다음과 같은 일이 일어난다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;각각의 전문가가 오늘의 주식 시장이 &lt;strong&gt;상승&lt;/strong&gt;인지 &lt;strong&gt;하락&lt;/strong&gt;인지 예측한다.&lt;/li&gt;
&lt;li&gt;당신은 이를 보고 오늘 주식 시장이 상승인지 하락인지 결정한다.&lt;/li&gt;
&lt;li&gt;이후 주식 시장의 결과가 나온다. (주식 시장은 adversarial할 수 있다. 즉 당신의 결정의 반대만 찍는 등의 일이 발생할 수 있음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Loss&lt;/strong&gt;를 결과를 못 맞춘 날의 수로 정의하자. 주식 시장이 무조건 내가 찍은 것의 반대만 찍는다면 Loss가 $T$ 가 나오는 것은 어렵지 않다. 고로 목표는 최고의 전문가에 비해서 그렇게 못하지 않는 전략을 찾는 것이다.&lt;/p&gt;
&lt;p&gt;주식 시장의 모든 날을 맞출 수 있는 전문가가 존재한다고 가정하면, 다음과 같은 알고리즘을 사용할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;현재 남은 전문가들 중 다수 의견을 따른다.&lt;/li&gt;
&lt;li&gt;다수 의견이 정답이라면 아무 문제 없다.&lt;/li&gt;
&lt;li&gt;다수 의견이 오답이라면 다수 의견을 낸 모든 전문가들을 숙청(!) 하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;모든 날을 맞추는 전문가는 숙청당하지 않고, 오답을 낼 때마다 전문가의 수가 반으로 줄어드니, Loss가 $\log_2 n$ 이하임이 보장된다.&lt;/p&gt;
&lt;p&gt;이제 위 가정을 없애자. 이 때는 다음과 같은 알고리즘을 사용할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;현재 남은 전문가들 중 다수 의견을 따른다.&lt;/li&gt;
&lt;li&gt;다수 의견이 정답이라면 아무 문제 없다.&lt;/li&gt;
&lt;li&gt;다수 의견이 오답이라면 다수 의견을 낸 모든 전문가들을 숙청(!) 하자.&lt;/li&gt;
&lt;li&gt;모든 전문가들이 숙청당했다면 전부 부활(!)시킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;내가 모든 전문가들을 부활시킨 횟수를 $r$ 이라고 하자.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;최고의 전문가의 Loss는 $r$ 이상이다. 모두 $r$번 숙청당했기 때문이다.&lt;/li&gt;
&lt;li&gt;나의 Loss는 $(r+1) \log_2 n$ 이하이다. 각 부활 사이에 최대 $\log_2 n$ 번 오답을 냈을 것이기 때문이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;고로 내가 내는 오답의 수는 최적 전문가의 오답의 수의 $O(\log n)$ 배 이하이다. 더 개선하면 $(2+\epsilon)$배로 줄일 수도 있다고 한다.&lt;/p&gt;
&lt;p&gt;한편 $2$ 배보다 잘하는 것은 불가능하다. 전문가 두 명이 있는데 한 명은 항상 상승한다 그러고 한 명은 항상 하락한다고 한다고 하자. 그리고 시장은 내 예측의 반대만 찍는다고 하자 (참 답답하다). 나는 무조건 모든 문제를 틀리게 되어 있으며, 사실 내가 무엇을 대답하는지 자체가 중요하지 않다. 내 대답 중 적게 등장한 답을 고른 전문가가 반 이하의 문제를 틀리게 되기 때문에, 내가 $2$ 배보다 잘하는 것이 불가능하게 하는 adversary가 존재한다.&lt;/p&gt;
&lt;h2&gt;2. General Setting&lt;/h2&gt;
&lt;p&gt;$n$ 명의 전문가와 함께 주식 시장을 $T$일에 걸쳐 예측하려고 한다. 매일 다음과 같은 일이 일어난다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;당신은 $n$ 명의 전문가 중 한 명의 전문가를 골라서 그 사람의 의견을 따른다.&lt;/li&gt;
&lt;li&gt;각 전문가의 손실이 $[-1, 1]$ 사이의 수로 공개된다. adversarial할 수 있다. 음수면 이득이다.&lt;/li&gt;
&lt;li&gt;당신은 앞에서 고른 전문가의 손실만큼의 손실을 얻는다. (음수일 경우 이득을 얻는다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이걸 그대로 플레이하면 2-Action Setting과 비슷한 이유로 $n$ 배보다 잘하는 것이 불가능하다. 그래서 당신은 &lt;strong&gt;랜덤성&lt;/strong&gt; 을 사용할 수 있다. 구체적으로, 당신은 어떠한 확률 분포 $p_1, p_2, \ldots, p_n$ 을 골라서, $p_i$ 의 확률로 $i$ 번 전문가의 의견을 고른다. 시장은 당신의 확률 분포를 읽고 adversarial하게 행동할 수 있지만 랜덤이 그 확률에 따라 어떤 의견을 골랐는지는 알 수 없다 (그걸 알면 앞이랑 똑같아짐). 그 때 당신은 손실 기댓값을 최소화해야 한다.&lt;/p&gt;
&lt;p&gt;다시 말해서, 매 $t$ 일에 대해:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;당신은 벡터 $p^t_1, p^t_2, \ldots, p^t_n$ 을 고른다. ($p^t_i \geq 0, \sum p^t_i = 1$)&lt;/li&gt;
&lt;li&gt;시장은 손실 벡터 $l^t_1, l^t_2, \ldots, l^t_n$ 을 반환한다. ($l^t_i \in [-1, 1]$)&lt;/li&gt;
&lt;li&gt;당신은 $\ell^t = \sum p^t_i l^t_i$ 만큼의 손실을 얻는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;당신이 최종적으로 얻은 손실은 $L_A = \sum_{t = 1}^{T} \ell^t$ 이고, $i$ 번 전문가가 얻은 손실은 $L_i = \sum_{t=1}^T l_i^t$ 이다. 최고의 전문가가 얻은 손실은 $\min L_i$ 이다. $L_A$ 를 $\min L_i$ 만큼 작게 유지할 수 있을까?&lt;/p&gt;
&lt;p&gt;아래 설명할 Multiplicative Weights Update를 사용하면 가능하다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;초기 $w_1, w_2, \ldots, w_n = 1$ 로 설정하자. 대략 각 전문가의 &lt;em&gt;신뢰도&lt;/em&gt; 에 대응된다.&lt;/li&gt;
&lt;li&gt;매 $t = 1, \ldots, T$ 에 대해&lt;ul&gt;
&lt;li&gt;$p_i^t = \frac{w_i}{\sum_j w_j}$ 로 고른다.&lt;/li&gt;
&lt;li&gt;시장은 손실 벡터 $l^t_1, l^t_2, \ldots, l^t_n$ 을 반환한다. ($l^t_i \in [-1, 1]$)&lt;/li&gt;
&lt;li&gt;$w_i := w_i \cdot (1 - \epsilon \cdot l_i^t)$ 로 신뢰도를 업데이트한다. (1의 손실을 봤다면 신뢰도가 $\epsilon$ 배만큼 깎이고, $-1$ 의 손실을 봤다면 신뢰도가 $\epsilon$ 배만큼 증가한다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;다음 사실을 증명할 수 있다 (증명은 여기에는 생략한다. 위 유튜브 링크 보면 있음)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theorem 1.&lt;/strong&gt; 임의의 $\epsilon \in (0, 1/2]$ 에 대해서 위 알고리즘은 $L_A \le L_* + \epsilon T + \frac{\ln n}{ \epsilon}$ 을 보장한다.&lt;/p&gt;
&lt;p&gt;$\epsilon = \sqrt{\frac{\ln n}{T}}$ 로 설정하면 $L_A \le L_* + 2\sqrt{T \ln n}$ 가 보장된다. 즉 손실이 증가하는 속도가 $T$ 가 증가하는 속도에 비해 제곱근된 정도로 느리다.&lt;/p&gt;
&lt;p&gt;추가로 손실 벡터가 $[0, 1]$ 에 있다고 하면 다음도 성립한다:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theorem 2.&lt;/strong&gt; 임의의 $\epsilon \in (0, 1/2]$ 에 대해서 위 알고리즘은 $L_A \le (1 +\epsilon) L_* + \frac{\ln n}{ \epsilon}$ 을 보장한다.&lt;/p&gt;
&lt;h2&gt;3. Linear Programming with MWU&lt;/h2&gt;
&lt;p&gt;$\Delta_n = \{x | x \geq 0, \sum x_i = 1\}$ 을 만족하는 벡터의 집합이라고 하자. 즉, 확률 분포이다.&lt;/p&gt;
&lt;p&gt;목표는 MWU를 사용해서 다음과 같은 LP를 푸는 것이다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Given $A \in [-1, 1]^{m \times n}, b \in \mathbb{R}^m$&lt;/li&gt;
&lt;li&gt;Find $x \in \Delta_n$ such that $Ax \le b + 2 \epsilon \mathbb{1}$ or state that no solution such that $Ax \le b$ exists&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Multiplicative Weights Update를 다음과 같이 사용하자.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;초기 $w_1, w_2, \ldots, w_n = 1$ 로 설정하자.&lt;/li&gt;
&lt;li&gt;매 $t = 1, \ldots, T$ 에 대해&lt;ul&gt;
&lt;li&gt;$p_i^t = \frac{w_i}{\sum_j w_j}$ 로 고른다.&lt;/li&gt;
&lt;li&gt;$Ap^t \le b + 2\epsilon\mathbb{1}$ 인지를 판별한다. 맞다면 $p^t$ 를 반환한다.&lt;/li&gt;
&lt;li&gt;아니라면 $A_{i_t} \cdot p^t &amp;gt; b + 2\epsilon$ 인 제약조건 행 $i_t \in [m]$ 이 있을 것이다. (아무거나 잡음)&lt;/li&gt;
&lt;li&gt;이 행을 손실 벡터로 선언해서 반환한다.&lt;/li&gt;
&lt;li&gt;이에 따라 $w_i := w_i \cdot (1 - \epsilon \cdot A_{i_t, i})$ 로 신뢰도를 업데이트한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$T$ 를 충분히 돌려도 답이 없다면 infeasible하다고 선언&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;대체 이게 무슨 뜻일까? 일단 Theorem 1의 statement를 다시 살펴보자.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theorem 1.&lt;/strong&gt; 임의의 $\epsilon \in (0, 1/2]$ 에 대해서 위 알고리즘은 $L_A \le L_* + \epsilon T + \frac{\ln n}{ \epsilon}$ 을 보장한다.&lt;br&gt;&lt;strong&gt;Corollary 3.&lt;/strong&gt; 임의의 $\epsilon \in (0, 1/2]$ 와 $x \in \Delta_n$ 에 대해서 위 알고리즘은 $L_A \le L \cdot x + \epsilon T + \frac{\ln n}{\epsilon}$ 을 보장한다.&lt;/p&gt;
&lt;p&gt;Corollary 3은 당연하다. $L_* = \min L_i$ 이기 때문에 $L_* \le L \cdot x$ 가 성립한다. 대충 직관적으로는 &amp;quot;최고의 전문가를 따라갈 수 있으면 각 전문가의 weighted average도 당연히 따라갈 수 있다&amp;quot; 는 뜻으로 해석하면 된다.&lt;/p&gt;
&lt;p&gt;킥은 최적해가 존재하기 때문에 어떤 전문가의 조합은 손실을 꽤 잘 조절할 것이라는 데에 있다. 구체적으로, $x^*$ 를 $Ax^* \le b$ 를 만족하는 어떠한 해라고 정의하면, Corollary 3에 의해&lt;/p&gt;
&lt;p&gt;$L_A \le L \cdot x^* + \epsilon T + \frac{\ln n}{\epsilon}$&lt;/p&gt;
&lt;p&gt;근데 우리가 매 시간 얻는 손실 벡터는 $L \cdot x^*$ 와 $L_A$ 의 거리를 계속 증가시킨다. 구체적으로&lt;/p&gt;
&lt;p&gt;$l^t p^t &amp;gt; b_{i_t} + 2 \epsilon$&lt;br&gt;$l^t x^* \le b_{i_t}$&lt;/p&gt;
&lt;p&gt;니까 알고리즘이 $T$ 번 돌고 나면&lt;/p&gt;
&lt;p&gt;$L_A &amp;gt; L \cdot x^* + 2 \epsilon T$&lt;/p&gt;
&lt;p&gt;이고 이에 따라서 $T = \frac{2 \ln n}{\epsilon^2}$ 번 이후에 알고리즘이 돈다는 것은 $x^*$ 가 존재한다는 것과 모순이 된다. 고로 $O(\frac{2 \ln n}{\epsilon^2})$ 번의 iteration 이후 알고리즘은 근사해를 찾거나 아니면 $x^*$ 가 존재하지 않음을 올바르게 판별한다. 각 iteration은 벡터/행렬 곱이니, 행렬의 nonzero entry가 $k$개면 $O(n+m+k)$ 시간에 구현할 수 있다.&lt;/p&gt;
&lt;p&gt;마지막으로, 이 알고리즘의 두 가지 한계점을 살펴보자. Feasible한 벡터를 찾을 수 있으면 목표 최대화는 이분 탐색으로 할 수 있다. ($\max c^T x$ 대신 $c^T x \geq \lambda$ 로 설정하고 $\lambda$ 이분탐색). 그래서 그건 큰 문제는 아니고, 진짜 문제는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$A, x$ 의 절댓값 범위&lt;/li&gt;
&lt;li&gt;$2 \epsilon \mathbb{1}$ 의 error term&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;첫 번째는 $\epsilon$ 을 크게 줄인 후 scaling하는 식으로 없앨 수 있는데 단점은 아주 느리다는 것이다. 일부 LP에 대해서 width-independent MWU라고 불리는 테크닉이 존재한다. 아마 $A, b$ 에 음수 항이 없어야 하는듯. 두 번째는 완전히 없애는 방법이 있는지 모른다. 아마 없지 않을까...&lt;/p&gt;
&lt;h1&gt;4. Minimax Theorem via MWU&lt;/h1&gt;
&lt;p&gt;두 플레이어 $X, Y$ 가 게임판 $A \in [-1, 1]^{m \times n}$ 에서 게임을 한다. $X$ 는 게임판에서 행을 고르고, $Y$ 는 게임판에서 열을 고른다. $X, Y$ 가 고른 행과 열에 있는 값이 payoff이다. $X$ 는 이 payoff를 최대화하려고 하고 $Y$ 는 이 payoff를 최소화하려고 한다. (일단 여기서는 $A \in [-1, 1]^{m \times n}$ 에 대해서만 고려하지만, 위에서 얘기한 scaling을 쓰면 상관없다.)&lt;/p&gt;
&lt;p&gt;이 문제의 답은 $X$ 가 선공이면 $\max_i \min_j A_{i, j}$ 이거나 그럴 것이다. 위에서 얘기한 것과 비슷하게 랜덤성을 도입하자. 이 경우 $X$ 는 확률 분포 $x \in \mathbb{R}_{\geq 0}^m$ 을 고르고, $Y$ 는 확률 분포 $y \in \mathbb{R}_{\geq 0}^{n}$ 을 고른다. ($\sum x_i = \sum y_j = 1$ 이다.) $X$ 가 선공이면 답은 $\max_x \min_y (x^T A y)$ 이고 $Y$ 가 선공이면 답은 $\min_y \max_x (x^T A y)$ 가 된다. 이 두 값이 똑같다는 유명한 정리인 Minimax Theorem가 있다. LP Duality의 special case로 기억하는데, LP Duality든 Minimax Theorem이든 증명을 알지 못한다.&lt;/p&gt;
&lt;p&gt;MWU를 사용하면 Minimax Theorem을 알고리즘적으로 증명할 수 있다. 정확하게는 둘이 arbitrary close함만 보일 수 있고 같다고 할 수는 없지만.. 나는 신경 안 쓴다. 그 증명을 알아보자.&lt;/p&gt;
&lt;p&gt;Multiplicative Weights Update를 다음과 같이 사용하자. Adversary (loss maximizer)가 $X$ 고 당신이 (loss minimizer) $Y$ 라고 생각하면 좋다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;초기 $w_1, w_2, \ldots, w_n = 1$ 로 설정하자.&lt;/li&gt;
&lt;li&gt;매 $t = 1, \ldots, T = \frac{\ln n}{\epsilon^2}$ 에 대해&lt;ul&gt;
&lt;li&gt;$y_i^t = \frac{w_i}{\sum_j w_j}$ 로 고른다.&lt;/li&gt;
&lt;li&gt;$A_{i, *} \cdot y^t$ 의 값을 최대화하는 인덱스를 $i_t \in [m]$ 이라고 하자.&lt;/li&gt;
&lt;li&gt;이 행을 손실 벡터로 선언해서 반환한다.&lt;/li&gt;
&lt;li&gt;이에 따라 $w_i := w_i \cdot (1 - \epsilon \cdot A_{i_t, i})$ 로 신뢰도를 업데이트한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$x = \frac{1}{T} \sum_{t = 1}^T e_{i_t}, y = \frac{1}{T} \sum_{t = 1} y^t$ 로 선언한다.&lt;ul&gt;
&lt;li&gt;$e_{i_t}$ 는 $i_t$ 번 항만 $1$ 이고 나머지는 $0$ 인 길이 $m$ 의 벡터이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Theorem 4.&lt;/strong&gt; 위 알고리즘이 반환한 $x, y$ 에 대해서 $\max_i (A y)_{i, 1} \le \min_j (x^T A)_{1, j} + 2\epsilon$ 이 성립한다.&lt;br&gt;&lt;strong&gt;Proof.&lt;/strong&gt; Theorem 1에 의해 MWU 알고리즘은 $L_A \le L_* + 2 \epsilon T$ 을 보장한다. 이제 $L_A$ 와 $L_*$ 가 각각 무슨 의미인지 알아보자.&lt;/p&gt;
&lt;p&gt;매 $t$ 에 대해서 알고리즘이 얻은 손실은 $\max_i (A y^t)_{i, 1}$ 이다. 이를 합하면 $L_A = \sum_{t = 1}^T \max_i (A y^t)_{i, 1}$ 이다.&lt;/p&gt;
&lt;p&gt;$L_A = \sum_{t = 1}^T \max_i (A y^t)_{i, 1} \geq \max_i \sum_{t = 1}^T (A y^t)_{i,1 } = T \max_i (A y)_{i, 1}$&lt;/p&gt;
&lt;p&gt;이다. 부등식은 $i$ 를 어떻게 바꿔도 각 항이 늘어날 수 없기 때문에 성립한다.&lt;/p&gt;
&lt;p&gt;MWU 알고리즘에서 $j$ 번째 전문가는 $(\sum_{t = 1}^T A_{i_t})_{1, j}$ 만큼의 손해를 볼 것이다. 이는 $(T x^T A)_{1, j}$ 와 동일하다. 즉 $L_* = \min_j (T x^T A)_{1, j}$ 이다. 정리하면&lt;/p&gt;
&lt;p&gt;$T \max_i (A y)_{i, 1} \le \min_j (T x^T A)_{1, j} + 2 \epsilon T$&lt;br&gt;$\max_i (A y)_{i, 1} \le \min_j (x^T A)_{1, j} + 2 \epsilon$&lt;/p&gt;
&lt;p&gt;이 성립한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theorem 5.&lt;/strong&gt; $\max_x \min_y (x^T A y) \le \min_y \max_x (x^T A y) \le \max_x \min_y (x^T A y) + 2 \epsilon$ 이 성립한다.&lt;br&gt;&lt;strong&gt;Proof.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;첫 부등식을 증명하자. $\max_x \min_y (x^T A y) &amp;gt; \min_y \max_x (x^T A y)$ 라고 하고, 좌변의 최적해를 $(x_1, y_1)$, 우변의 최적해를 $(x_2, y_2)$ 라고 하자. $x_1^T A y_1 \le x_1^T A y_2$ 이다. 고정된 $x_1$ 에 대해서 $y_1$ 이 최솟값이었기 때문이다. 비슷하게 $x_1^T A y_2 \le x_2^T A y_2$ 이다. 고정된 $y_2$ 에 대해서 $x_2$ 가 최댓값이었기 때문이다. 고로 가정에 모순이다.&lt;/li&gt;
&lt;li&gt;$\max_i (Ay)_{i, 1} = \max_x (x^T A y)$ 이다. 모든 확률 분포 $x$ 에 대해서 저게 최적이기 때문이다. 비슷하게 $\min_j (x^T A)_{1, j} = \min_y (x^T A y)$ 이다.&lt;/li&gt;
&lt;li&gt;따라서 Theorem 4는 $\max_x (x^T A y) \le \min_y (x^T A y) + 2\epsilon$를 의미한다. 이는 $\min_y \max_x (x^T A y) \le \max_x (x^T A y) \le \min_y (x^T A y) + 2\epsilon \le \max_x \min_y (x^T A y) + 2 \epsilon$ 역시 의미한다. 이에 따라 두 번째 부등식 역시 증명된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;저 알고리즘을 Profit maximization으로 해석해서 $X$ 의 역할에서 게임을 해도 동일한 결과를 얻을 수 있다. LP Duality같은 상황에서 primal / dual 중 하나만 풀 수 있어도 approximate primal / dual 솔루션을 모두 얻을 수 있다는 게 takeaway인거 같다.&lt;/p&gt;
&lt;h2&gt;5. Approximate Unit Max Flow via MWU&lt;/h2&gt;
&lt;p&gt;모든 간선의 용량이 $1$일 때 $s - t$ approximate max flow를 빠르게 구하는 방법을 생각해 보자. 매칭일 때는 간단한 방법이 있는데 (디닉으로 $O(\epsilon^{-1})$ 길이의 augmenting path를 다 소진하면 됨) unit max flow에서는 잘 안되나 보다.&lt;/p&gt;
&lt;p&gt;Unit Max Flow는 다음과 같은 지수적 크기의 LP로 표현할 수 있다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;모든 $s - t$ 경로 $\mathcal{P}$ 에 적당한 값을 배정해서&lt;/li&gt;
&lt;li&gt;각 간선에 대해서, 해당 간선을 지나는 가중치 합이 $1$ 이하가 되게 하고&lt;/li&gt;
&lt;li&gt;배정한 값 합을 최대화&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;행렬 $A \in [0, 1]^{E \times \mathcal{P}}$ 를, 각 간선이 특정 경로에 속하면 $1$ 이고 아니면 $0$ 인 행렬이라고 하자. $y$ 를 내가 배정한 값이라고 했을 때, 이 해가 올바르다는 것은 $\max_i (A y) \le 1$ 이라는 것과 동일하다. 이제 $y$ 를 확률 분포로 scaling할 경우, 우리가 해결하는 문제는 $\min_y \max_i (Ay)$ 이다. 이 값이 $c$ 라고 하면, $1$ 의 flow로 각 간선의 congestion을 $c$ 로 설정해 줄 수 있으니, $1/c$ 의 unit flow를 찾는 것이다. (사실 구체적으로 왜 이렇게 하는지는 모르겠다. 그냥 위에 있는 LP식으로 해도 똑같은 알고리즘이 나오지 않을까? 아무튼 강의 자료가 이렇게 하길래 그냥 해 봤다.)&lt;/p&gt;
&lt;p&gt;즉, $A$ 에 대해서 zero-sum game을 해결하면 Approximate Unit Max Flow를 해결할 수 있다. 해야 할 것은, 모든 경로에 대해서 expert를 배정하고 $A_{i, *} \cdot y$ 를 최대화하는 $i$ 를 고르는 것이다. 즉, 현재 flow에 대해서 congestion이 최대인 간선이 손실 벡터가 된다.&lt;/p&gt;
&lt;p&gt;이 MWU는 구현이 어려워보이니, 반대로 $x$ 를 고정하고 $x^T \cdot A_{*, j}$ 를 최소화하는 $j$를 골라보자. $x$ 에 대해서 $x^T \cdot A_{*, j}$ 를 최소화하는 $j$ 가 무슨 뜻일까? 바로 $x$ 를 간선 가중치로 했을 때 $s - t$ 최단 경로라는 뜻이다. 고로 이건 Dijkstra를 사용하여 해결할 수 있다.&lt;/p&gt;
&lt;p&gt;마지막으로, MWU를 몇 번 돌려야 할까? $1 - \delta$ approximate solution을 얻고 싶다면:&lt;/p&gt;
&lt;p&gt;$\frac{1}{X + 2\epsilon} \geq (1 - \delta)\frac{1}{X}$&lt;br&gt;$1 \ge (1 - \delta)(1 + \frac{2\epsilon}{X})$&lt;br&gt;$\epsilon \le O(\delta X) \le O(\delta / m)$&lt;br&gt;$\epsilon^{-1} \geq m / \delta$&lt;/p&gt;
&lt;p&gt;고로 $\frac{\ln n}{\epsilon^2} = m^2 \delta^{-2} \ln n$ 번 돌려야 한다. 다익스트라 한 번을 $O(m\log n)$ 이라 치면 이 알고리즘은 $O(m^3 \delta^{-2} \log^2 n)$ 의 시간 복잡도를 가진다. Theorem 2를 보면 $A$ 가 non-negative entry로 구성되어 있으면 더 빠르게 수렴한다는 얘기가 있다. 이를 사용하면 $\tilde{O}(m^2)$ 정도까지는 줄일 수 있는 것 같다. Decremental SSSP 자료구조를 &amp;quot;잘 쓰면&amp;quot; $O(m^{1 + o(1)})$ 도 되는 것 같다 (&lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=9719758&quot;&gt;BGS&amp;#39;21&lt;/a&gt;). Decremental SSSP를 그냥 쓰는 것은 충분치 않고 (최단 경로를 구하는 것을 떠나서 최단 경로를 떠나서 가중치 업데이트를 해야 함을 기억하자). 아주 잘 써야 한다.&lt;/p&gt;</description>
      <category>공부/CS theory</category>
      <author>구사과</author>
      <guid isPermaLink="true">https://amugelab.tistory.com/370</guid>
      <comments>https://amugelab.tistory.com/370#entry370comment</comments>
      <pubDate>Sat, 11 Apr 2026 06:24:46 +0900</pubDate>
    </item>
    <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>
  </channel>
</rss>