<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>.Zzumbong</title>
    <link>https://zzumbong.tistory.com/</link>
    <description>Front-End 개발자의 탐험 일지!</description>
    <language>ko</language>
    <pubDate>Sat, 20 Jun 2026 21:37:40 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>쭘봉</managingEditor>
    <image>
      <title>.Zzumbong</title>
      <url>https://tistory1.daumcdn.net/tistory/5794848/attach/cb1f6f777fbe459fa0bd94fe1a741897</url>
      <link>https://zzumbong.tistory.com</link>
    </image>
    <item>
      <title>나는 굳어버린 빛이다 &amp;mdash; 「별의 자식」 시리즈 1부</title>
      <link>https://zzumbong.tistory.com/129</link>
      <description>&lt;h1 data-sourcepos=&quot;1:1-1:14;0-13&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;반물질에서 시작된, 내 정체에 관한 질문 &amp;mdash; 「별의 자식」 시리즈 1부&lt;/span&gt;&lt;/h1&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;16:1-16:27;411-437&quot; data-ke-size=&quot;size26&quot;&gt;프롤로그 &amp;mdash; 사소한 질문 하나에서 시작됐다&lt;/h2&gt;
&lt;p data-sourcepos=&quot;18:1-18:16;439-454&quot; data-ke-size=&quot;size16&quot;&gt;시작은 정말 별것 아니었다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;20:1-20:109;456-564&quot; data-ke-size=&quot;size16&quot;&gt;전자는 음전하를 띤다는데, 그럼 반대는 뭘까? 찾아보니 &lt;b&gt;양전자(positron)&lt;/b&gt;라는 게 있다고 한다. 거기서 멈췄으면 됐을 텐데, 한 번 당긴 실이 우주의 끝까지 풀려 나갈 줄은 몰랐다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;22:1-22:158;566-723&quot; data-ke-size=&quot;size16&quot;&gt;양전자에서 시작된 질문은 어느새 &quot;질량이란 무엇인가&quot;, &quot;나는 대체 무엇으로 만들어졌는가&quot;, 그리고 끝내 &quot;우리는 왜 존재하는가&quot;까지 번졌다. 그날 밤 나는 천문학을 취미로 좋아하는 평범한 사람일 뿐이었는데, 어느 순간 내 손으로 우주의 가장 근본적인 질문들을 하나씩 꿰고 있었다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-sourcepos=&quot;24:1-24:97;725-821&quot; data-ke-size=&quot;size16&quot;&gt;이 글은 물리 교과서가 아니다. 어느 밤, 가벼운 호기심 하나가 나를 어디까지 데려갔는지에 대한 기록이다. 그리고 그 끝에서 내가 왜 뭉클해졌는지에 대한 이야기이기도 하다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;26:1-26:22;823-844&quot; data-ke-size=&quot;size16&quot;&gt;먼저, 모든 것이 시작된 그 단어부터.&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;28:1-28:22;846-867&quot; data-ke-size=&quot;size26&quot;&gt;1. 반물질 &amp;mdash; 이름이 만든 오해&lt;/h2&gt;
&lt;p data-sourcepos=&quot;30:1-30:124;869-992&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;반물질(antimatter).&lt;/b&gt; 이름부터 SF다. '반(反)'이라는 글자가 붙는 순간, 머릿속엔 반대 차원, 거울 세계, 평행우주 같은 게 떠오른다. 뭔가 우리 세상과 정반대인, 닿으면 안 될 것 같은 신비한 물질.&lt;/p&gt;
&lt;p data-sourcepos=&quot;32:1-32:33;994-1026&quot; data-ke-size=&quot;size16&quot;&gt;그런데 알고 보니 그 '반'은 그렇게 거창한 게 아니었다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;34:1-34:207;1028-1234&quot; data-ke-size=&quot;size16&quot;&gt;반물질의 '반'은 그저 &lt;b&gt;전하 부호가 뒤집혔다&lt;/b&gt;는 뜻일 뿐이다. 양전자는 전자와 질량이 완전히 똑같다. 단지 전자가 음(&amp;minus;)전하라면 양전자는 양(+)전하라는 것, 그 차이뿐이다. 반대 세상에서 온 무언가가 아니라, 그냥 부호가 뒤집힌 평범한 입자. 만약 발견자들이 '거울입자' 같은 밋밋한 이름을 붙였다면, 우리는 반물질을 이렇게까지 신비롭게 여기지 않았을 것이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;36:1-36:35;1236-1270&quot; data-ke-size=&quot;size16&quot;&gt;재미있는 건 그다음이다. 물질과 반물질이 만나면 어떻게 될까?&lt;/p&gt;
&lt;p data-sourcepos=&quot;38:1-38:98;1272-1369&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;쌍소멸(annihilation)&lt;/b&gt;이 일어난다. 둘은 서로를 끌어안고 동시에 사라진다. 그리고 그 사라진 질량은 빛(감마선)으로 바뀐다. 여기서 그 유명한 식이 등장한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;E = mc&lt;sup&gt;2&lt;/sup&gt;&lt;/blockquote&gt;
&lt;p data-sourcepos=&quot;42:1-42:45;1385-1429&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;질량(m)이 빛의 속도 제곱(c&amp;sup2;)을 곱한 만큼의 에너지(E)로 변하는 것이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;44:1-44:187;1431-1617&quot; data-ke-size=&quot;size16&quot;&gt;이게 왜 무서운(?) 변환이냐면 &amp;mdash; 우리가 아는 가장 격렬한 반응들조차 질량을 에너지로 바꾸는 효율이 형편없기 때문이다. 장작이 타는 화학반응은 질량의 거의 0%를, 원자폭탄조차 0.1% 정도만 에너지로 바꾼다. 그런데 물질과 반물질의 쌍소멸은 **질량의 100%**를 에너지로 바꾼다. 이론상 우주에서 가장 완벽한 에너지 변환이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image 2026년 6월 18일 오후 12_43_23.png&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;1402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwkdXL/dJMcaijqyxT/1ul4lguWrEuQ1XFaxZdacK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwkdXL/dJMcaijqyxT/1ul4lguWrEuQ1XFaxZdacK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwkdXL/dJMcaijqyxT/1ul4lguWrEuQ1XFaxZdacK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwkdXL%2FdJMcaijqyxT%2F1ul4lguWrEuQ1XFaxZdacK%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;1122&quot; height=&quot;1402&quot; data-filename=&quot;ChatGPT Image 2026년 6월 18일 오후 12_43_23.png&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;1402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;53:1-53:28;1992-2019&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-sourcepos=&quot;53:1-53:28;1992-2019&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-sourcepos=&quot;53:1-53:28;1992-2019&quot; data-ke-size=&quot;size26&quot;&gt;2. 질량이라는 착각 &amp;mdash; 나는 사실 에너지다&lt;/h2&gt;
&lt;p data-sourcepos=&quot;55:1-55:61;2021-2081&quot; data-ke-size=&quot;size16&quot;&gt;E=mc&amp;sup2;을 우리는 보통 &quot;질량을 에너지로 바꾼다&quot;고 읽는다. 그런데 이 식의 진짜 의미는 훨씬 충격적이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;57:1-57:77;2083-2159&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;질량이 에너지를 '가진' 게 아니라, 질량이 곧 에너지의 한 형태라는 것.&lt;/b&gt; 둘은 별개의 무언가가 아니라, 처음부터 같은 것이었다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;59:1-59:167;2161-2327&quot; data-ke-size=&quot;size16&quot;&gt;비유하자면 이런 거다. &quot;1마일은 왜 1.6km나 되는 큰 거리를 품고 있지?&quot;라고 묻는 사람은 없다. 마일이 km를 '가진' 게 아니라, 둘 다 같은 거리를 다른 단위로 잰 것뿐이니까. 질량(kg)과 에너지(줄, J)도 정확히 그런 관계다. 그리고 &lt;b&gt;c&amp;sup2;은 그 둘 사이를 바꿔주는 환율&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;61:1-61:138;2329-2466&quot; data-ke-size=&quot;size16&quot;&gt;그럼 왜 이 환율이 이렇게 어마어마하게 클까? 순전히 우리가 일상에서 쓰는 단위 때문이다. 빛의 속도는 초속 3억 미터라는 비현실적인 숫자인데, 그걸 제곱하니 천문학적인 값이 나온다. 그래서 아주 작은 질량도 c&amp;sup2;을 곱하면 엄청난 에너지가 된다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;63:1-63:55;2468-2522&quot; data-ke-size=&quot;size16&quot;&gt;하지만 물리학자들이 쓰는 식으로 빛의 속도를 그냥 '1'로 놓으면, 이 식은 놀랍도록 단순해진다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;E=m&lt;/blockquote&gt;
&lt;p data-sourcepos=&quot;67:1-67:84;2535-2618&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;질량과 에너지가 &lt;b&gt;같은 숫자&lt;/b&gt;가 되는 것이다. &quot;질량은 엄청난 에너지를 품고 있다&quot;는 우리의 감탄은, 사실 인간이 만든 단위가 만들어낸 착시였다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;67:1-67:84;2535-2618&quot; 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;ChatGPT Image 2026년 6월 18일 오후 12_47_40.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;1086&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG8Mml/dJMcah5Wnyz/din9aUHgJibgM6g9zA80Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG8Mml/dJMcah5Wnyz/din9aUHgJibgM6g9zA80Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG8Mml/dJMcah5Wnyz/din9aUHgJibgM6g9zA80Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG8Mml%2FdJMcah5Wnyz%2Fdin9aUHgJibgM6g9zA80Q0%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;1448&quot; height=&quot;1086&quot; data-filename=&quot;ChatGPT Image 2026년 6월 18일 오후 12_47_40.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;1086&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-sourcepos=&quot;67:1-67:84;2535-2618&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;76:1-76:27;2984-3010&quot; data-ke-size=&quot;size26&quot;&gt;3. 내 몸의 99% &amp;mdash; 묶여 있는 에너지&lt;/h2&gt;
&lt;p data-sourcepos=&quot;78:1-78:23;3012-3034&quot; data-ke-size=&quot;size16&quot;&gt;여기서부터가 진짜 소름이 돋는 지점이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;80:1-80:78;3036-3113&quot; data-ke-size=&quot;size16&quot;&gt;그렇다면 질량은 대체 어디서 오는 걸까? 답을 알고 나면 세상이 조금 다르게 보인다. &lt;b&gt;내 몸무게의 약 99%는, 이미 '에너지'다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-sourcepos=&quot;82:1-82:154;3115-3268&quot; data-ke-size=&quot;size16&quot;&gt;내 몸을 잘게 쪼개 보자. 몸은 원자로 되어 있고, 원자 질량의 대부분은 핵 속의 양성자와 중성자에 있다. 그 양성자 하나를 또 열어 보면 안에는 쿼크 세 개가 들어 있다. 그런데 &amp;mdash; 이 쿼크 세 개의 질량을 전부 더해도, 양성자 질량의 &lt;b&gt;고작 1% 정도&lt;/b&gt;밖에 안 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-sourcepos=&quot;84:1-84:16;3270-3285&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;그럼 나머지 99%는 뭘까?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-sourcepos=&quot;86:1-86:120;3287-3406&quot; data-ke-size=&quot;size16&quot;&gt;쿼크들을 묶어두는 &lt;b&gt;강한 핵력의 에너지&lt;/b&gt;, 그리고 그 좁은 공간에 갇혀 미친 듯이 움직이는 쿼크들의 &lt;b&gt;운동 에너지&lt;/b&gt;다. 양성자 질량의 대부분은 '물질 덩어리'가 아니라, 갇혀 있는 에너지 그 자체인 것이다. 더 놀라운 사실. 쿼크를 묶는 글루온은 질량이 &lt;b&gt;아예 0&lt;/b&gt;이고, 쿼크 자체의 질량도 거의 0에 가깝다. 그러니까 나는 &amp;mdash; 질량이 거의 없는 재료들이 좁은 공간에 갇혀 맹렬하게 움직이고 서로를 붙드는, 그 &lt;b&gt;에너지&lt;/b&gt;로 만들어진 존재다. 질량이, 질량 없는 것들로부터 솟아난 것이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;90:1-90:91;3570-3660&quot; data-ke-size=&quot;size16&quot;&gt;&quot;나는 단단한 물질로 된 존재&quot;라는 직관은 사실 거의 틀렸다. 더 정확히 말하면, 나는 텅 빈 공간 속에서 안정적으로 진동하는 &lt;b&gt;에너지 패턴&lt;/b&gt;에 훨씬 가깝다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-sourcepos=&quot;92:1-92:14;3662-3675&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나는, 굳어버린 빛이다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-sourcepos=&quot;92:1-92:14;3662-3675&quot; 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;ChatGPT Image 2026년 6월 18일 오후 01_05_45.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;1086&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9fymR/dJMcadoODyf/afjz5Gn63VWXuOxZPDgwb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9fymR/dJMcadoODyf/afjz5Gn63VWXuOxZPDgwb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9fymR/dJMcadoODyf/afjz5Gn63VWXuOxZPDgwb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9fymR%2FdJMcadoODyf%2Fafjz5Gn63VWXuOxZPDgwb1%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;1448&quot; height=&quot;1086&quot; data-filename=&quot;ChatGPT Image 2026년 6월 18일 오후 01_05_45.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;1086&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-sourcepos=&quot;92:1-92:14;3662-3675&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-sourcepos=&quot;92:1-92:14;3662-3675&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;101:1-101:10;4094-4103&quot; data-ke-size=&quot;size26&quot;&gt;다음 편에서&lt;/h2&gt;
&lt;p data-sourcepos=&quot;103:1-103:52;4105-4156&quot; data-ke-size=&quot;size16&quot;&gt;좋다. 나는 단단한 물질이 아니라 굳어버린 에너지다. 받아들이고 나니 묘한 평온이 찾아온다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;105:1-105:47;4158-4204&quot; data-ke-size=&quot;size16&quot;&gt;그런데 곧바로 다음 질문이 따라온다. &lt;b&gt;그럼 이 에너지는 대체 어디서 왔을까?&lt;/b&gt;&lt;/p&gt;
&lt;p data-sourcepos=&quot;107:1-107:103;4206-4308&quot; data-ke-size=&quot;size16&quot;&gt;이 실을 당기는 순간, 우주의 시작과 끝이 통째로 딸려 나온다. 사라지지 않는 에너지, 모든 것이 식어 멈추는 우주의 마지막, 그리고 137억 년을 거슬러 올라가는 내 진짜 족보까지.&lt;/p&gt;
&lt;p data-sourcepos=&quot;109:1-109:49;4310-4358&quot; data-ke-size=&quot;size16&quot;&gt;다음 편 **「빛에서 별로, 별에서 나로」**에서, 내가 어디서 왔는지를 따라가 본다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-sourcepos=&quot;113:1-113:25;4365-4389&quot; data-ke-size=&quot;size16&quot;&gt;&amp;mdash; 「별의 자식」 시리즈, 2부에서 계속&lt;/p&gt;</description>
      <category>EveryDay</category>
      <category>별</category>
      <category>빅뱅</category>
      <category>에너지</category>
      <category>우주</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/129</guid>
      <comments>https://zzumbong.tistory.com/129#entry129comment</comments>
      <pubDate>Thu, 18 Jun 2026 13:44:52 +0900</pubDate>
    </item>
    <item>
      <title>행성과 별을 죽이는 SF미래 병기 뉴트로늄 탄자를 서울에 낙하해보기</title>
      <link>https://zzumbong.tistory.com/128</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;'뉴트로늄(Neutronium)'은 뭘까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;3&quot; data-ke-size=&quot;size23&quot;&gt;0. '뉴트로늄(Neutronium)'이란?&lt;/h3&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;우리가 아는 일반적인 물질(철, 물, 공기 등)은 사실 속이 거의 비어 있다. 원자를 축구장이라고 치면 원자핵은 한가운데 놓인 축구공 하나 정도고, 나머지는 전자가 돌아다니는 텅 빈 공간이다. (우리를 이루는 물질들은 텅텅 비어있는데 왜 벽을 통과하지 못할까? 라는 생각을 오래전에 해본 적이 있는데, 이것도 나중에 다뤄보면 재미난 주제일 것 같다.)&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;하지만 &lt;b data-index-in-node=&quot;4&quot; data-path-to-node=&quot;5&quot;&gt;뉴트로늄은 다르다!&lt;/b&gt; 거대한 별이 수명을 다해 죽으면서 엄청난 중력으로 짓눌려, 축구장만 한 원자들이 모두 축구공 크기로 압축되어 다닥다닥 붙어버린 상태다. 우주에서 블랙홀 다음으로 밀도가 높은 '&lt;b&gt;중성자 반죽&lt;/b&gt;'이라고 이해하면 쉽다.&lt;/p&gt;
&lt;blockquote data-path-to-node=&quot;6&quot; data-ke-style=&quot;style3&quot;&gt;5.56mm 탄환 하나의 무게는 약 &lt;b&gt;2억 톤&lt;/b&gt;이다. 전 세계의 모든 자동차를 한데 뭉쳐놓은 것보다 무겁고, &lt;br /&gt;에베레스트산 전체 무게 와 맞먹는다. (손가락만한 게 산 하나의 무게)&lt;/blockquote&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-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k9BAD/dJMcafFkKUh/xjaqkSuJPBCGotAdfXCr61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k9BAD/dJMcafFkKUh/xjaqkSuJPBCGotAdfXCr61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k9BAD/dJMcafFkKUh/xjaqkSuJPBCGotAdfXCr61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk9BAD%2FdJMcafFkKUh%2FxjaqkSuJPBCGotAdfXCr61%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;1024&quot; height=&quot;559&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&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 data-ke-size=&quot;size16&quot;&gt;사실 뉴트로늄은 중력이 약한 곳에선 금방 폭발하며 붕괴한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;발사전에 준비할 것&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;SF 차폐막 (붕괴 억제): 뉴트로늄은 중성자별의 엄청난 중력이 없으면 순식간에 폭발하며 붕괴한다.&lt;br /&gt;우리는 탄환이 목표에 맞을 때까지 이 붕괴를 막아주는 &lt;b&gt;미래 기술의 차폐막&lt;/b&gt;이 있다고 하자.&lt;/li&gt;
&lt;li&gt;발사 에너지 (리틀보이 8,000발): 에베레스트산을 총알 속도로 쏘려면 얼마나 많은 에너지가 필요할까? &lt;br /&gt;히로시마 원자폭탄(리틀보이) 약 1,300발을 동시에 터뜨려야 겨우 발사할 수 있다. &lt;br /&gt;이번엔 리틀보이 8,000발 분량의 막대한 운동 에너지를 가지고 지구로 돌진한다고 가정하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 발사 버튼을 눌러보자.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;1. 대기권 진입: 공기를 삭제하는 '플라즈마 바늘'&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dflCYr/dJMcai24wML/TibEn3yWL3MuiKsi9LdkkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dflCYr/dJMcai24wML/TibEn3yWL3MuiKsi9LdkkK/img.png&quot; data-alt=&quot;나노 바나나 이쉨..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dflCYr/dJMcai24wML/TibEn3yWL3MuiKsi9LdkkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdflCYr%2FdJMcai24wML%2FTibEn3yWL3MuiKsi9LdkkK%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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나노 바나나 이쉨..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;정지궤도에서 서울로 내려올 때, 우리가 아는 공기역학은 가볍게 무시된다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;2억 톤의 질량이 5.56mm 바늘 끝에 실려 있으니 대기는 그냥 없는 거나 다름없다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;공기 분자들은 비켜날 시간조차 없어 탄환 표면 원자와 그대로 충돌하며 &lt;b data-index-in-node=&quot;39&quot; data-path-to-node=&quot;11&quot;&gt;핵융합&lt;/b&gt;을 시작한다. 서울 하늘에는 낙뢰보다 수조 배 강한 감마선 레이저와 태양보다 뜨거운 플라즈마 터널이 뚫린다. 탄환이 땅에 닿기도 전에 지상의 생명체들은 이 강렬한 빛에 눈이 멀고 타버릴 것이다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size23&quot;&gt;2. 서울 명중: &quot;구멍이 뚫리는 지각&quot;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caH2L4/dJMcabv90Aa/DZ048FJD4KIscGpWXrxKAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caH2L4/dJMcabv90Aa/DZ048FJD4KIscGpWXrxKAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caH2L4/dJMcabv90Aa/DZ048FJD4KIscGpWXrxKAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaH2L4%2FdJMcabv90Aa%2FDZ048FJD4KIscGpWXrxKAk%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;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;탄환이 서울 시청 광장 보도블록에 닿는 순간을 상상해 보자, 보통의 폭탄은 땅에 닿으면 표면에서 터지지만, 이 탄환은 다르닷!&lt;br /&gt;&lt;br /&gt;탄환이 지면에 가하는 압력은 너무나 거대해서, 암석이나 콘크리트의 원자 구조가 버틸 수 없으므로 탄환에게 지각은 마치 '부드러운 안개'나 '묽은 주스' 로 처리된다.&lt;br /&gt;&lt;br /&gt;탄환은 폭발하기도 전에 지각을 수십 킬로미터 깊이로 뚫고 들어간다. 마치 뜨겁게 달궈진 바늘이 스티로폼을 뚫고 지나가는 것과 같이.. 이 과정에서 탄환이 가진 &lt;b&gt;120메가톤(리틀보이 8,000발)&lt;/b&gt;의 운동 에너지가 순식간에 열과 충격파로 변환되며 지면으로 전달됩니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;이 충격은 지구 반대편까지 감지될 정도의 초거대 지진을 일으킵니다. 서울 시내의 모든 건물은 0.1초 만에 가루가 되고, 충격파는 음속의 수십 배로 경기도 전역을 향해 뻗어 나갑니다. 이 충격파에 닿는 모든 생명체는 세포 단위에서 분해됩니다.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-path-to-node=&quot;24&quot; data-ke-size=&quot;size23&quot;&gt;3. 뉴트로늄 활성화: 현실의 붕괴&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tk11M/dJMcajt8MAR/nYWdcf7dJxsyxWVGAcmM31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tk11M/dJMcajt8MAR/nYWdcf7dJxsyxWVGAcmM31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tk11M/dJMcajt8MAR/nYWdcf7dJxsyxWVGAcmM31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftk11M%2FdJMcajt8MAR%2FnYWdcf7dJxsyxWVGAcmM31%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;1024&quot; height=&quot;559&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;진짜 재앙은 탄환이 박힌 뒤 차폐막이 깨지면서 시작된다. 지금까지의 파괴는 '운동 에너지' 때문이었지만,&lt;/p&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;이제는 짓눌려 있던 중성자들이 서로를 밀어내는 힘(축퇴압) 때문에, 탄환은 찰나의 순간에 원래의 부피로 돌아가려 한다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;5.56mm였던 물질이 순식간에 &lt;b data-index-in-node=&quot;81&quot; data-path-to-node=&quot;26&quot;&gt;수 킬로미터 크기의 가스 덩어리&lt;/b&gt;로 부풀어 오르며 지구 내부에서 밖으로 폭발한다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;2억 톤의 뉴트로늄이 일반 물질로 돌아가며 방출하는 에너지는 지구의 지각 일부를 우주 밖으로 튕겨낼 정도.&lt;/p&gt;
&lt;p data-path-to-node=&quot;27&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;2&quot; data-ke-size=&quot;size23&quot;&gt;4. 그 후, 지구가 마주할 거대한 재앙&lt;/h3&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;뉴트로늄 탄환이 박히고 '활성화'되어 서울이 지도에서 사라진 뒤에도 비극은 끝나지 않는다. 이 작은 탄환 하나가 불러온 여파는 한반도를 넘어 지구 전체의 운명을 뒤흔들게 된다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4&quot;&gt;방사능의 바다 (베타 붕괴의 역습):&lt;/b&gt; 뉴트로늄은 중성자 덩어리다. 압박이 사라진 중성자는 약 10분의 반감기를 거치며 양성자와 전자로 변하는 '베타 붕괴'를 일으킨다. 2억 톤의 뉴트로늄이 붕괴하며 뿜어내는 에너지는 단순히 폭발에 그치지 않고, 지구 대기를 치명적인 중성자 방사선과 고에너지 입자로 가득 채운다. 한반도를 넘어 전 세계의 방사능 수치가 생명체가 살기 힘든 수준으로 급격히 치솟게 된다. (그야말로 방사능 지옥이 열리는 셈이다.)&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5&quot;&gt;지구를 휘감는 충격파:&lt;/b&gt; 120메가톤 급의 폭발과 뉴트로늄의 팽창 에너지는 대기를 타고 전 지구로 퍼져나간다. 과거 크라카토아 화산 폭발 당시 충격파가 지구를 일곱 바퀴 돌았다고 하는데, 이 탄환의 충격파는 그보다 훨씬 강력하다. 전 세계의 기압계가 요동치고, 해안가 근처의 도시들은 이 인공적인 진동이 만들어낸 거대한 쓰나미를 마주하게 될 것이다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;암흑의 겨울 (Impact Winter):&lt;/b&gt; 폭발로 인해 증발한 서울의 잔해와 뉴트로늄 가스, 그리고 성층권까지 치솟은 수십억 톤의 먼지구름이 태양 빛을 가로막는다. 낮에도 밤처럼 어두운 상태가 수개월간 지속되며 지구의 기온은 급격히 떨어지게 된다. 식물들이 광합성을 멈추고 생태계 사슬이 무너지는 '충격의 겨울'이 찾아오는 것이다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7&quot;&gt;지각의 상처와 궤도의 미세한 변화:&lt;/b&gt; 탄환이 뚫고 들어간 지각의 구멍은 거대한 마그마 분출구가 될 가능성이 높다. 또한, 2억 톤이라는 질량이 초고속으로 부딪힌 충격은 지구의 자전 속도나 축에 아주 미세하지만 물리적인 영향을 줄 수 있다. (물론 지구가 박살 날 정도는 아니겠지만, 전 세계의 정밀 시계들을 모두 다시 맞춰야 할지도 모른다.)&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;좀 더 생각해보면.&lt;/h3&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;뉴트로늄에 대한 체쥐, 제조 후 유통, 발사 까지하려면 수많은 고비가 많다. 거기에 탄자 또는 탄두 등으로 만들어서 발사까지 하려면 엄청난 에너지가 필요할 것이다. 단순히 리틀보이 8000개를 주요 타격지점에 쏘는게 나을지도?&lt;br /&gt;&lt;br /&gt;만약 &lt;b&gt;카르다쇼프 척도&lt;/b&gt;&amp;nbsp; 2티어 급 문명이라면?&lt;br /&gt;뉴트로늄을 제조하는건 에너지가 너무 많이 들어서 안할꺼고 중성자별에 가서 채취하는게 나아보이는데? 어찌저찌 축퇴물질을 뜯어서 가져온다 치고&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;그럼 중력이 강한 무언가로 잡아둬야함. 미니 블랙홀이나 시공간 왜곡????&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;발사는 뭐 다이슨 스피어를 통한 에너지를 레이저화 한다면 충분히 밀어내 줄 수 있어보이고 아니면 태양을 통한 스윙바이나 투석기처럼 돌다가 쏘면 충분히 가능해보임.&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;: 예전에 나사 출신 과학자들이 재미있는 망상 질문에 진지하게 답변해주던 왓이프를 처음 읽던 느낌으로 AI와 함께 작성했다.&amp;nbsp;&lt;br /&gt;계산은 너무 귀찮기도 하고 뇌내 에너지도 없고 할 줄 도 모르지만 AI가 다 해주니 너무 좋아.&lt;/p&gt;</description>
      <category>AI와 함께 망상하기</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/128</guid>
      <comments>https://zzumbong.tistory.com/128#entry128comment</comments>
      <pubDate>Wed, 14 Jan 2026 03:14:26 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 1266. Minimum Time Visiting All Points</title>
      <link>https://zzumbong.tistory.com/127</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [ &lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt; &lt;/span&gt;&amp;nbsp;]&amp;nbsp;&lt;span style=&quot;color: #409d00;&quot;&gt;Easy&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;On&amp;nbsp;a&amp;nbsp;2D&amp;nbsp;plane,&amp;nbsp;there&amp;nbsp;are&amp;nbsp;n&amp;nbsp;points&amp;nbsp;with&amp;nbsp;integer&amp;nbsp;coordinates&amp;nbsp;points[i]&amp;nbsp;=&amp;nbsp;[xi,&amp;nbsp;yi].&amp;nbsp;Return&amp;nbsp;the&amp;nbsp;minimum&amp;nbsp;time&amp;nbsp;in&amp;nbsp;seconds&amp;nbsp;to&amp;nbsp;visit&amp;nbsp;all&amp;nbsp;the&amp;nbsp;points&amp;nbsp;in&amp;nbsp;the&amp;nbsp;order&amp;nbsp;given&amp;nbsp;by&amp;nbsp;points.&amp;nbsp;You&amp;nbsp;can&amp;nbsp;move&amp;nbsp;according&amp;nbsp;to&amp;nbsp;these&amp;nbsp;rules:&amp;nbsp;In&amp;nbsp;1&amp;nbsp;second,&amp;nbsp;you&amp;nbsp;can&amp;nbsp;either:&amp;nbsp;move&amp;nbsp;vertically&amp;nbsp;by&amp;nbsp;one&amp;nbsp;unit,&amp;nbsp;move&amp;nbsp;horizontally&amp;nbsp;by&amp;nbsp;one&amp;nbsp;unit,&amp;nbsp;or&amp;nbsp;move&amp;nbsp;diagonally&amp;nbsp;sqrt(2)&amp;nbsp;units&amp;nbsp;(in&amp;nbsp;other&amp;nbsp;words,&amp;nbsp;move&amp;nbsp;one&amp;nbsp;unit&amp;nbsp;vertically&amp;nbsp;then&amp;nbsp;one&amp;nbsp;unit&amp;nbsp;horizontally&amp;nbsp;in&amp;nbsp;1&amp;nbsp;second).&amp;nbsp;You&amp;nbsp;have&amp;nbsp;to&amp;nbsp;visit&amp;nbsp;the&amp;nbsp;points&amp;nbsp;in&amp;nbsp;the&amp;nbsp;same&amp;nbsp;order&amp;nbsp;as&amp;nbsp;they&amp;nbsp;appear&amp;nbsp;in&amp;nbsp;the&amp;nbsp;array.&amp;nbsp;You&amp;nbsp;are&amp;nbsp;allowed&amp;nbsp;to&amp;nbsp;pass&amp;nbsp;through&amp;nbsp;points&amp;nbsp;that&amp;nbsp;appear&amp;nbsp;later&amp;nbsp;in&amp;nbsp;the&amp;nbsp;order,&amp;nbsp;but&amp;nbsp;these&amp;nbsp;do&amp;nbsp;not&amp;nbsp;count&amp;nbsp;as&amp;nbsp;visits.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHcvq/dJMcahC7B3m/NMwGKja4M9peLIfbmhD091/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHcvq/dJMcahC7B3m/NMwGKja4M9peLIfbmhD091/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHcvq/dJMcahC7B3m/NMwGKja4M9peLIfbmhD091/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHcvq%2FdJMcahC7B3m%2FNMwGKja4M9peLIfbmhD091%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;684&quot; height=&quot;585&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: points = [[1,1],[3,4],[-1,0]] &lt;br /&gt;Output: 7 &lt;br /&gt;Explanation: One optimal path is [1,1] -&amp;gt; [2,2] -&amp;gt; [3,3] -&amp;gt; [3,4] -&amp;gt; [2,3] -&amp;gt; [1,2] -&amp;gt; [0,1] -&amp;gt; [-1,0] Time from [1,1] to [3,4] = 3 seconds Time from [3,4] to [-1,0] = 4 seconds Total time = 7 seconds&amp;nbsp;&lt;/blockquote&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: points = [[3,2],[-2,2]] Output: 5&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;points.length&amp;nbsp;==&amp;nbsp;n&amp;nbsp;&lt;/li&gt;
&lt;li&gt;1&amp;nbsp;&amp;lt;=&amp;nbsp;n&amp;nbsp;&amp;lt;=&amp;nbsp;100&amp;nbsp;&lt;/li&gt;
&lt;li&gt;points[i].length&amp;nbsp;==&amp;nbsp;2&amp;nbsp;&lt;/li&gt;
&lt;li&gt;-1000&amp;nbsp;&amp;lt;=&amp;nbsp;points[i][0],&amp;nbsp;points[i][1]&amp;nbsp;&amp;lt;=&amp;nbsp;1000&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * https://leetcode.com/problems/minimum-time-visiting-all-points
 * @param {number[][]} points
 * @return {number}
 */
var minTimeToVisitAllPoints = function (points) {
    let awnser = 0;
    for (let i = 0; i &amp;lt; points.length - 1; i++) {
        let cur = points[i];
        let next = points[i + 1];
        awnser += Math.max(
            Math.abs(next[0] - cur[0]), Math.abs(next[1] - cur[1])
        );
    }

    return awnser;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b58juS/dJMcadtU0iq/80Nok3v0il8PGrMM8U6n61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b58juS/dJMcadtU0iq/80Nok3v0il8PGrMM8U6n61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b58juS/dJMcadtU0iq/80Nok3v0il8PGrMM8U6n61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb58juS%2FdJMcadtU0iq%2F80Nok3v0il8PGrMM8U6n61%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;1220&quot; height=&quot;696&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;696&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;이지 문제가 가장 재미있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/127</guid>
      <comments>https://zzumbong.tistory.com/127#entry127comment</comments>
      <pubDate>Mon, 12 Jan 2026 12:59:40 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 1339. Maximum Product of Splitted Binary Tree</title>
      <link>https://zzumbong.tistory.com/126</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [ &lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt; &lt;/span&gt;&lt;/span&gt; ] &lt;span style=&quot;color: #f3c000;&quot;&gt;Medium&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Given&amp;nbsp;the&amp;nbsp;root&amp;nbsp;of&amp;nbsp;a&amp;nbsp;binary&amp;nbsp;tree,&amp;nbsp;split&amp;nbsp;the&amp;nbsp;binary&amp;nbsp;tree&amp;nbsp;into&amp;nbsp;two&amp;nbsp;subtrees&amp;nbsp;by&amp;nbsp;removing&amp;nbsp;one&amp;nbsp;edge&amp;nbsp;such&amp;nbsp;that&amp;nbsp;the&amp;nbsp;product&amp;nbsp;of&amp;nbsp;the&amp;nbsp;sums&amp;nbsp;of&amp;nbsp;the&amp;nbsp;subtrees&amp;nbsp;is&amp;nbsp;maximized.&amp;nbsp;Return&amp;nbsp;the&amp;nbsp;maximum&amp;nbsp;product&amp;nbsp;of&amp;nbsp;the&amp;nbsp;sums&amp;nbsp;of&amp;nbsp;the&amp;nbsp;two&amp;nbsp;subtrees.&amp;nbsp;Since&amp;nbsp;the&amp;nbsp;answer&amp;nbsp;may&amp;nbsp;be&amp;nbsp;too&amp;nbsp;large,&amp;nbsp;return&amp;nbsp;it&amp;nbsp;modulo&amp;nbsp;109&amp;nbsp;+&amp;nbsp;7.&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;you&amp;nbsp;need&amp;nbsp;to&amp;nbsp;maximize&amp;nbsp;the&amp;nbsp;answer&amp;nbsp;before&amp;nbsp;taking&amp;nbsp;the&amp;nbsp;mod&amp;nbsp;and&amp;nbsp;not&amp;nbsp;after&amp;nbsp;taking&amp;nbsp;it.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6xzOB/dJMcajt53B3/QxXxpyk8JIKMGMKGEoOCi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6xzOB/dJMcajt53B3/QxXxpyk8JIKMGMKGEoOCi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6xzOB/dJMcajt53B3/QxXxpyk8JIKMGMKGEoOCi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6xzOB%2FdJMcajt53B3%2FQxXxpyk8JIKMGMKGEoOCi1%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;695&quot; height=&quot;232&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: root = [1,2,3,4,5,6] &lt;br /&gt;Output: 110 &lt;br /&gt;Explanation: Remove the red edge and get 2 binary trees with sum 11 and 10. Their product is 110 (11*10)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGyxr2/dJMcagRIYmi/MfV2OvLfrKZfUkCbwBK611/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGyxr2/dJMcagRIYmi/MfV2OvLfrKZfUkCbwBK611/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGyxr2/dJMcagRIYmi/MfV2OvLfrKZfUkCbwBK611/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGyxr2%2FdJMcagRIYmi%2FMfV2OvLfrKZfUkCbwBK611%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;667&quot; height=&quot;281&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: root = [1,null,2,3,4,null,null,5,6]&lt;br /&gt;Output: 90&lt;br /&gt;Explanation: Remove the red edge and get 2 binary trees with sum 15 and 6.Their product is 90 (15*6) &lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;The number of nodes in the tree is in the range [2, 5 * 10^4].&amp;nbsp;&lt;/li&gt;
&lt;li&gt;1 &amp;lt;= Node.val &amp;lt;= 10^4&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxProduct = function (root) {
    const MOD = 1000000007;

    // DFS로 순회하면서 현재 트리 합을 계속 저장하면서 
    // 전체 합을 구해두기

    const allSums = [];

    const getSum = (node) =&amp;gt; {
        if (!node) return 0;

        const currentSum = node.val + getSum(node.left) + getSum(node.right);

        allSums.push(currentSum);
        return currentSum;
    }
    const totalSum = getSum(root)

    let maxProd = 0;

    for (let sum of allSums) {
        const currentProd = sum * (totalSum - sum);
        if (currentProd &amp;gt; maxProd) {
            maxProd = currentProd;
        }
    }

    return maxProd % MOD
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;array push 가 아니라&amp;nbsp; 그때그때 비교하는 코드로 만들면 더 빠름&lt;/li&gt;
&lt;li&gt;MOD 하는거 0 몇개인지 자꾸 햇갈려&amp;nbsp; 1-0은 8개-7&lt;/li&gt;
&lt;/ul&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-origin-width=&quot;1194&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TFrdj/dJMcaf6l4TD/TD9nZ2sXOx2XP5xlS0iIkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TFrdj/dJMcaf6l4TD/TD9nZ2sXOx2XP5xlS0iIkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TFrdj/dJMcaf6l4TD/TD9nZ2sXOx2XP5xlS0iIkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTFrdj%2FdJMcaf6l4TD%2FTD9nZ2sXOx2XP5xlS0iIkK%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;1194&quot; height=&quot;662&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/126</guid>
      <comments>https://zzumbong.tistory.com/126#entry126comment</comments>
      <pubDate>Wed, 7 Jan 2026 09:41:42 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 1161. Maximum Level Sum of a Binary Tree</title>
      <link>https://zzumbong.tistory.com/125</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [ &lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;] &lt;span style=&quot;color: #f3c000;&quot;&gt;Medium&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Given&amp;nbsp;the&amp;nbsp;root&amp;nbsp;of&amp;nbsp;a&amp;nbsp;binary&amp;nbsp;tree,&amp;nbsp;the&amp;nbsp;level&amp;nbsp;of&amp;nbsp;its&amp;nbsp;root&amp;nbsp;is&amp;nbsp;1,&amp;nbsp;the&amp;nbsp;level&amp;nbsp;of&amp;nbsp;its&amp;nbsp;children&amp;nbsp;is&amp;nbsp;2,&amp;nbsp;and&amp;nbsp;so&amp;nbsp;on.&amp;nbsp;Return&amp;nbsp;the&amp;nbsp;smallest&amp;nbsp;level&amp;nbsp;x&amp;nbsp;such&amp;nbsp;that&amp;nbsp;the&amp;nbsp;sum&amp;nbsp;of&amp;nbsp;all&amp;nbsp;the&amp;nbsp;values&amp;nbsp;of&amp;nbsp;nodes&amp;nbsp;at&amp;nbsp;level&amp;nbsp;x&amp;nbsp;is&amp;nbsp;maximal.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;이진 트리의 루트(root)가 주어집니다. 루트의 레벨은 1이고, 그 자식들의 레벨은 2, 그다음은 3으로 이어집니다.각 레벨에 있는 모든 노드 값의 합을 구했을 때, 그 합이 최대가 되는 가장 작은 레벨 x를 반환하세요.&lt;br /&gt;&lt;br /&gt;포인트 1: 합이 최대인 레벨을 찾아야 함.&lt;br /&gt;포인트 2: 만약 합이 같은 레벨이 여러 개라면, 그중 숫자가 더 작은 레벨(더 위쪽에 있는 레벨)을 선택해야 함.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMX0Kd/dJMcahpzEey/mOuqnOhiK5SOupSX25pvL1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMX0Kd/dJMcahpzEey/mOuqnOhiK5SOupSX25pvL1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMX0Kd/dJMcahpzEey/mOuqnOhiK5SOupSX25pvL1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMX0Kd%2FdJMcahpzEey%2FmOuqnOhiK5SOupSX25pvL1%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;332&quot; height=&quot;291&quot; data-origin-width=&quot;332&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: root = [1,7,0,7,-8,null,null]&lt;br /&gt;Output: 2 &lt;br /&gt;Explanation: Level 1 sum = 1. Level 2 sum = 7 + 0 = 7. Level 3 sum = 7 + -8 = -1. &lt;br /&gt;So we return the level with the maximum sum which is level 2.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: root = [989,null,10250,98693,-89388,null,null,null,-32127]&lt;br /&gt;Output: 2&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;The number of nodes in the tree is in the range [1, 10^4].&amp;nbsp;&lt;/li&gt;
&lt;li&gt;-10^5 &amp;lt;= Node.val &amp;lt;= 10^5&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxLevelSum = function (root) {
    let maxSum = -Infinity;
    let maxLevel = 1;
    let level = 1;
    let que = [root];

    while (que.length &amp;gt; 0) {
        let currentSize = que.length;
        let currentSum = 0;
        for (let i = 0; i &amp;lt; currentSize; i++) {
            let node = que.shift();
            currentSum += node.val;

            if (node.left) que.push(node.left);
            if (node.right) que.push(node.right);
        }

        if (currentSum &amp;gt; maxSum) {
            maxSum = currentSum;
            maxLevel = level;
        }
        level++;
    }
    return maxLevel;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제 보고 음.. BFS를 사용해야 겠네&lt;/li&gt;
&lt;li&gt;BFS로 레벨 별로 돌아야 하니까 while 속에 for문으로 돌리면서 합계를 구해야하는군!&lt;/li&gt;
&lt;li&gt;for문이 끝나면 누가 더큰지 비교해서 제일 큰 값의 레벨을 리턴하면 된다!&lt;/li&gt;
&lt;li&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;1190&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RWROF/dJMcahC5swk/qA6eHoih17gxvvTbFWR720/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RWROF/dJMcahC5swk/qA6eHoih17gxvvTbFWR720/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RWROF/dJMcahC5swk/qA6eHoih17gxvvTbFWR720/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRWROF%2FdJMcahC5swk%2FqA6eHoih17gxvvTbFWR720%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;1190&quot; height=&quot;648&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;648&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Beast 100% 달성 코드 첨부&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로직와 알고리즘 모두 똑같은데, 찿이가 que 대신에 head하는 index를 이용해서 반복함.&lt;/li&gt;
&lt;li&gt;shift() 같은 경우 [1,2,3,4] 에서 1이 빠지면 나머지 3칸이 이동하는 시스템이라고함. 그래서 더 오래 걸림.&lt;/li&gt;
&lt;li&gt;단순히 head 라는 index만 ++ 하니까 런타임이 줄어든다고 한다.&lt;/li&gt;
&lt;li&gt;BFS가 잘 도는데 느리다고 빠꾸 먹으면 head BFS를 떠올릴 것&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1767658987791&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxLevelSum = function(root) {
    if(!root) return -1;

    const queue = [root];
    let head = 0;

    let maxValue = -Infinity;
    let maxIndex = 1;
    let currentLevel = 1;

    while (head &amp;lt; queue.length) {
        const levelSize = queue.length - head;
        let levelSum = 0;
        
        for (let i = 0; i &amp;lt; levelSize; i++) {
            const node = queue[head++];
            levelSum += node.val;

            if(node.left) queue.push(node.left);
            if(node.right) queue.push(node.right);
        }

        if(levelSum &amp;gt; maxValue) {
            maxValue = levelSum;
            maxIndex = currentLevel;
        }

        currentLevel++
    }

    return maxIndex
};&lt;/code&gt;&lt;/pre&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/125</guid>
      <comments>https://zzumbong.tistory.com/125#entry125comment</comments>
      <pubDate>Tue, 6 Jan 2026 09:25:12 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 1975. Maximum Matrix Sum</title>
      <link>https://zzumbong.tistory.com/124</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [ &lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&amp;nbsp;] &lt;span style=&quot;color: #f3c000;&quot;&gt;Medium&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You are given an n x n integer matrix. You can do the following operation any number of times: Choose any two adjacent elements of matrix and multiply each of them by -1. Two elements are considered adjacent if and only if they share a border. Your goal is to maximize the summation of the matrix's elements. Return the maximum sum of the matrix's elements using the operation mentioned above.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;당신에게 n x n 크기의 정수 행렬이 주어집니다. 당신은 다음과 같은 연산을 원하는 만큼 수행할 수 있습니다.행렬에서 인접한 두 요소를 선택하고, 각각에 -1을 곱합니다.두 요소가 경계(변)를 공유하는 경우에만 인접한 것으로 간주합니다.당신의 목표는 행렬 내 모든 요소의 합을 최대화하는 것입니다. 위 연산을 사용하여 얻을 수 있는 행렬 요소 합의 최댓값을 반환하세요.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcF3wv/dJMcadHqgoN/Ns5fvCVwilVY8MWKCTbG9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcF3wv/dJMcadHqgoN/Ns5fvCVwilVY8MWKCTbG9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcF3wv/dJMcadHqgoN/Ns5fvCVwilVY8MWKCTbG9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcF3wv%2FdJMcadHqgoN%2FNs5fvCVwilVY8MWKCTbG9k%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;401&quot; height=&quot;81&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;matrix&amp;nbsp;=&amp;nbsp;[[1,-1],[-1,1]]&amp;nbsp;&lt;br /&gt;Output:&amp;nbsp;4&amp;nbsp;&lt;br /&gt;Explanation:&amp;nbsp;We&amp;nbsp;can&amp;nbsp;follow&amp;nbsp;the&amp;nbsp;following&amp;nbsp;steps&amp;nbsp;to&amp;nbsp;reach&amp;nbsp;sum&amp;nbsp;equals&amp;nbsp;4:&amp;nbsp;&lt;br /&gt;&amp;nbsp;- Multiply the 2 elements in the first row by -1. &lt;br /&gt;- Multiply the 2 elements in the first column by -1.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg8miz/dJMcadOaipc/zvnoSF4ia6H6SBDiAS7jDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg8miz/dJMcadOaipc/zvnoSF4ia6H6SBDiAS7jDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg8miz/dJMcadOaipc/zvnoSF4ia6H6SBDiAS7jDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg8miz%2FdJMcadOaipc%2FzvnoSF4ia6H6SBDiAS7jDk%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;321&quot; height=&quot;121&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;matrix&amp;nbsp;=&amp;nbsp;[[1,2,3],[-1,-2,-3],[1,2,3]]&amp;nbsp;&lt;br /&gt;Output:&amp;nbsp;16&amp;nbsp;&lt;br /&gt;Explanation:&amp;nbsp;We&amp;nbsp;can&amp;nbsp;follow&amp;nbsp;the&amp;nbsp;following&amp;nbsp;step&amp;nbsp;to&amp;nbsp;reach&amp;nbsp;sum&amp;nbsp;equals&amp;nbsp;16:&amp;nbsp;&lt;br /&gt;&amp;nbsp;- Multiply the 2 last elements in the second row by -1.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;n == matrix.length == matrix[i].length&lt;/li&gt;
&lt;li&gt;2 &amp;lt;= n &amp;lt;= 250&lt;/li&gt;
&lt;li&gt;-10^5 &amp;lt;= matrix[i][j] &amp;lt;= 10^5&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * https://leetcode.com/problems/maximum-matrix-sum
 * @param {number[][]} matrix
 * @return {number}
 *//**
 * @param {number[][]} matrix
 * @return {number}
 */

/**
 * @param {number[][]} matrix
 * @return {number}
 */
var maxMatrixSum = function (matrix) {
    // 1차원 배열로 펼쳐서 처리 (가독성을 위해 flat 사용)
    const flatMatrix = matrix.flat();
    
    let numberOfMinus = 0; // 행렬 내 음수(-)의 총 개수
    let sum = 0;           // 모든 요소의 절댓값 합
    let minimunABS = Infinity; // 가장 작은 절댓값을 저장 (초기값은 무한대)

    for (let i = 0; i &amp;lt; flatMatrix.length; i++) {
        const val = flatMatrix[i];
        const absNum = Math.abs(val); // 현재 요소의 절댓값
        
        // 1. 모든 숫자를 양수로 가정하고 합산
        sum += absNum;
        
        // 2. 음수의 개수를 카운트
        // 인접한 두 수의 부호를 바꾸는 연산을 반복하면, 
        // 음수 부호를 원하는 위치로 이동시키거나 짝수개의 음수를 제거할 수 있음
        if (val &amp;lt; 0) numberOfMinus++;
        
        // 3. 행렬에서 절댓값이 가장 작은 숫자 찾기
        // 만약 음수가 홀수개라면, 전체 합에서 이 가장 작은 값을 음수로 남겨야 손해가 최소화됨
        if (minimunABS &amp;gt; absNum) minimunABS = absNum;
    }

    /**
     * 결과 반환 로직:
     * - 음수가 짝수개(numberOfMinus % 2 === 0): 
     * 모든 음수를 연산을 통해 양수로 바꿀 수 있으므로 전체 합(sum) 반환.
     * * - 음수가 홀수개: 
     * 무조건 한 개의 숫자는 음수로 남음. 가장 작은 숫자(minimunABS)를 음수로 선택.
     * 이미 sum에는 minimunABS가 양수로 더해져 있으므로, 
     * 이를 음수로 바꾸기 위해 sum에서 해당 값을 두 번 뺌 (sum - 2 * min).
     */
    return numberOfMinus % 2 === 0 ? sum : sum - (minimunABS * 2);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&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;const flatMatrix = matrix.flat(); 대신에 2중 for 문을 사용하면 100% 가능해짐.&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;1192&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MIHxq/dJMb99SA1Tu/bMQ4rR3Raxmx8KNRSjvjJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MIHxq/dJMb99SA1Tu/bMQ4rR3Raxmx8KNRSjvjJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MIHxq/dJMb99SA1Tu/bMQ4rR3Raxmx8KNRSjvjJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMIHxq%2FdJMb99SA1Tu%2FbMQ4rR3Raxmx8KNRSjvjJk%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;1192&quot; height=&quot;658&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/124</guid>
      <comments>https://zzumbong.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 5 Jan 2026 12:36:34 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 66. Plus One</title>
      <link>https://zzumbong.tistory.com/123</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [ &lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt; &lt;/span&gt; ] &lt;span style=&quot;color: #409d00;&quot;&gt;Easy&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You&amp;nbsp;are&amp;nbsp;given&amp;nbsp;a&amp;nbsp;large&amp;nbsp;integer&amp;nbsp;represented&amp;nbsp;as&amp;nbsp;an&amp;nbsp;integer&amp;nbsp;array&amp;nbsp;digits,&amp;nbsp;where&amp;nbsp;each&amp;nbsp;digits[i]&amp;nbsp;is&amp;nbsp;the&amp;nbsp;ith&amp;nbsp;digit&amp;nbsp;of&amp;nbsp;the&amp;nbsp;integer.&amp;nbsp;The&amp;nbsp;digits&amp;nbsp;are&amp;nbsp;ordered&amp;nbsp;from&amp;nbsp;most&amp;nbsp;significant&amp;nbsp;to&amp;nbsp;least&amp;nbsp;significant&amp;nbsp;in&amp;nbsp;left-to-right&amp;nbsp;order.&amp;nbsp;The&amp;nbsp;large&amp;nbsp;integer&amp;nbsp;does&amp;nbsp;not&amp;nbsp;contain&amp;nbsp;any&amp;nbsp;leading&amp;nbsp;0's.&amp;nbsp;Increment&amp;nbsp;the&amp;nbsp;large&amp;nbsp;integer&amp;nbsp;by&amp;nbsp;one&amp;nbsp;and&amp;nbsp;return&amp;nbsp;the&amp;nbsp;resulting&amp;nbsp;array&amp;nbsp;of&amp;nbsp;digits.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: digits = [1,2,3] &lt;br /&gt;Output: [1,2,4] &lt;br /&gt;Explanation: The array represents the integer 123. Incrementing by one gives 123 + 1 = 124. &lt;br /&gt;Thus, the result should be [1,2,4].&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: digits = [4,3,2,1] &lt;br /&gt;Output: [4,3,2,2] &lt;br /&gt;Explanation: The array represents the integer 4321. Incrementing by one gives 4321 + 1 = 4322. &lt;br /&gt;Thus, the result should be [4,3,2,2].&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 3:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: digits = [9] &lt;br /&gt;Output: [1,0] &lt;br /&gt;Explanation: The array represents the integer 9. Incrementing by one gives 9 + 1 = 10. &lt;br /&gt;Thus, the result should be [1,0].&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 &amp;lt;= digits.length &amp;lt;= 100&lt;/li&gt;
&lt;li&gt;0 &amp;lt;= digits[i] &amp;lt;= 9&lt;/li&gt;
&lt;li&gt;digits does not contain any leading 0's.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * https://leetcode.com/problems/plus-one
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function (digits) {
    for (let i = digits.length - 1; i &amp;gt;= 0; i--) {
        digits[i]++;

        if (digits[i] &amp;lt; 10) {
            return digits;
        }
        digits[i] = 0;
    }
    digits.unshift(1);
    return digits;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처음엔 reduce로 모든 배열을 더해서 숫자 -&amp;gt; 스트링으로 변경 후 -&amp;gt; 다시 배열 변경 하려고 했는데 숫자가 100 자리 이상이라 오류가 났음.&lt;/li&gt;
&lt;li&gt;배열을 직접 건들이는 방식으로 해결.&lt;/li&gt;
&lt;/ul&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-origin-width=&quot;1500&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMz8ww/dJMcaaxbqxK/B0YgkTHkppHYGlaizoFsr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMz8ww/dJMcaaxbqxK/B0YgkTHkppHYGlaizoFsr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMz8ww/dJMcaaxbqxK/B0YgkTHkppHYGlaizoFsr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMz8ww%2FdJMcaaxbqxK%2FB0YgkTHkppHYGlaizoFsr1%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;1500&quot; height=&quot;854&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/123</guid>
      <comments>https://zzumbong.tistory.com/123#entry123comment</comments>
      <pubDate>Fri, 2 Jan 2026 08:27:28 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 1970. Last Day Where You Can Still Cross</title>
      <link>https://zzumbong.tistory.com/122</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [   ] &lt;span style=&quot;color: #ee2323;&quot;&gt;Hard&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;There is a 1-based binary matrix where 0 represents land and 1 represents water. You are given integers row and col representing the number of rows and columns in the matrix, respectively.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Initially on day 0, the entire matrix is land. However, each day a new cell becomes flooded with water. You are given a 1-based 2D array cells, where cells[i] = [ri, ci] represents that on the ith day, the cell on the rith row and cith column (1-based coordinates) will be covered with water (i.e., changed to 1).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You want to find the last day that it is possible to walk from the top to the bottom by only walking on land cells. You can start from any cell in the top row and end at any cell in the bottom row. You can only travel in the four cardinal directions (left, right, up, and down).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Return the last day where it is possible to walk from the top to the bottom by only walking on land cells.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  마지막으로 건널 수 있는 날 찾기 (Last Day to Walk Across)&lt;br /&gt;&lt;br /&gt;0은 땅을 나타내고 1은 물을 나타내는 '1-기반(1-based)' 이진 행렬이 있습니다. 행렬의 행과 열의 개수를 나타내는 정수 row와 col이 주어집니다.&lt;br /&gt;처음 0일차에는 행렬의 전체가 땅입니다. 하지만 매일 새로운 칸 하나가 물에 잠기게 됩니다. 당신에게는 '1-기반' 2차원 배열 cells가 주어지며, 여기서 cells[i] = [ri, ci]는 $i$번째 날에 $r_i$행 $c_i$열(1-기반 좌표)에 있는 칸이 물로 덮임(즉, 1로 변경됨)을 의미합니다.&lt;br /&gt;당신은 오직 땅(0)으로만 이동하여 맨 윗줄(top)에서 맨 아랫줄(bottom)까지 걸어갈 수 있는 마지막 날이 언제인지 찾고 싶습니다. 맨 윗줄의 어느 칸에서든 시작할 수 있으며, 맨 아랫줄의 어느 칸에서든 끝낼 수 있습니다. 이동은 오직 상, 하, 좌, 우 네 방향으로만 가능합니다.&lt;br /&gt;땅으로만 걸어서 맨 윗줄에서 맨 아랫줄까지 횡단할 수 있는 마지막 날을 반환하세요.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfzXz1/dJMcaiu9Sia/xLs4KghZj5jHEHdxHlILAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfzXz1/dJMcaiu9Sia/xLs4KghZj5jHEHdxHlILAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfzXz1/dJMcaiu9Sia/xLs4KghZj5jHEHdxHlILAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfzXz1%2FdJMcaiu9Sia%2FxLs4KghZj5jHEHdxHlILAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;162&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;row&amp;nbsp;=&amp;nbsp;2,&amp;nbsp;col&amp;nbsp;=&amp;nbsp;2,&amp;nbsp;cells&amp;nbsp;=&amp;nbsp;[[1,1],[2,1],[1,2],[2,2]]&amp;nbsp;&lt;br /&gt;Output: 2 &lt;br /&gt;Explanation: The above image depicts how the matrix changes each day starting from day 0.&lt;br /&gt;The last day where it is possible to cross from top to bottom is on day 2.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beVsls/dJMcac2MUT2/XktxnA3PCMLg4tsncB1xNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beVsls/dJMcac2MUT2/XktxnA3PCMLg4tsncB1xNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beVsls/dJMcac2MUT2/XktxnA3PCMLg4tsncB1xNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeVsls%2FdJMcac2MUT2%2FXktxnA3PCMLg4tsncB1xNk%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;504&quot; height=&quot;178&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;row&amp;nbsp;=&amp;nbsp;2,&amp;nbsp;col&amp;nbsp;=&amp;nbsp;2,&amp;nbsp;cells&amp;nbsp;=&amp;nbsp;[[1,1],[1,2],[2,1],[2,2]]&amp;nbsp;&lt;br /&gt;Output:&amp;nbsp;1&amp;nbsp;&lt;br /&gt;Explanation:&amp;nbsp;The&amp;nbsp;above&amp;nbsp;image&amp;nbsp;depicts&amp;nbsp;how&amp;nbsp;the&amp;nbsp;matrix&amp;nbsp;changes&amp;nbsp;each&amp;nbsp;day&amp;nbsp;starting&amp;nbsp;from&amp;nbsp;day&amp;nbsp;0.&amp;nbsp;&lt;br /&gt;The&amp;nbsp;last&amp;nbsp;day&amp;nbsp;where&amp;nbsp;it&amp;nbsp;is&amp;nbsp;possible&amp;nbsp;to&amp;nbsp;cross&amp;nbsp;from&amp;nbsp;top&amp;nbsp;to&amp;nbsp;bottom&amp;nbsp;is&amp;nbsp;on&amp;nbsp;day&amp;nbsp;1.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 3:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beaSnS/dJMcac2MUTX/N0bdgo5kee4OuZc0mmz3x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beaSnS/dJMcac2MUTX/N0bdgo5kee4OuZc0mmz3x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beaSnS/dJMcac2MUTX/N0bdgo5kee4OuZc0mmz3x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeaSnS%2FdJMcac2MUTX%2FN0bdgo5kee4OuZc0mmz3x1%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;666&quot; height=&quot;167&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;row&amp;nbsp;=&amp;nbsp;3,&amp;nbsp;col&amp;nbsp;=&amp;nbsp;3,&amp;nbsp;cells&amp;nbsp;=&amp;nbsp;[[1,2],[2,1],[3,3],[2,2],[1,1],[1,3],[2,3],[3,2],[3,1]]&amp;nbsp;&lt;br /&gt;Output:&amp;nbsp;3&amp;nbsp;&lt;br /&gt;Explanation:&amp;nbsp;The&amp;nbsp;above&amp;nbsp;image&amp;nbsp;depicts&amp;nbsp;how&amp;nbsp;the&amp;nbsp;matrix&amp;nbsp;changes&amp;nbsp;each&amp;nbsp;day&amp;nbsp;starting&amp;nbsp;from&amp;nbsp;day&amp;nbsp;0.&amp;nbsp;&lt;br /&gt;The&amp;nbsp;last&amp;nbsp;day&amp;nbsp;where&amp;nbsp;it&amp;nbsp;is&amp;nbsp;possible&amp;nbsp;to&amp;nbsp;cross&amp;nbsp;from&amp;nbsp;top&amp;nbsp;to&amp;nbsp;bottom&amp;nbsp;is&amp;nbsp;on&amp;nbsp;day&amp;nbsp;3.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2&amp;nbsp;&amp;lt;=&amp;nbsp;row,&amp;nbsp;col&amp;nbsp;&amp;lt;=&amp;nbsp;2&amp;nbsp;*&amp;nbsp;104&amp;nbsp;&lt;/li&gt;
&lt;li&gt;4&amp;nbsp;&amp;lt;=&amp;nbsp;row&amp;nbsp;*&amp;nbsp;col&amp;nbsp;&amp;lt;=&amp;nbsp;2&amp;nbsp;*&amp;nbsp;104&amp;nbsp;&lt;/li&gt;
&lt;li&gt;cells.length&amp;nbsp;==&amp;nbsp;row&amp;nbsp;*&amp;nbsp;col&amp;nbsp;&lt;/li&gt;
&lt;li&gt;1&amp;nbsp;&amp;lt;=&amp;nbsp;ri&amp;nbsp;&amp;lt;=&amp;nbsp;row&amp;nbsp;&lt;/li&gt;
&lt;li&gt;1&amp;nbsp;&amp;lt;=&amp;nbsp;ci&amp;nbsp;&amp;lt;=&amp;nbsp;col&amp;nbsp;&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;the&amp;nbsp;values&amp;nbsp;of&amp;nbsp;cells&amp;nbsp;are&amp;nbsp;unique.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * https://leetcode.com/problems/last-day-where-you-can-still-cross
 * @param {number} row - 전체 행의 수
 * @param {number} col - 전체 열의 수
 * @param {number[][]} cells - 매일 물에 잠기는 좌표 리스트 (1-based)
 * @return {number} - 건널 수 있는 마지막 날짜
 */
var latestDayToCross = function (row, col, cells) {
    let answerDay = 0;
    // 이진 탐색을 위한 범위 설정 (0일부터 마지막 날까지)
    let left = 0;
    let right = cells.length - 1;

    /**
     * 특정 날짜(day)에 위에서 아래로 건널 수 있는지 확인하는 함수 (BFS)
     */
    const canCross = (day) =&amp;gt; {
        // 1. 해당 날짜의 격자 상태 생성 (0: 땅, 1: 물)
        const grid = Array.from({ length: row }, () =&amp;gt; new Array(col).fill(0));
        
        // 2. 0일부터 day일까지의 cells를 바탕으로 격자에 물 채우기
        // i &amp;lt; day 이므로, day가 3이면 cells[0], [1], [2] (3일치)를 채움
        for (let i = 0; i &amp;lt; day; i++) {
            const [r, c] = cells[i];
            grid[r - 1][c - 1] = 1; // 1-based 좌표를 0-based 인덱스로 변환
        }

        // 3. BFS 탐색 준비
        const queue = [];
        const visited = Array.from({ length: row }, () =&amp;gt; new Array(col).fill(false));
        
        // 4. 시작 지점 설정: 맨 윗줄(row 0)에서 땅(0)인 곳을 모두 큐에 삽입
        for (let i = 0; i &amp;lt; col; i++) {
            if (grid[0][i] === 0) {
                queue.push([0, i]);
                visited[0][i] = true; // 중복 방문 방지
            }
        }

        // 5. 탐색 시작 (상하좌우 방향 설정)
        const direction = [[0, 1], [0, -1], [1, 0], [-1, 0]]; 
        
        while (queue.length &amp;gt; 0) {
            const [curR, curC] = queue.shift();
            
            // 목적지 도착: 맨 아랫줄(row - 1)에 도달하면 건너기 성공
            if (curR === row - 1) return true; 

            for (const [dirR, dirC] of direction) {
                const nextR = curR + dirR;
                const nextC = curC + dirC;
                
                // 격자 범위 내에 있고, 물이 아니며(0), 아직 방문하지 않은 경우만 이동
                if (nextR &amp;gt;= 0 &amp;amp;&amp;amp; nextC &amp;gt;= 0 &amp;amp;&amp;amp; nextR &amp;lt; row &amp;amp;&amp;amp; nextC &amp;lt; col &amp;amp;&amp;amp;
                    grid[nextR][nextC] === 0 &amp;amp;&amp;amp; !visited[nextR][nextC]) {
                    
                    visited[nextR][nextC] = true; // 방문 표시 (중요: nextR, nextC 사용)
                    queue.push([nextR, nextC]); // 다음 탐색 후보로 큐에 추가
                }
            }
        }

        // 모든 경로를 탐색했으나 아랫줄에 도달하지 못한 경우
        return false;
    }

    /**
     * 이진 탐색(Binary Search) 수행
     * 매일 BFS를 돌리면 느리기 때문에, '건널 수 있는 날'의 경계선을 Up/Down 게임처럼 탐색
     */
    while (left &amp;lt;= right) {
        // 중간 날짜(mid)를 선택
        const mid = Math.floor((left + right) / 2);
        
        if (canCross(mid)) {
            // 해당 날짜에 건널 수 있다면, 더 늦은 날짜가 가능한지 확인
            answerDay = mid; // 현재 날짜를 정답 후보로 저장
            left = mid + 1;  // 범위를 뒤쪽(더 큰 날짜)으로 좁힘
        } else {
            // 해당 날짜에 건널 수 없다면, 너무 많이 잠긴 것이므로 더 앞선 날짜 확인
            right = mid - 1; // 범위를 앞쪽(더 작은 날짜)으로 좁힘
        }
    }
    
    return answerDay;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처음엔 day 1 -&amp;gt; day end 까지 순회하려고 했는데, 너무 오래 걸릴 것 같아서 바이너리 서치로 변경&lt;/li&gt;
&lt;li&gt;BFS + 바이너리 서치 2가지 조합이 필요한 문제. 역시 Hard는 달라&lt;/li&gt;
&lt;li&gt;최적화는 못하겠다. 너무 힘듦.. 이거 1시간 짜리 코테에서 나오면 바로 맨붕인데 ㅋㅋㅋ&lt;/li&gt;
&lt;li&gt;최소 4시간 급 코테에서 1문제 정도 등장할 가능성이 있어보임..&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;1262&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJVBMh/dJMcahQBi4e/bMoJxXk3JkUsxKb11mKbXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJVBMh/dJMcahQBi4e/bMoJxXk3JkUsxKb11mKbXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJVBMh/dJMcahQBi4e/bMoJxXk3JkUsxKb11mKbXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJVBMh%2FdJMcahQBi4e%2FbMoJxXk3JkUsxKb11mKbXk%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;1262&quot; height=&quot;660&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/122</guid>
      <comments>https://zzumbong.tistory.com/122#entry122comment</comments>
      <pubDate>Wed, 31 Dec 2025 13:24:19 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 3074. Apple Redistribution into Boxes</title>
      <link>https://zzumbong.tistory.com/121</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [ &lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt; &lt;/span&gt; ] &lt;span style=&quot;color: #409d00;&quot;&gt;Easy&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You&amp;nbsp;are&amp;nbsp;given&amp;nbsp;an&amp;nbsp;array&amp;nbsp;apple&amp;nbsp;of&amp;nbsp;size&amp;nbsp;n&amp;nbsp;and&amp;nbsp;an&amp;nbsp;array&amp;nbsp;capacity&amp;nbsp;of&amp;nbsp;size&amp;nbsp;m.&amp;nbsp;There&amp;nbsp;are&amp;nbsp;n&amp;nbsp;packs&amp;nbsp;where&amp;nbsp;the&amp;nbsp;ith&amp;nbsp;pack&amp;nbsp;contains&amp;nbsp;apple[i]&amp;nbsp;apples.&amp;nbsp;There&amp;nbsp;are&amp;nbsp;m&amp;nbsp;boxes&amp;nbsp;as&amp;nbsp;well,&amp;nbsp;and&amp;nbsp;the&amp;nbsp;ith&amp;nbsp;box&amp;nbsp;has&amp;nbsp;a&amp;nbsp;capacity&amp;nbsp;of&amp;nbsp;capacity[i]&amp;nbsp;apples.&amp;nbsp;Return&amp;nbsp;the&amp;nbsp;minimum&amp;nbsp;number&amp;nbsp;of&amp;nbsp;boxes&amp;nbsp;you&amp;nbsp;need&amp;nbsp;to&amp;nbsp;select&amp;nbsp;to&amp;nbsp;redistribute&amp;nbsp;these&amp;nbsp;n&amp;nbsp;packs&amp;nbsp;of&amp;nbsp;apples&amp;nbsp;into&amp;nbsp;boxes.&amp;nbsp;Note&amp;nbsp;that,&amp;nbsp;apples&amp;nbsp;from&amp;nbsp;the&amp;nbsp;same&amp;nbsp;pack&amp;nbsp;can&amp;nbsp;be&amp;nbsp;distributed&amp;nbsp;into&amp;nbsp;different&amp;nbsp;boxes.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;당신에게는 크기가 n인 apple 배열과 크기가 m인 capacity 배열이 주어집니다.&lt;br /&gt;n개의 팩이 있으며, i번째 팩에는 apple[i]개의 사과가 들어있습니다. 또한 m개의 상자가 있으며, i번째 상자는 capacity[i]개의 사과를 담을 수 있는 용량을 가지고 있습니다.&lt;br /&gt;이 n팩의 사과들을 상자들에 다시 나누어 담기 위해 선택해야 하는 상자의 최소 개수를 반환하세요.&lt;br /&gt;단, 같은 팩에 들어있던 사과들이라도 서로 다른 상자에 나누어서 담을 수 있다는 점에 유의하세요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;어렵게 설명 되어있는데, 사과의 Array는 의미가 없음. 총 사과가 몇개고, 몇개의 상자(capacity)로 담을 수 있느냐가 문제.&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;apple&amp;nbsp;=&amp;nbsp;[1,3,2],&amp;nbsp;capacity&amp;nbsp;=&amp;nbsp;[4,3,1,5,2]&lt;br /&gt;Output:&amp;nbsp;2&amp;nbsp;Explanation:&amp;nbsp;We&amp;nbsp;will&amp;nbsp;use&amp;nbsp;boxes&amp;nbsp;with&amp;nbsp;capacities&amp;nbsp;4&amp;nbsp;and&amp;nbsp;5.&amp;nbsp;&lt;br /&gt;It&amp;nbsp;is&amp;nbsp;possible&amp;nbsp;to&amp;nbsp;distribute&amp;nbsp;the&amp;nbsp;apples&amp;nbsp;as&amp;nbsp;the&amp;nbsp;total&amp;nbsp;capacity&amp;nbsp;is&amp;nbsp;greater&amp;nbsp;than&amp;nbsp;or&amp;nbsp;equal&amp;nbsp;to&amp;nbsp;the&amp;nbsp;total&amp;nbsp;number&amp;nbsp;of&amp;nbsp;apples.&amp;nbsp;&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input: apple = [5,5,5], capacity = [2,4,2,7] &lt;br /&gt;Output: 4 Explanation: We will need to use all the boxes.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1&amp;nbsp;&amp;lt;=&amp;nbsp;n&amp;nbsp;==&amp;nbsp;apple.length&amp;nbsp;&amp;lt;=&amp;nbsp;50&amp;nbsp;&lt;/li&gt;
&lt;li&gt;1&amp;nbsp;&amp;lt;=&amp;nbsp;m&amp;nbsp;==&amp;nbsp;capacity.length&amp;nbsp;&amp;lt;=&amp;nbsp;50&amp;nbsp;&lt;/li&gt;
&lt;li&gt;1&amp;nbsp;&amp;lt;=&amp;nbsp;apple[i],&amp;nbsp;capacity[i]&amp;nbsp;&amp;lt;=&amp;nbsp;50&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The&amp;nbsp;input&amp;nbsp;is&amp;nbsp;generated&amp;nbsp;such&amp;nbsp;that&amp;nbsp;it's&amp;nbsp;possible&amp;nbsp;to&amp;nbsp;redistribute&amp;nbsp;packs&amp;nbsp;of&amp;nbsp;apples&amp;nbsp;into&amp;nbsp;boxes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사과나 용량 배열은 숫자가 작구나를 파악하면 굿&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * https://leetcode.com/problems/apple-redistribution-into-boxes
 * @param {number[]} apple
 * @param {number[]} capacity
 * @return {number}
 */
 
// 처음 푼 문제
var minimumBoxes = function(apple, capacity) {
    const apples = apple.reduce((cur, acc) =&amp;gt; acc += cur, 0)
    let sum = 0;
    let answer = 0;
    const sorted = capacity.sort((a, b) =&amp;gt; b - a);
    
    for(let i = 0; i &amp;lt; sorted.length; i++){
        sum += sorted[i];
        if(sum &amp;gt;= apples) {
            answer = (i+1);
            break;
        }
    }
    return answer;
};


// While과 sum으로 더하는 방식이 빼는 방식으로 최적화
var minimumBoxes = function(apple, capacity) {
    let apples = apple.reduce((cur, acc) =&amp;gt; acc + cur, 0)
    capacity.sort((a, b) =&amp;gt; b - a);
    
    let idx = 0;
    while(apples &amp;gt; 0) {
        apples -= capacity[idx++]
    }
    return idx;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코테에서 나오면 5분컷 내야하는 문제긴한데, 좀 더 걸림&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;1696&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkcHMy/dJMcafeaQYW/ksqpv8QgNnwh24I0EgxY9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkcHMy/dJMcafeaQYW/ksqpv8QgNnwh24I0EgxY9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkcHMy/dJMcafeaQYW/ksqpv8QgNnwh24I0EgxY9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkcHMy%2FdJMcafeaQYW%2Fksqpv8QgNnwh24I0EgxY9K%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;1696&quot; height=&quot;968&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;968&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/121</guid>
      <comments>https://zzumbong.tistory.com/121#entry121comment</comments>
      <pubDate>Mon, 29 Dec 2025 16:39:40 +0900</pubDate>
    </item>
    <item>
      <title>[leetCode/JS] 756. Pyramid Transition Matrix</title>
      <link>https://zzumbong.tistory.com/120</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [ &lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a0a23;&quot;&gt; &lt;/span&gt;&lt;/span&gt; ] &lt;span style=&quot;color: #f3c000;&quot;&gt;Medium&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You&amp;nbsp;are&amp;nbsp;stacking&amp;nbsp;blocks&amp;nbsp;to&amp;nbsp;form&amp;nbsp;a&amp;nbsp;pyramid.&amp;nbsp;Each&amp;nbsp;block&amp;nbsp;has&amp;nbsp;a&amp;nbsp;color,&amp;nbsp;which&amp;nbsp;is&amp;nbsp;represented&amp;nbsp;by&amp;nbsp;a&amp;nbsp;single&amp;nbsp;letter.&amp;nbsp;Each&amp;nbsp;row&amp;nbsp;of&amp;nbsp;blocks&amp;nbsp;contains&amp;nbsp;one&amp;nbsp;less&amp;nbsp;block&amp;nbsp;than&amp;nbsp;the&amp;nbsp;row&amp;nbsp;beneath&amp;nbsp;it&amp;nbsp;and&amp;nbsp;is&amp;nbsp;centered&amp;nbsp;on&amp;nbsp;top.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;To&amp;nbsp;make&amp;nbsp;the&amp;nbsp;pyramid&amp;nbsp;aesthetically&amp;nbsp;pleasing,&amp;nbsp;there&amp;nbsp;are&amp;nbsp;only&amp;nbsp;specific&amp;nbsp;triangular&amp;nbsp;patterns&amp;nbsp;that&amp;nbsp;are&amp;nbsp;allowed.&amp;nbsp;A&amp;nbsp;triangular&amp;nbsp;pattern&amp;nbsp;consists&amp;nbsp;of&amp;nbsp;a&amp;nbsp;single&amp;nbsp;block&amp;nbsp;stacked&amp;nbsp;on&amp;nbsp;top&amp;nbsp;of&amp;nbsp;two&amp;nbsp;blocks.&amp;nbsp;The&amp;nbsp;patterns&amp;nbsp;are&amp;nbsp;given&amp;nbsp;as&amp;nbsp;a&amp;nbsp;list&amp;nbsp;of&amp;nbsp;three-letter&amp;nbsp;strings&amp;nbsp;allowed,&amp;nbsp;where&amp;nbsp;the&amp;nbsp;first&amp;nbsp;two&amp;nbsp;characters&amp;nbsp;of&amp;nbsp;a&amp;nbsp;pattern&amp;nbsp;represent&amp;nbsp;the&amp;nbsp;left&amp;nbsp;and&amp;nbsp;right&amp;nbsp;bottom&amp;nbsp;blocks&amp;nbsp;respectively,&amp;nbsp;and&amp;nbsp;the&amp;nbsp;third&amp;nbsp;character&amp;nbsp;is&amp;nbsp;the&amp;nbsp;top&amp;nbsp;block.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;For&amp;nbsp;example,&amp;nbsp;&quot;ABC&quot;&amp;nbsp;represents&amp;nbsp;a&amp;nbsp;triangular&amp;nbsp;pattern&amp;nbsp;with&amp;nbsp;a&amp;nbsp;'C'&amp;nbsp;block&amp;nbsp;stacked&amp;nbsp;on&amp;nbsp;top&amp;nbsp;of&amp;nbsp;an&amp;nbsp;'A'&amp;nbsp;(left)&amp;nbsp;and&amp;nbsp;'B'&amp;nbsp;(right)&amp;nbsp;block.&amp;nbsp;Note&amp;nbsp;that&amp;nbsp;this&amp;nbsp;is&amp;nbsp;different&amp;nbsp;from&amp;nbsp;&quot;BAC&quot;&amp;nbsp;where&amp;nbsp;'B'&amp;nbsp;is&amp;nbsp;on&amp;nbsp;the&amp;nbsp;left&amp;nbsp;bottom&amp;nbsp;and&amp;nbsp;'A'&amp;nbsp;is&amp;nbsp;on&amp;nbsp;the&amp;nbsp;right&amp;nbsp;bottom.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You&amp;nbsp;start&amp;nbsp;with&amp;nbsp;a&amp;nbsp;bottom&amp;nbsp;row&amp;nbsp;of&amp;nbsp;blocks&amp;nbsp;bottom,&amp;nbsp;given&amp;nbsp;as&amp;nbsp;a&amp;nbsp;single&amp;nbsp;string,&amp;nbsp;that&amp;nbsp;you&amp;nbsp;must&amp;nbsp;use&amp;nbsp;as&amp;nbsp;the&amp;nbsp;base&amp;nbsp;of&amp;nbsp;the&amp;nbsp;pyramid.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Given&amp;nbsp;bottom&amp;nbsp;and&amp;nbsp;allowed,&amp;nbsp;return&amp;nbsp;true&amp;nbsp;if&amp;nbsp;you&amp;nbsp;can&amp;nbsp;build&amp;nbsp;the&amp;nbsp;pyramid&amp;nbsp;all&amp;nbsp;the&amp;nbsp;way&amp;nbsp;to&amp;nbsp;the&amp;nbsp;top&amp;nbsp;such&amp;nbsp;that&amp;nbsp;every&amp;nbsp;triangular&amp;nbsp;pattern&amp;nbsp;in&amp;nbsp;the&amp;nbsp;pyramid&amp;nbsp;is&amp;nbsp;in&amp;nbsp;allowed,&amp;nbsp;or&amp;nbsp;false&amp;nbsp;otherwise.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;당신은 블록을 쌓아 피라미드를 만들고 있습니다. 각 블록은 하나의 알파벳 문자로 표시되는 색깔을 가지고 있습니다. 각 블록 층은 바로 아래층보다 블록이 하나 적으며, 아래층의 중앙 위에 놓입니다.&lt;br /&gt;피라미드를 미적으로 아름답게 만들기 위해 허용되는 특정한 '삼각형 패턴'이 정해져 있습니다. 삼각형 패턴은 두 개의 블록 위에 하나의 블록을 쌓는 방식입니다. 이 패턴들은 allowed라는 세 글자 문자열 리스트로 제공되는데, 처음 두 글자는 각각 아래층의 왼쪽과 오른쪽 블록을 나타내고, 세 번째 글자는 그 위에 쌓이는 블록을 나타냅니다.&lt;br /&gt;예를 들어 &quot;ABC&quot;라는 패턴은 왼쪽 'A'와 오른쪽 'B' 블록 위에 'C' 블록을 쌓는 것을 의미합니다. 이는 'B'가 왼쪽이고 'A'가 오른쪽인 &quot;BAC&quot;와는 다르다는 점에 유의하세요.&lt;br /&gt;당신은 bottom이라는 문자열로 주어진 맨 아랫줄 블록들을 피라미드의 기초로 사용해야 합니다.&lt;br /&gt;bottom과 allowed가 주어졌을 때, 피라미드의 모든 삼각형 패턴이 allowed에 포함된 규칙을 따르면서 꼭대기까지 피라미드를 완성할 수 있으면 true를, 그렇지 않으면 false를 반환하세요.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;주어진 바닥(bottom)에서 시작해서, 허용된 규칙(allowed)에 맞는 블록들만 쌓아 올려 결국 꼭대기(블록 1개)까지 도달할 수 있는지 묻는 문제&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 1:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ltSQm/dJMcafFePaC/xmNWgDBik1F2HecdbUFCWk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ltSQm/dJMcafFePaC/xmNWgDBik1F2HecdbUFCWk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ltSQm/dJMcafFePaC/xmNWgDBik1F2HecdbUFCWk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FltSQm%2FdJMcafFePaC%2FxmNWgDBik1F2HecdbUFCWk%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;944&quot; height=&quot;365&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;bottom&amp;nbsp;=&amp;nbsp;&quot;BCD&quot;,&amp;nbsp;allowed&amp;nbsp;=&amp;nbsp;[&quot;BCC&quot;,&quot;CDE&quot;,&quot;CEA&quot;,&quot;FFF&quot;]&amp;nbsp;&lt;br /&gt;Output:&amp;nbsp;true&amp;nbsp;&lt;br /&gt;Explanation:&amp;nbsp;The&amp;nbsp;allowed&amp;nbsp;triangular&amp;nbsp;patterns&amp;nbsp;are&amp;nbsp;shown&amp;nbsp;on&amp;nbsp;the&amp;nbsp;right.&amp;nbsp;Starting&amp;nbsp;from&amp;nbsp;the&amp;nbsp;bottom&amp;nbsp;(level&amp;nbsp;3),&amp;nbsp;&lt;br /&gt;we&amp;nbsp;can&amp;nbsp;build&amp;nbsp;&quot;CE&quot;&amp;nbsp;on&amp;nbsp;level&amp;nbsp;2&amp;nbsp;and&amp;nbsp;then&amp;nbsp;build&amp;nbsp;&quot;A&quot;&amp;nbsp;on&amp;nbsp;level&amp;nbsp;1.&amp;nbsp;There&amp;nbsp;are&amp;nbsp;three&amp;nbsp;triangular&amp;nbsp;patterns&amp;nbsp;in&amp;nbsp;the&amp;nbsp;pyramid,&amp;nbsp;&lt;br /&gt;which&amp;nbsp;are&amp;nbsp;&quot;BCC&quot;,&amp;nbsp;&quot;CDE&quot;,&amp;nbsp;and&amp;nbsp;&quot;CEA&quot;.&amp;nbsp;All&amp;nbsp;are&amp;nbsp;allowed.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;Example 2:&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wii3N/dJMcafysCgr/qxTT3UZ0DktGK2K3qUqNF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wii3N/dJMcafysCgr/qxTT3UZ0DktGK2K3qUqNF0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wii3N/dJMcafysCgr/qxTT3UZ0DktGK2K3qUqNF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwii3N%2FdJMcafysCgr%2FqxTT3UZ0DktGK2K3qUqNF0%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;944&quot; height=&quot;565&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;565&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Input:&amp;nbsp;bottom&amp;nbsp;=&amp;nbsp;&quot;AAAA&quot;,&amp;nbsp;allowed&amp;nbsp;=&amp;nbsp;[&quot;AAB&quot;,&quot;AAC&quot;,&quot;BCD&quot;,&quot;BBE&quot;,&quot;DEF&quot;]&amp;nbsp;&lt;br /&gt;Output:&amp;nbsp;false&amp;nbsp;Explanation:&amp;nbsp;The&amp;nbsp;allowed&amp;nbsp;triangular&amp;nbsp;patterns&amp;nbsp;are&amp;nbsp;shown&amp;nbsp;on&amp;nbsp;the&amp;nbsp;right.&amp;nbsp;&lt;br /&gt;Starting&amp;nbsp;from&amp;nbsp;the&amp;nbsp;bottom&amp;nbsp;(level&amp;nbsp;4),&amp;nbsp;there&amp;nbsp;are&amp;nbsp;multiple&amp;nbsp;ways&amp;nbsp;to&amp;nbsp;build&amp;nbsp;level&amp;nbsp;3,&amp;nbsp;but&amp;nbsp;trying&amp;nbsp;all&amp;nbsp;the&amp;nbsp;possibilites,&amp;nbsp;you&amp;nbsp;will&amp;nbsp;get&amp;nbsp;always&amp;nbsp;stuck&amp;nbsp;before&amp;nbsp;building&amp;nbsp;level&amp;nbsp;1.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Constraints&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2&amp;nbsp;&amp;lt;=&amp;nbsp;bottom.length&amp;nbsp;&amp;lt;=&amp;nbsp;6&amp;nbsp;&lt;/li&gt;
&lt;li&gt;0&amp;nbsp;&amp;lt;=&amp;nbsp;allowed.length&amp;nbsp;&amp;lt;=&amp;nbsp;216&amp;nbsp;&lt;/li&gt;
&lt;li&gt;allowed[i].length&amp;nbsp;==&amp;nbsp;3&amp;nbsp;The&amp;nbsp;letters&amp;nbsp;in&amp;nbsp;all&amp;nbsp;input&amp;nbsp;strings&amp;nbsp;are&amp;nbsp;from&amp;nbsp;the&amp;nbsp;set&amp;nbsp;{'A',&amp;nbsp;'B',&amp;nbsp;'C',&amp;nbsp;'D',&amp;nbsp;'E',&amp;nbsp;'F'}.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;All&amp;nbsp;the&amp;nbsp;values&amp;nbsp;of&amp;nbsp;allowed&amp;nbsp;are&amp;nbsp;unique.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내 솔루션&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;층별 재귀와 다음 피라미드를 만드는 재귀를 2개 만들어야 한다는 생각을 하는게 정말 오래 걸렸다.&lt;/li&gt;
&lt;li&gt;AAAA의 경우의 수가 AA -&amp;gt; B, C 중 1개를 선택해서 만들어야 하는 예시2를 안보여줬다면 영원히 걸렸을 지도 모른다ㅋㅋ&lt;/li&gt;
&lt;li&gt;마지막에 Map()인 memo를 만든다면 속도 100% 달성 가능하다. 아니면 70%대&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1669187862053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * https://leetcode.com/problems/pyramid-transition-matrix
 * @param {string} bottom - 피라미드의 맨 아랫줄 문자열
 * @param {string[]} allowed - 사용 가능한 [왼쪽, 오른쪽, 위] 패턴 리스트
 * @return {boolean} - 꼭대기까지 쌓을 수 있는지 여부
 */
var pyramidTransition = function (bottom, allowed) {
    
    // 1. [데이터 구조화] &quot;왼쪽+오른쪽&quot; 2글자를 키로, 위에 올 수 있는 &quot;후보 문자들&quot;을 배열로 저장
    // 예: &quot;AA&quot;: [&quot;B&quot;, &quot;C&quot;] 형태
    const patterns = allowed.reduce((acc, [left, right, top]) =&amp;gt; {
        const key = left + right;
        acc[key] = (acc[key] || []);
        acc[key].push(top);
        return acc;
    }, {});

    // 2. [메모이제이션] 이미 확인한 '층(문자열)'의 결과를 저장해 중복 계산 방지
    // 키: &quot;AAB&quot;, 값: true/false
    const memo = new Map();

    /**
     * [층 단위 재귀 함수]
     * 현재 층을 완성하고, 그 다음 윗층으로 올라가는 역할
     */
    const canSolve = (curr) =&amp;gt; {
        // 꼭대기(길이 1)에 도달했다면 피라미드 건설 성공!
        if (curr.length === 1) return true;
        
        // 이 층 구성은 이미 검사해본 적이 있다면 저장된 결과를 반환
        if (memo.has(curr)) return memo.get(curr);

        // 현재 층(curr)을 기반으로 다음 층(nextRow)을 한 칸씩 쌓기 시작
        const result = buildRow(curr, &quot;&quot;, 0);
        
        // 현재 층에서 꼭대기까지 갈 수 있는지 여부를 메모리에 기록
        memo.set(curr, result);
        return result;
    }

    /**
     * [칸 단위 재귀 함수] - 백트래킹의 핵심
     * 현재 층(curr)의 블록들을 조합해 바로 윗층(nextRow) 한 줄을 만드는 역할
     * @param {string} curr - 기준이 되는 아래층
     * @param {string} nextRow - 현재 만들어지고 있는 윗층 문자열
     * @param {number} idx - 아래층에서 검사할 블록의 시작 인덱스
     */
    const buildRow = (curr, nextRow, idx) =&amp;gt; {
        // 윗층의 길이가 아래층보다 1 작게 완성되었다면 (한 줄 완성)
        if (nextRow.length === curr.length - 1) {
            // 완성된 줄을 '현재 층'으로 삼아 다시 윗층 쌓기 시도 (층 단위 재귀 호출)
            return canSolve(nextRow);
        }

        // 현재 검사 중인 두 블록(왼쪽, 오른쪽)으로 만들 수 있는 패턴 키 생성
        const key = curr[idx] + curr[idx + 1];
        const currentPattens = patterns[key] || [];

        // 가능한 모든 후보 문자('char')를 하나씩 대입해보며 탐색
        for (const char of currentPattens) {
            // 후보 문자를 윗층에 추가하고, 다음 칸(idx + 1)을 채우러 이동
            if (buildRow(curr, nextRow + char, idx + 1)) {
                // 이 경로로 끝까지 도달하는 데 성공했다면 즉시 true 반환 (가지치기)
                return true;
            }
        }
        
        // 모든 후보를 써봤지만 윗층을 완성할 수 없다면 false
        return false;
    }

    // 맨 처음 바닥(bottom)부터 피라미드 쌓기 시작
    return canSolve(bottom);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;감상평&lt;/h2&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;리트코드 미디엄 수준으로 코테가 나오면 1시간에 1개도 못풀지도 모른다.&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;1098&quot; data-origin-height=&quot;964&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GxhhP/dJMcadtPGIf/k5C2PHwMk9KOkDBfZkHznK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GxhhP/dJMcadtPGIf/k5C2PHwMk9KOkDBfZkHznK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GxhhP/dJMcadtPGIf/k5C2PHwMk9KOkDBfZkHznK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGxhhP%2FdJMcadtPGIf%2Fk5C2PHwMk9KOkDBfZkHznK%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;1098&quot; height=&quot;964&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;964&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>coding test/leetCode</category>
      <author>쭘봉</author>
      <guid isPermaLink="true">https://zzumbong.tistory.com/120</guid>
      <comments>https://zzumbong.tistory.com/120#entry120comment</comments>
      <pubDate>Mon, 29 Dec 2025 11:07:52 +0900</pubDate>
    </item>
  </channel>
</rss>