<?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>Fri, 15 May 2026 07:45:26 +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>행성과 별을 죽이는 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>
    <item>
      <title>[leetCode/JS] 1351. Count Negative Numbers in a Sorted Matrix</title>
      <link>https://zzumbong.tistory.com/119</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;난이도 [   ] Easy&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Given a &lt;code&gt;m x n&lt;/code&gt; matrix &lt;code&gt;grid&lt;/code&gt; which is sorted in non-increasing order both row-wise and column-wise,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;return the number of negative numbers in &lt;code&gt;grid&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;b&gt;non-increasing order&lt;/b&gt;는 &lt;b&gt;내림차순(값이 같거나 작아짐)&lt;/b&gt;을 의미함.&lt;br /&gt;그리고 이게 &lt;b&gt;row-wise(가로)&lt;/b&gt;와 &lt;b&gt;column-wise&lt;/b&gt; 모두에 적용된다는 것이 핵심.&lt;/p&gt;
&lt;/blockquote&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input: grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]&lt;br /&gt;Output: 8&lt;br /&gt;Explanation: There are 8 negatives number in the matrix.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example 2:&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input: grid = [[3,2],[1,0]]&lt;br /&gt;Output: 0&lt;/p&gt;
&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;&lt;code&gt;m == grid.length&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n == grid[i].length&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1 &amp;lt;= m, n &amp;lt;= 100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-100 &amp;lt;= grid[i][j] &amp;lt;= 100&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Follow up&lt;/b&gt;: Could you find an &lt;code&gt;O(n + m)&lt;/code&gt; solution?&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 class=&quot;maxima&quot;&gt;&lt;code&gt;/**
 * @param {number[][]} grid
 * @return {number}
 */
var countNegatives = function(grid) {
    let row = grid.length - 1; // --
    let col = 0; // ++

    const n = grid[0].length;

    let count = 0;

    while(row &amp;gt;= 0 &amp;amp;&amp;amp; col &amp;lt; n){
        if(grid[row][col] &amp;lt; 0) {
            count += (n - col)
            row--;
        } else {
            col++;
        }
    }
    return count;
};


// [[4,3,2,-1],
//  [3,2,1,-1],
//  [1,1,-1,-2],
//  [-1,-1,-2,-3]]&lt;/code&gt;&lt;/pre&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차원 m * n 에서 n만 내림 차순인줄 알고 바이너리 서치를 통해 해결하려다가&lt;/li&gt;
&lt;li&gt;O(n+m)이 가능하다 Follow up 힌트에서 가로 세로 모두 정렬 되어 있구나! 를 알아 차림.&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;1090&quot; data-origin-height=&quot;848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO5rzV/dJMcagjPNhZ/EzKkSDChJW3qO2UxX2e96K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO5rzV/dJMcagjPNhZ/EzKkSDChJW3qO2UxX2e96K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO5rzV/dJMcagjPNhZ/EzKkSDChJW3qO2UxX2e96K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO5rzV%2FdJMcagjPNhZ%2FEzKkSDChJW3qO2UxX2e96K%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;1090&quot; height=&quot;848&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;848&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/119</guid>
      <comments>https://zzumbong.tistory.com/119#entry119comment</comments>
      <pubDate>Mon, 29 Dec 2025 09:07:01 +0900</pubDate>
    </item>
  </channel>
</rss>