<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발하는 사막여우</title>
    <link>https://hyul-mode.tistory.com/</link>
    <description>개발하는 사막여우입니다 :) </description>
    <language>ko</language>
    <pubDate>Thu, 16 Apr 2026 15:35:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>에릭 Kim</managingEditor>
    <image>
      <title>개발하는 사막여우</title>
      <url>https://tistory1.daumcdn.net/tistory/5368074/attach/5b0eb56bc0be4778b5d7ae9a65d65590</url>
      <link>https://hyul-mode.tistory.com</link>
    </image>
    <item>
      <title>Superman</title>
      <link>https://hyul-mode.tistory.com/391</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;개인적으로 영화보는 걸 너무 좋아하는데, 그냥 보고 넘기기에는 계속 뭔가 아쉽다고 생각했었다. + 봤던 영환데 기억이 잘 나지 않는 경우도 있고, N회차 관람하는 영화의 경우 이전과는 어떻게 다른 느낌을 받았는지도 알고싶었다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 지금부터라도 블로그에 나만의 후기를 간단하게나마 남겨보려고 한다 !&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다른 사람을 위한 무언가가 아니니까 그냥 부담없이 쓰련다 ㅎ&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb4csx/btsPghjMC1L/f0dtwQOYvxEKvYZ3sRUL8K/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb4csx/btsPghjMC1L/f0dtwQOYvxEKvYZ3sRUL8K/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb4csx/btsPghjMC1L/f0dtwQOYvxEKvYZ3sRUL8K/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb4csx%2FbtsPghjMC1L%2Ff0dtwQOYvxEKvYZ3sRUL8K%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;416&quot; height=&quot;594&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;- 슈퍼맨&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;- 2025.7.9 개봉&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;- 2025.7.11 관람&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이번에 본 영화는 '슈퍼맨(Superman)' ! &lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;보통 개봉 당일날 챙겨보려고 하는데, 이번엔 하루 뒤에 갔다 ^^&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이전에도 슈퍼맨 영화는 꽤 있었다. &quot;맨 오브 스틸&quot;, &quot;슈퍼맨 리턴즈&quot;, &quot;저스티스 리그&quot; 등등...&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;괜찮은 영화들도 있었지만 그렇게 인상 깊지는 않았다. 그냥 킬링타임용 ? 그래도 뭔가 우아 슈퍼맨,,과 같은 동경, 타격감, 권선징악 등의 요소가 좋긴 했다.&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;근데 이번엔 &quot;제임스 건&quot;이 메가폰을 잡기도 했고 캐스팅도 바뀌고 트레일러도 재밌어 보여서 적지 않은 기대를 가지고 보러갔다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;(참고로 가오갤, 어벤져스 시리즈는 정말 재밌게 봤고 좋아한다 ^0^)&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;난 항상 영화를 볼 때 인간이 중심이 아닌 영화들, 로봇이나 공룡, 외계인이 주를 이루는 플롯에는 휴먼이 나오는 걸 좀 최소화했으면 싶었다. &lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이야기 전개 상 필수불가결 한건 인정. 그럼에도 가족, 연인 등의 감성을 섞어서 짬뽕을 만드려는 시도와 함께 몰입이 깨지는 경우가 많았기 때문이다.(이러면 꼭 산으로 가더라) 근데 이번 영화는 딱히 그런 부분은 없었다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;물론 슈퍼맨이 인간같은 외계인? 이기 때문에 아예 없을 순 없겠지만 서사의 중심이 슈퍼맨 흐름으로 갔기에 몰입이 전혀 깨지지 않았다&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;특별히, 등장한 저스티스 갱(메타 휴먼들의 집합)도 인상 깊었다. &quot;그린랜턴, 호크걸, 미스터 트레픽&quot; 이렇게 세명이 한 팀인데 DC 코믹스는 잘 몰라서 그린랜턴밖에 모르겠더라.&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;슈퍼맨이 메인인데 다른 메타휴먼들이 나와도 돼..? 괜찮겠어..?라는 마음이 있기도 했지만&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이들의 등장이 몰입을 해치지 않았고 오히려 다양한 활약을 보면서 세계관이 확장되어 갈 수 있겠구나 싶었다. (호크걸은 메타휴먼이 맞는가 싶기도 했다. 뾰족한 뿔 달린 망치로 괴성 지르면서 활약하는 데&amp;nbsp; 후후,, ㅎㅋ)&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;빌런으로 등장한 &quot;렉스 루터&quot;도 정말 인상깊었다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;악에 받쳐하는 순간들이 있었는데, 연기도 전혀 어색하지 않았고 오히려 슈퍼맨에 대한 시기, 질투를 잘 드러냈다고 생각한다.&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;슈퍼맨을 철저히 연구해서 행동 패턴을 알아내고, 그에 맞춰 대응하는 방식도 훌륭했다.&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;렉스 루터와 한 팀인 &quot;울트라맨&quot;, &quot;엔지니어&quot;도 같이 나오는데, 빌런 치고는 음 ~ 영 별로였다. &lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;울트라맨은 이름도 웃기고 대사도 없어서 왜 나와찌..? 싶었고 엔지니어는 나노 로봇을 통해 몸을 자유자재로 변형시킬 수 있는데, 딱히 임팩트는 없어따,,&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;결론적으론 슈퍼맨이 다 물리치고 지구를 지켜낸다. 역시 히어로물이다.&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;슈퍼맨이 지면 어떨까? 동심 다 깨지는건가? 좀 애매한 위치에 있는 영웅이신 거 같다.&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;여튼 이번 영화에 대한 에릭 Kim(아주 무명의 공신력 제로)의 평가는 8 / 10이다.&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;2시간이라는 러닝타임이지만 지루하지 않게 봤던 거 같고 액션이랑 음향도 빵빵했던 거 같다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;억지 유머도 많지 않아서 &lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;몰입감 있게&lt;span&gt; 봤던 거 같고 &lt;/span&gt;&lt;/span&gt;내가 평가할 수는 없겠지만 &lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;배우분들의 연기 또한&lt;span&gt; 좋았다고 생각한다.&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;아쉬웠던 부분은 슈퍼맨 영화들의 빌런들보다 하위호환이었던 빌런을 상대로 슈퍼맨은 왜 고전하는가 ㅠㅠ&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;그냥 시~~~원하게 &quot;잘 패다갑니다 ~&quot; 느낌으로 이겨줬으면 좋겠다&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;첨이라 두서없이 쓴 거 같은데 좀 오글거리긴 합니다요 ^^;; + 진짜 하나하나 다 쓰면 엄~~~청 길게 쓰겠구나 싶다 !!&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;But, However,Nevertheless 나에 대한 기록을 꾸준히 남기고 싶다 :]&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/Movies</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/391</guid>
      <comments>https://hyul-mode.tistory.com/391#entry391comment</comments>
      <pubDate>Fri, 11 Jul 2025 19:30:24 +0900</pubDate>
    </item>
    <item>
      <title>[대한항공] 전문인력 (신입/경력) 채용 후기</title>
      <link>https://hyul-mode.tistory.com/390</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;대한항공 전문인력 부문(IT)에 관심 있으신 분들에게 조금이나마 도움이 됐으면 하는 바람으로 작성해봅니다 :)&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wHCC9/btsMx247N6l/Mnu7fMO3IuBVnVCNTCteD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wHCC9/btsMx247N6l/Mnu7fMO3IuBVnVCNTCteD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wHCC9/btsMx247N6l/Mnu7fMO3IuBVnVCNTCteD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwHCC9%2FbtsMx247N6l%2FMnu7fMO3IuBVnVCNTCteD1%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;745&quot; height=&quot;360&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;360&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;&lt;i&gt;서류접수는&amp;nbsp;&lt;b&gt;24.11.12 ~ 24.11.26&lt;/b&gt;까지 진행됐었습니다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;종합직 신입사원 / 전문인력 / 항공우주 전문인력&lt;/b&gt; 이렇게 나눠서 뽑는 방식이었고,&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;저는 IT 개발 직무로 지원을 했기 때문에 전문인력 분야로 지원했습니다.&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1t2mk/btsMxkZtkUk/6JKPQaoDuBpWOyo1hdYu3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1t2mk/btsMxkZtkUk/6JKPQaoDuBpWOyo1hdYu3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1t2mk/btsMxkZtkUk/6JKPQaoDuBpWOyo1hdYu3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1t2mk%2FbtsMxkZtkUk%2F6JKPQaoDuBpWOyo1hdYu3k%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;692&quot; height=&quot;340&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;340&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;i&gt;전형 절차는 다음과 같았습니다.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beavqU/btsMy328Kvk/JPjY7ZDtGk76AKsiJ9Eksk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beavqU/btsMy328Kvk/JPjY7ZDtGk76AKsiJ9Eksk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beavqU/btsMy328Kvk/JPjY7ZDtGk76AKsiJ9Eksk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeavqU%2FbtsMy328Kvk%2FJPjY7ZDtGk76AKsiJ9Eksk%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;714&quot; height=&quot;341&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;341&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;서류전형&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKaR5x/btsMzeXLUqN/8UBKMKKgdGpuYcFDajIp8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKaR5x/btsMzeXLUqN/8UBKMKKgdGpuYcFDajIp8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKaR5x/btsMzeXLUqN/8UBKMKKgdGpuYcFDajIp8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKaR5x%2FbtsMzeXLUqN%2F8UBKMKKgdGpuYcFDajIp8k%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;853&quot; height=&quot;275&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;275&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;i&gt;서류 결과는 &lt;b&gt;합격이었습니다.&lt;/b&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;서류 결과 나오기까지 한달 남짓 걸렸고 적부까지는 아닌데 대부분 붙는다는 카더라..?&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1차 면접&lt;/b&gt;&lt;/h3&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;i&gt;1차 면접은 &lt;b&gt;대한항공 역검 사이트에 들어가서 비대면&lt;/b&gt;으로 봤습니다&lt;/i&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;i&gt;총 소요시간은&amp;nbsp;&lt;b&gt;20 ~ 30분 내외&lt;/b&gt;로 빨리 끝났습니다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;재응답의 기회는 한번 있었고, 사용하지 않으면 20분정도로도 끝낼 수 있었습니다.&lt;/i&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;i&gt;저는 &lt;b&gt;CS관련 질문&lt;/b&gt;을 2개 받았습니다. 직무에 따라 조금씩 다르겠지만 뭐 인성 비슷한 질문도 있다고 하고, 전혀 예상하지 못한 질문이었다고들 하더라구요&lt;/i&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;i&gt;CS라는건 예상했기에 정처기 미리미리 공부해뒀으면 어렵지 않게 답할 수 있는 수준이긴 했는데 &lt;/i&gt;&lt;i&gt;질문을 받고 너무 당황하지만 않으면 어렵지 않게 답할 수 있을 것이라고 생각합니다.&amp;nbsp;&lt;/i&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;b&gt;&lt;i&gt;질문&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;1. 정적 코드 분석 도구와 코드 포멧터에 대해서 설명해주세요.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;- eslint와 prettier기반으로 설명했습니다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;2. layerd Architecture에 설명해주세요&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;- 3 tier랑 4 tier의 차이점을 비교하면서 설명했습니다.&amp;nbsp;&lt;/i&gt;&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;b&gt;결과&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkGdvV/btsMxqZr3Hb/QVBAQ3WRBktpUdSyQRsI3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkGdvV/btsMxqZr3Hb/QVBAQ3WRBktpUdSyQRsI3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkGdvV/btsMxqZr3Hb/QVBAQ3WRBktpUdSyQRsI3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkGdvV%2FbtsMxqZr3Hb%2FQVBAQ3WRBktpUdSyQRsI3k%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;662&quot; height=&quot;216&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;216&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2차면접&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;2차 면접은 &lt;b&gt;대한항공 인재개발원&lt;/b&gt;에서 &lt;i&gt;&lt;b&gt;영어 면접 + PT 면접&lt;/b&gt;&lt;/i&gt; 진행했습니다.&lt;/i&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;i&gt;전 오전 8:30 타임이었고, 대기 시간 없이 빠르게 진행됐습니다.&amp;nbsp;&lt;/i&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;i&gt;딱히 준비를 한 내용은 없었고, 영어 면접은 어느정도 자신있었기에 자기소개 정도만 준비했고, PT면접은 대한항공이나 항공사 관련된 기사나 내용을 찾아보며 준비했습니다.&lt;/i&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;b&gt;&lt;i&gt;영어면접&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;1. 자기소개 X&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;2. 인재개발원 올 때 어떻게 왔냐&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;3. 전공 선택 이유 + 해당 전공으로 어떻게 기여할 수 있을지&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;+ 꼬리질문 간단한 것들..&lt;/i&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;10분 내외로 빠르게 진행됐습니다.&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;&lt;i&gt;영어 면접을 끝내고 대기하고 있으면 PT 면접 조를 불러주십니다.&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;지원자 5, 면접관 3 다대다&lt;/b&gt;였습니다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;PT면접&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 클라우드 관련된 내용. 설계 어떻게 할지 물어본듯? (잘 기억은 안납니다ㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 장애 발생 시, 어떤 프로세스로 대응할건지&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;i&gt; &lt;i&gt;주제를 주고 30분정도 생각할 시간을 줍니다. &lt;/i&gt;저는 장애 대응에 관해 준비했고, &lt;/i&gt;&lt;i&gt;개발을 하면서 사용했던 실시간 에러 모니터링 도구인 sentry를 사례로 설명했습니다.&lt;/i&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;i&gt;&lt;b&gt;자기소개 + PT 발표 + 질문&lt;/b&gt;의 순서가 이어졌고 각 사람에게 많은 양의 질문이 돌아가진 않습니다. 보통 2 ~ 3개 정도였습니다.&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&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;b&gt;결과&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3TVP2/btsMx3W9Qk0/1vmeAuoSkK8l5lDI31Zmi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3TVP2/btsMx3W9Qk0/1vmeAuoSkK8l5lDI31Zmi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3TVP2/btsMx3W9Qk0/1vmeAuoSkK8l5lDI31Zmi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3TVP2%2FbtsMx3W9Qk0%2F1vmeAuoSkK8l5lDI31Zmi1%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;660&quot; height=&quot;206&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;206&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3차면접&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;대한항공 본사&lt;/b&gt;에서 진행됐습니다. 김포공항에서 버스타면 바로 앞까지 도착할 수 있습니다.&amp;nbsp;&lt;/i&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;i&gt;본사에는막 못들어가기에 다같이 모여서 들어갑니다. &lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;너무 빨리 마시고 10 ~ 20분정도 여유를 두고 가시는 걸 추천드립니다.&amp;nbsp;&lt;/i&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;i&gt;&lt;b&gt;면접 + 인성검사 순서&lt;/b&gt;로 진행됐고 &lt;b&gt;면접관 2, 지원자 5 다대다&lt;/b&gt;였습니다.&lt;/i&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;b&gt;&lt;i&gt;면접&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;1. 자기소개 X&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;2. 대한항공에 기여할 수 있는 부분에 대한 질문&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;3. 대한항공의 서비스를 이용하면서 느꼈던 점들(좋았던 점, 불편했던 점)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;+ 꼬리질문들..&lt;/i&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;b&gt;&lt;i&gt;인성검사&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;진짜 할말이 많은데.. 너무 비효율적이라고 생각했습니다. 질문이 500개 넘게 있는데 일일이 수기로 OMR 체크해야 합니다. 손도 아프고 집중력도 떨어지더라고요.. 그냥 레전드였습니다.&lt;/i&gt;&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;b&gt;최종결과&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉽지만 불합격했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시원섭섭한 마음이 있긴 했지만 좋은 경험을 했다고 생각합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체 타임라인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;서류 접수&lt;/b&gt;: 24.11.12 ~ 24.12.26&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;서류 결과&lt;/b&gt;: 24.12.26&lt;/i&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;i&gt;&lt;b&gt;1차 면접&lt;/b&gt;: 24.12.30 ~ 24.12.31&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;1차 결과&lt;/b&gt;: 25.1.17&lt;/i&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;i&gt;&lt;b&gt;2차 면접&lt;/b&gt;: 25.1.22&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;2차 결과&lt;/b&gt;: 25.2.7&lt;/i&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;i&gt;&lt;b&gt;3차 면접&lt;/b&gt;: 25.2.21&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;3차 결과&lt;/b&gt;: 25.3.10&lt;/i&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/취준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/390</guid>
      <comments>https://hyul-mode.tistory.com/390#entry390comment</comments>
      <pubDate>Tue, 25 Mar 2025 17:00:08 +0900</pubDate>
    </item>
    <item>
      <title>[SOOP] 2025 신입 공개채용 후기</title>
      <link>https://hyul-mode.tistory.com/389</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;SOOP에 입사하고 싶으신 분들에게 도움이 되었으면 하는 바람에서 후기를 작성해봅니다 :)&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ClPbY/btsMvvlUc5H/Qktvv4n1Vwn3YxMOkuUUT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ClPbY/btsMvvlUc5H/Qktvv4n1Vwn3YxMOkuUUT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ClPbY/btsMvvlUc5H/Qktvv4n1Vwn3YxMOkuUUT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FClPbY%2FbtsMvvlUc5H%2FQktvv4n1Vwn3YxMOkuUUT0%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;747&quot; height=&quot;694&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;694&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;i&gt;2025년 시작부터 SOOP의 신입 공개채용이 있었습니다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;SOOP은 아프리카TV에서 상호를 바꾼 라이브 스트리밍 플랫폼인데요, 많은 분들이 한번쯤은 들어보셨을 기업이라고 생각합니다 :)&lt;/i&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;i&gt;모집 분야는 엄청 다양하게 있었습니다. 그중에서도 저는 &quot;글로벌 P2P 클라이언트 개발&quot; 직무로 지원했어요.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coNWTS/btsMwd55G8E/WZKKo61nahrzIe2EHvcBb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coNWTS/btsMwd55G8E/WZKKo61nahrzIe2EHvcBb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coNWTS/btsMwd55G8E/WZKKo61nahrzIe2EHvcBb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoNWTS%2FbtsMwd55G8E%2FWZKKo61nahrzIe2EHvcBb0%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;681&quot; height=&quot;349&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;349&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;i&gt;저는 프론트엔드 개발을 주로 했었고, 싸피하면서 WebRTC를 활용한 실시간 화상 회의 서비스를 구현한 경험이 있었기 때문에 나한테 딱 맞는 분야다 ! 라고 생각했던 거 같아요&lt;/i&gt;&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;b&gt;서류 결과&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;서류 합/불 결과를 받은 건 2월 4일이었습니다. 체감상 금방 결과가 나왔던 거 같아요 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VJjE3/btsMw2Qzy09/MRrcySc7WT9hMaMWkqxF41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VJjE3/btsMw2Qzy09/MRrcySc7WT9hMaMWkqxF41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VJjE3/btsMw2Qzy09/MRrcySc7WT9hMaMWkqxF41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVJjE3%2FbtsMw2Qzy09%2FMRrcySc7WT9hMaMWkqxF41%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;784&quot; height=&quot;185&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;185&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;i&gt;해당 메일에는 사전테스트, 1차 면접에 관한 내용들이 있구요, 친절하게 안내해줍니다 :)&amp;nbsp;&lt;/i&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;사전테스트&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;직무마다 사전테스트가 있기도 하고, 또 다양한 형식으로 있다고 하더라구요 ! &lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;제가 지원한 직무는 &lt;b&gt;HackerRank에서 온라인 코딩테스트&lt;/b&gt;를 진행했습니다. &lt;/span&gt;&lt;/i&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;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;저도 HackerRank라는 PS 사이트를 처음 사용해봐서 첨엔 많이 낯설더라구요. &lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;일단 내용이 다 영어로 되어 있다는 걸 확인하셔야 하고, 적절히 번역하셔서 푸시면 됩니다 !&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;+ 화면 녹화나 캠을 키라는 말은 따로 없었어요. 그런 부분은 받으신 메일에 잘 확인해보시면 될 거 같습니다 :)&amp;nbsp;&lt;/span&gt;&lt;/i&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;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;저는 총 5문제가 나왔어요&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;RestAPI 1, SQL 1, 알고리즘 3 !!&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;난이도와는 별개로 생각보다 재밌었던 거 같아요 ! (난이도는 제 기준 좀 어려웠던 거 같았어요. 테케를 전부 통과하는 경우가 잘 없더라구요ㅠ)&lt;/span&gt;&lt;/i&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;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;150분 동안 진행했는데, 시간 진짜 순삭입니다 !&lt;/span&gt;&lt;/i&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;1차 면접&lt;/span&gt; &lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt; &lt;i&gt;면접관 4(실무진 3, 인사팀 1), 지원자 2의 &lt;/i&gt;다대다 대면면접&lt;/b&gt;이었습니다. 다른 시간대는 지원자가 3명씩도 들어가더라구요&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;장소는 판교였고 &lt;/i&gt;&lt;i&gt;서류 합격을 확인하고, 1차 면접까지의 기간은 대략 &lt;b&gt;1주일 내외&lt;/b&gt;였어요 !&amp;nbsp;&lt;/i&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;i&gt;저는 사실 이번에 첫 서비스 기업 직무면접이었는데, 진짜 레젼드로 빡셌던 거 같아요 ㅎㅎ &lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;그전에는 제조업 위주로 지원했어서 직무면접이 평이했다고 생각하는데 확실히 서비스 기업은 다르더라구요 !&lt;/i&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;i&gt;면접 시간은 50분 정도였고&amp;nbsp;&lt;b&gt;SOOP에 대한 관심, 직무에 대한 CS 및 이해도, 네트워크 CS에 관한 내용(제 직무 기준)&lt;/b&gt; 등을 많이 공부하고 가시면 도움이 되실 거 같아요 ! (꼬리 질문 많이 하십니다 ^^)&amp;nbsp;&lt;/i&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;i&gt;1차 면접이 끝나고 난 직후에 들었던 생각은 &quot;아 ~ 떨어졌구나 ~ 좋은 경험이었다&quot; 였어요. &lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;면접하면서 &quot;죄송합니다 잘 모르겠습니다' 를 꽤 했던 거 같았거든요.&amp;nbsp;&lt;/i&gt;&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;b&gt;결과&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rMzUr/btsMxnAgVbM/GqfSi0fLn9vLK11hlwyyB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rMzUr/btsMxnAgVbM/GqfSi0fLn9vLK11hlwyyB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rMzUr/btsMxnAgVbM/GqfSi0fLn9vLK11hlwyyB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMzUr%2FbtsMxnAgVbM%2FGqfSi0fLn9vLK11hlwyyB1%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;782&quot; height=&quot;171&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;171&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;i&gt;감사하게도 합격이었습니다 :)&lt;/i&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Play 전형&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;1차 면접을 합격하고 나면, 메일로 Play 전형과 2차 면접에 관한 내용을 함께 알려주십니다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Play 전형에 대해 잘 모르시는 분들도 계실텐데&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;b&gt;Play&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;전형은&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SOOP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;플랫폼을 활용해 실제 방송을 진행하며 스트리머&lt;span&gt;/&lt;/span&gt;서비스 경험을 해보는 전형입니다&lt;span&gt;. &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;선발 여부와 관계없이&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;100%&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;참여만 하면 되며&lt;span&gt;, Play&lt;/span&gt;를 해보는 것에 의의를 둡니다&lt;/b&gt;&lt;span&gt;&lt;b&gt;.&lt;/b&gt;&quot; 니까 부담을 가지진 않으셔도 될 거 같아요 :)&lt;/span&gt;&lt;/span&gt;&lt;/i&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;i&gt;&lt;span&gt;&lt;span&gt;저는 뭐할까 고민 많이 했는데 아무래도 제가 잘 아는 내용을 하면 좋을 거 같아서 &quot;다시보고 싶은 듀오 축구선수 이상형 월드컵 64강&quot;을 진행했습니다 !&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span&gt;&lt;span&gt;개인적으로 하고싶기도 했고 재밌을 거 같더라구요 ! 실제로 방송하면서 임직원분들이 들어오셔서 채팅도 해주시고 호응도 해주시니까 진짜 방송인이 된 것만같은 기분..?&lt;/span&gt;&lt;/span&gt;&lt;/i&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;i&gt;&lt;span&gt;&lt;span&gt;여튼 30분 순삭이고 스트리머 데뷔전 재밌게 했습니다 :)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2차 면접&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;2차면접도 &lt;b&gt;다대다 대면면접&lt;/b&gt;으로 진행했습니다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;장소는 그대로 판교였고, 합격 메일을 받고 난 후 제 경우엔 정확히 1주일 뒤였습니다&amp;nbsp;&lt;/i&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;i&gt;면접은 2대2로 진행했어요 ! 면접관으로는 본부장님이랑 인사팀장님이 들어오셨는데, 너무 편하게 해주셔서 감사하더라구요&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;저희 앞 팀은 지원자가 4였는데, 이것도 시간대마다 조금씩은 상이한 거 같아요 !&lt;/i&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;i&gt;면접은 약 40분 정도 진행했습니다 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;인성에 관한 질문 먼저 주시고, 직무와 관련해서 SOOP에 얼마나 관심과 이해도&lt;/b&gt;가 있는지를 확인하시는 거 같아요. &lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;사실 면접가기 전에 이미 보셨던 분들 말로는 좀 빡세다 ?고 해서 긴장 많이 했는데 제 타임에는 생각보다 괜찮았던 거 같아요.&lt;/i&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;i&gt;&lt;b&gt;SOOP을 많이 사용해보면서 서비스에 대해 이해하시고, 직무에 대해 진지하게 고민&lt;/b&gt;해보셨다면 충분히 대답할만한 질문들이었던 거 같아요 !&amp;nbsp;&lt;/i&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;i&gt;면접 끝나고 나서는 진짜 후련했던 거 같아요 !!&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이거 보시는 분들도 잘준비하셔서 정말 후회 없이 임하셨으면 좋겠습니다 :)&amp;nbsp;&lt;/i&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;최종결과&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;최종결과는 불합이었습니다&lt;/i&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;i&gt;엄청 욕심이 있었던 건 아니었지만 그것과는 별개로 조금 아쉽긴 하더라구요 !&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;그래도 전형을 후회없이 진행했기에 좋은 경험이 되었다고 생각합니다 :)&amp;nbsp;&lt;/i&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;&lt;i&gt;면접질문이나 궁금한 부분들은 비밀댓글로 물어보시면 제가 아는 선에서 알려드릴게요 :)&amp;nbsp;&lt;/i&gt;&lt;/p&gt;</description>
      <category>일상/취준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/389</guid>
      <comments>https://hyul-mode.tistory.com/389#entry389comment</comments>
      <pubDate>Thu, 27 Feb 2025 13:59:19 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 17270번: 연예인은 힘들어 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/388</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17270&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/17270&lt;/a&gt;&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;b&gt;코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1736838994437&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class prac {
	public static int V, M, INF;
	public static int[] min_dis;
	public static ArrayList&amp;lt;ArrayList&amp;lt;Node&amp;gt;&amp;gt; arr = new ArrayList&amp;lt;ArrayList&amp;lt;Node&amp;gt;&amp;gt;();

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		st = new StringTokenizer(br.readLine());
		V = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());

		INF = 1000 * 10000 + 1;

		for (int i = 0; i &amp;lt; V + 1; i++) {
			arr.add(new ArrayList&amp;lt;&amp;gt;());
		}

		for (int i = 0; i &amp;lt; M; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());

			arr.get(a).add(new Node(b, c));
			arr.get(b).add(new Node(a, c));
		}

		st = new StringTokenizer(br.readLine());
		int J = Integer.parseInt(st.nextToken());
		int S = Integer.parseInt(st.nextToken());

		int[] first = dijkstra(J);
		int[] second = dijkstra(S);

		PriorityQueue&amp;lt;Pos&amp;gt; positionQueue = new PriorityQueue&amp;lt;Pos&amp;gt;();
		int min_v = Integer.MAX_VALUE;

		for (int i = 1; i &amp;lt;= V; i++) {
			if (i == J || i == S)
				continue;
			min_v = Math.min(min_v, first[i] + second[i]);
		}

		// 최솟값이 안되는건 애초에 다 걸러져야 함. 
		// 조건 순서대로 답을 구해줘야 함.
		for (int i = 1; i &amp;lt;= V; i++) {
			if (i == J || i == S)
				continue;
			if (first[i] + second[i] &amp;gt; min_v)
				continue;
			if (first[i] &amp;gt; second[i])
				continue;
			positionQueue.offer(new Pos(first[i], i));
		}

		if (positionQueue.isEmpty())
			System.out.println(-1);
		else
			System.out.println(positionQueue.peek().num);

	}

	public static int[] dijkstra(int start) {
		PriorityQueue&amp;lt;Node&amp;gt; pq = new PriorityQueue&amp;lt;Node&amp;gt;((o1, o2) -&amp;gt; o1.cost - o2.cost);
		min_dis = new int[V + 1];
		Arrays.fill(min_dis, INF);
		min_dis[start] = 0;
		pq.offer(new Node(start, 0));

		while (!pq.isEmpty()) {
			Node cur = pq.poll();

			if (min_dis[cur.node] &amp;lt; cur.cost)
				continue;

			for (Node next : arr.get(cur.node)) {
				if (min_dis[next.node] &amp;gt; cur.cost + next.cost) {
					min_dis[next.node] = cur.cost + next.cost;
					pq.offer(new Node(next.node, cur.cost + next.cost));
				}
			}
		}
		return min_dis;
	}
}

class Node {
	int node;
	int cost;

	public Node(int node, int cost) {
		this.node = node;
		this.cost = cost;
	}
}

class Pos implements Comparable&amp;lt;Pos&amp;gt; {
	int time;
	int num;

	public Pos(int time, int num) {
		this.time = time;
		this.num = num;
	}

	@Override
	public int compareTo(Pos o) {
		if (this.time == o.time) {
			return this.num - o.num;
		}
		return this.time - o.time;
	}
}&lt;/code&gt;&lt;/pre&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;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;분명히 제대로 구현한거 같은데 &quot;틀렸습니다&quot;를 8%에서 받으셨으리라 생각합니다. 저도 그랬습니다 !&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;그 이유는 문제에 주어진 조건을 하나하나 따져가며 답을 추려나가야 하기 때문입니다.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;제 원래 코드는 다음과 같았습니다&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1736839146279&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main {
	public static int V, M, INF;
	public static int[] min_dis;
	public static ArrayList&amp;lt;ArrayList&amp;lt;Node&amp;gt;&amp;gt; arr = new ArrayList&amp;lt;ArrayList&amp;lt;Node&amp;gt;&amp;gt;();

	public static void main(String[] args) throws Exception {

		int[] first = dijkstra(J);
		int[] second = dijkstra(S);
		PriorityQueue&amp;lt;Pos&amp;gt; positionQueue = new PriorityQueue&amp;lt;Pos&amp;gt;();

		for (int i = 1; i &amp;lt;= V; i++) {
			if (first[i] == INF || second[i] == INF || i == J || i == S || first[i] &amp;gt; second[i])
				continue;
			positionQueue.offer(new Pos(first[i] + second[i], first[i], i));
		}

		if (positionQueue.isEmpty())
			System.out.println(-1);
		else
			System.out.println(positionQueue.peek().num);
	}
}

class Pos implements Comparable&amp;lt;Pos&amp;gt; {
	int sum;
	int time;
	int num;

	public Pos(int sum, int time, int num) {
		this.sum = sum;
		this.time = time;
		this.num = num;
	}

	@Override
	public int compareTo(Pos o) {
		if (this.sum == o.sum) {
			if (this.time == o.time) {
				return this.num - o.num;
			}
			return this.time - o.time;
		}
		return this.sum - o.sum;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&lt;i&gt;이처럼 OR 연산자를 사용해 한번에 선택될 수 있는 값들을 구해주고, 우선순위 큐에 넣어서 정렬한 뒤, peek값을 출력하려고 했습니다.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;하지만 문제에서는 조건의 순서에 따라 애초에 &lt;span style=&quot;color: #006dd7;&quot;&gt;최단거리의 합이 최소가 되지 않는 값들은 다 제거해준 뒤&lt;/span&gt;, 다음 조건으로 넘어가야합니다.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;이 부분만 잘 고려하시면 문제는 다익스트라를 사용하여 쉽게 해결하실 수 있으리라 생각합니다.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;반례&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736839312305&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;4 4
1 2 2
1 3 2
2 4 1
3 4 2
1 4

답: -1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/388</guid>
      <comments>https://hyul-mode.tistory.com/388#entry388comment</comments>
      <pubDate>Tue, 14 Jan 2025 16:22:45 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 1966번: 프린터 큐 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/387</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1966&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1966&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1736590054703&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class prac {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();

		int t = Integer.parseInt(br.readLine());

		while (t-- &amp;gt; 0) {
			st = new StringTokenizer(br.readLine());
			int n = Integer.parseInt(st.nextToken());
			int m = Integer.parseInt(st.nextToken());

			Queue&amp;lt;Node&amp;gt; q = new ArrayDeque&amp;lt;Node&amp;gt;(); //(우선순위, 인덱스)로 저장
			PriorityQueue&amp;lt;Integer&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;(Collections.reverseOrder()); 
            // (우선순위 내림차순 저장)

			st = new StringTokenizer(br.readLine());
			for (int i = 0; i &amp;lt; n; i++) {
				int p = Integer.parseInt(st.nextToken());
				q.offer(new Node(p, i));
				pq.offer(p);
			}

			int cnt = 0;

			while (!q.isEmpty()) {
				Node cur = q.poll();

				if (cur.priority == pq.peek()) { // 큐에서 뽑은 값이 가장 우선순위가 높음 == 출력 가능
					pq.poll();
					cnt++; // 몇번째로 출력되는지 순서 체크
					if (cur.idx == m) { // 문제에서 주어진 요건에 부합하는지 확인
						sb.append(cnt);
						break;
					}
				}
				q.offer(cur);
			}
			sb.append(&quot;\n&quot;);
		}
		System.out.println(sb);
	}
}

class Node {
	int priority;
	int idx;
	public Node(int priority, int idx) {
		this.priority = priority;
		this.idx = idx;
	}
}&lt;/code&gt;&lt;/pre&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;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제 자체의 난이도가 그렇게 높지는 않고, 정답률도 꽤나 높습니다. 하지만 해당 문제를 포스팅하는 이유는 간단해 보이는 문제치고는 조금의 생각이 더 필요했다고 느꼈기 때문이고&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;(제 기준), &lt;/span&gt;자주 등장하는 유형이라고 생각했습니다 !&amp;nbsp;&lt;/li&gt;
&lt;li&gt;자료구조를 쓰긴 해야하는데, 어떤 걸 써야할지 꽤 고민했습니다. 하나의 자료구조로 쉽게 해결할 수 있다고 생각했지만 오산이었구요, 큐랑 우선순위 큐를 적절히 활용해야 합니다 !&lt;/li&gt;
&lt;li&gt;해설은 코드의 주석을 보시면 쉽게 이해하실 거 같습니다 :)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/387</guid>
      <comments>https://hyul-mode.tistory.com/387#entry387comment</comments>
      <pubDate>Sat, 11 Jan 2025 19:12:13 +0900</pubDate>
    </item>
    <item>
      <title>[React] Props vs State</title>
      <link>https://hyul-mode.tistory.com/386</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Props (Properties)&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;정의&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;함수를 통해 전달되는 인자와 같은 성격&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;부모 컴포넌트로부터 자녀 컴포넌트로 전달되는 읽기 전용 데이터&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;부모에서 자식으로 데이터를 넘겨, 외관을 커스터마이징 해줌 (ex Form은 color라는 props를 button으로 보내, button을 커스터마이징)&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;특징&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;읽기 전용 (Read-Only)&lt;/i&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;i&gt;자식 컴포넌트는 props를 변경할 수 없음&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;재사용성&lt;/i&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;i&gt;props를 사용하면 여러 컴포넌트를 재사용 가능&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;함수 전달&lt;/i&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;i&gt;부모에서 자식으로 함수를 전달하여 특정 이벤트 처리 가능&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;데이터 흐름&lt;/i&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;i&gt;단방향 흐름 (부모 -&amp;gt; 자식)&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;b&gt;State&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;정의&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;컴포넌트의 메모리와 같은 성격&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;컴포넌트 내부에서 관리하는 동적인 데이터&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;컴포넌트가 몇몇 정보를 계속 따라갈 수 있게 해주고 변화하면서 상호작용을 만들어냄&lt;/i&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;특징&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;동적 데이터&lt;/i&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;i&gt;사용자 입력, 네트워크 응답, 타이머 등 동적으로 변하는 데이터를 저장&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;변경 가능&lt;/i&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;i&gt;state는 setState() 함수나, useState() 훅을 통해 업데이트 가능&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;b&gt;Props vs State 비교&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 79.6476%; height: 122px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.3798%; height: 20px;&quot;&gt;&lt;b&gt;&lt;i&gt;구분&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3798%; height: 20px;&quot;&gt;&lt;b&gt;&lt;i&gt;Props&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.1664%; height: 20px;&quot;&gt;&lt;b&gt;&lt;i&gt;State&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.3798%; height: 17px;&quot;&gt;&lt;b&gt;&lt;i&gt;소유권&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3798%; height: 17px;&quot;&gt;부모 컴포&lt;i&gt;넌트가 관리&lt;/i&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.1664%; height: 17px;&quot;&gt;&lt;i&gt;컴포넌트 자체가 관리&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.3798%; height: 17px;&quot;&gt;&lt;b&gt;&lt;i&gt;변경 여부&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3798%; height: 17px;&quot;&gt;&lt;i&gt;읽기 전용 (Read-Only)&lt;/i&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.1664%; height: 17px;&quot;&gt;&lt;i&gt;변경 가능 (Mutable)&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.3798%; height: 17px;&quot;&gt;&lt;b&gt;&lt;i&gt;업데이트 방식&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3798%; height: 17px;&quot;&gt;&lt;i&gt;부모 컴포넌트에서만 변경 가능&lt;/i&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.1664%; height: 17px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #666666; color: #ffffff;&quot;&gt;setState&lt;/span&gt;나 &lt;span style=&quot;background-color: #666666; color: #ffffff;&quot;&gt;useState&lt;/span&gt;로 변경&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.3798%; height: 17px;&quot;&gt;&lt;b&gt;&lt;i&gt;용도&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3798%; height: 17px;&quot;&gt;&lt;i&gt;부모 -&amp;gt; 자식 데이터 전달&lt;/i&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.1664%; height: 17px;&quot;&gt;&lt;i&gt;컴포넌트 내부 데이터 관리&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.3798%; height: 17px;&quot;&gt;&lt;b&gt;&lt;i&gt;리랜더링&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3798%; height: 17px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #ffffff; background-color: #666666;&quot;&gt;props&lt;/span&gt; 변경 시 랜더링&lt;/i&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.1664%; height: 17px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #666666; color: #ffffff;&quot;&gt;state&lt;/span&gt; 변경 시 랜더링&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.3798%; height: 17px;&quot;&gt;&lt;b&gt;&lt;i&gt;초기값 설정&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3798%; height: 17px;&quot;&gt;&lt;i&gt;부모 컴포넌트에서 설정&lt;/i&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.1664%; height: 17px;&quot;&gt;&lt;i&gt;컴포넌트 내부에서 설정&lt;/i&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1736298186476&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function ParentComponent() {
  const [count, setCount] = useState(0);

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;Parent Count: {count}&amp;lt;/h1&amp;gt;
      &amp;lt;ChildComponent count={count} onIncrement={() =&amp;gt; setCount(count + 1)} /&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

function ChildComponent({ count, onIncrement }) {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h2&amp;gt;Child Count: {count}&amp;lt;/h2&amp;gt;
      &amp;lt;button onClick={onIncrement}&amp;gt;Increment from Child&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

// 부모 컴포넌트에서 count라는 state 생성
// 부모 컴포넌트 -&amp;gt; 자식 컴포넌트 count 변수를 props로 전달
// 부모 컴포넌트에서 setCount의 값이 변경되면, 자식 컴포넌트에서도 변경됨&lt;/code&gt;&lt;/pre&gt;</description>
      <category>React</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/386</guid>
      <comments>https://hyul-mode.tistory.com/386#entry386comment</comments>
      <pubDate>Wed, 8 Jan 2025 10:14:34 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 17836번: 공주님을 구해라! (JAVA)</title>
      <link>https://hyul-mode.tistory.com/385</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17836&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/17836&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1735807072144&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main {
	public static int n, m, t;
	public static int[][] maps;
	public static boolean[][][] visited;
	public static int[] dx = { 0, 1, 0, -1 };
	public static int[] dy = { 1, 0, -1, 0 };

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		st = new StringTokenizer(br.readLine());

		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		t = Integer.parseInt(st.nextToken());

		maps = new int[n][m];
		visited = new boolean[n][m][2];

		for (int i = 0; i &amp;lt; n; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j &amp;lt; m; j++) {
				maps[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		int answer = bfs();

		if (answer == 0 || answer &amp;gt; t)
			System.out.println(&quot;Fail&quot;);
		else
			System.out.println(answer);
	}

	public static int bfs() {
		Queue&amp;lt;Node&amp;gt; q = new ArrayDeque&amp;lt;Node&amp;gt;();
		visited[0][0][0] = true;
		q.offer(new Node(0, 0, 0, false));

		while (!q.isEmpty()) {
			Node cur = q.poll();

			if (cur.x == n - 1 &amp;amp;&amp;amp; cur.y == m - 1)
				return cur.time;

			for (int i = 0; i &amp;lt; 4; i++) {
				int nx = cur.x + dx[i];
				int ny = cur.y + dy[i];

				if (check(nx, ny)) {
					// 검이 없는 경우
					if (!cur.sword) {
						if (!visited[nx][ny][0]) {
							if (maps[nx][ny] == 2) {
								visited[nx][ny][1] = true;
								q.offer(new Node(nx, ny, cur.time + 1, true));
							} else if (maps[nx][ny] == 0) {
								visited[nx][ny][0] = true;
								q.offer(new Node(nx, ny, cur.time + 1, cur.sword));
							}
						}
					}

					// 검 있을 때
					else {
						if (!visited[nx][ny][1]) {
							visited[nx][ny][1] = true;
							q.offer(new Node(nx, ny, cur.time + 1, cur.sword));
						}
					}
				}
			}
		}
		return 0;
	}

	public static boolean check(int x, int y) {
		if (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; n &amp;amp;&amp;amp; 0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; m)
			return true;
		else
			return false;
	}
}

class Node {
	int x;
	int y;
	int time;
	boolean sword;

	public Node(int x, int y, int time, boolean sword) {
		this.x = x;
		this.y = y;
		this.time = time;
		this.sword = sword;
	}
}&lt;/code&gt;&lt;/pre&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;가장 중요한 부분은 visited 배열로 방문을 체크할 때 검이 있을 경우, 없을 경우를 따로 처리해줘야 한다는 점입니다.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;만약 여느때와 같이 2차원 배열로 visited를 처리했을 경우에 검을 가지고 갈 수 있는 길을 다시 가지 못하는 경우가 발생할 수 있습니다. 그 이유는 이미 검이 없을 때 해당 격자를 지나왔고, visited에 true로 체크를 해준다면 검이 생겼을 때 다시 그 길로 돌아갈 수 없기 때문입니다. 하지만 다시 돌아갔을 때, 공주님에게로 가는 가장 빠른 길을 찾을 수도 있겠지요 !&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/385</guid>
      <comments>https://hyul-mode.tistory.com/385#entry385comment</comments>
      <pubDate>Thu, 2 Jan 2025 17:45:39 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 2468번: 안전 영역 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/384</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2468&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2468&lt;/a&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;h3 data-ke-size=&quot;size23&quot;&gt;틀린 접근법 (69%)&lt;/h3&gt;
&lt;pre id=&quot;code_1733111775811&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class prac {
    public static int[][] arr;
    public static boolean[][] visited;
    public static int n;
    public static int[] dx = {0,1,0,-1};
    public static int[] dy = {1,0,-1,0};
    public static HashSet&amp;lt;Integer&amp;gt; hs = new HashSet&amp;lt;&amp;gt;();

    public static void main(String[] args) throws Exception {   
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        n = Integer.parseInt(br.readLine());

        arr = new int[n][n];
        int max_v = 0;

        for (int i=0; i&amp;lt;n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j=0; j&amp;lt;n; j++) {
                int k = Integer.parseInt(st.nextToken());
                arr[i][j] = k;
                hs.add(k);
            }
        }

        ArrayList&amp;lt;Integer&amp;gt; nums = new ArrayList&amp;lt;&amp;gt;(hs);

        for (int t=0; t&amp;lt;nums.size(); t++) {
            int h = nums.get(t);
            int cnt = 0;
            visited = new boolean[n][n];
            for (int i=0; i&amp;lt;n; i++) {
                for (int j=0; j&amp;lt;n; j++) {
                    if (!visited[i][j] &amp;amp;&amp;amp; arr[i][j] &amp;gt; h) {
                        visited[i][j] = true;
                        bfs(i,j,h);
                        cnt++;
                    }  
                }
            }
            max_v = Math.max(max_v,cnt);
        }
        System.out.println(max_v);
    }

    public static void bfs(int x, int y,int h) {
        Queue&amp;lt;Node&amp;gt; q = new ArrayDeque&amp;lt;Node&amp;gt;();
        q.add(new Node(x,y));

        while (!q.isEmpty()) {
            Node cur = q.poll();

            for (int i=0; i&amp;lt;4; i++) {
                int nx = cur.x + dx[i];
                int ny = cur.y + dy[i];

                if (check(nx,ny) &amp;amp;&amp;amp; !visited[nx][ny]) {
                    if (arr[nx][ny] &amp;gt; h) {
                        q.add(new Node(nx,ny));
                        visited[nx][ny] = true;
                    }
                }
            }
        }
    }

    public static boolean check(int x, int y) {
        if (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; n &amp;amp;&amp;amp; 0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; n) return true;
        else return false;
    }
}

class Node{
    int x;
    int y;
    public Node(int x, int y) {
        this.x = x;
        this.y = y;
    }
}&lt;/code&gt;&lt;/pre&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;&lt;i&gt;해당 코드가 오답을 받았던 이유는 &quot;&lt;span style=&quot;color: #ee2323;&quot;&gt;강수량이 될 수 있는 범위를 모두 고려해주지 않음 + 문제를 제대로 읽지 않음&lt;/span&gt;&quot; 입니다 !&lt;/i&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;i&gt;문제에서 강수량이 될 수 있는 수가 정확히 나와있지는 않습니다. 저는 높이가 1이상 100이하라고 명시해줘서 당연히 강수량도 1부터 100까지의 수인줄 알았습니다. 하지만 비가 아예 안오는 경우도 있기 때문에 &lt;span style=&quot;color: #ee2323;&quot;&gt;0부터 연속된 모든 수를 고려&lt;/span&gt;해야 합니다. (오답의 원인1)&lt;/i&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;i&gt;하나 더 실수한 부분은 문제에서 주어진 높이만이 강수량이 될 수 있는게 아니라 &lt;span style=&quot;color: #ee2323;&quot;&gt;강수량은 0부터 max_h 사이의 연속된 수 모두가 될 수 있다&lt;/span&gt;는 부분입니다. 만약 가장 높은 높이가 10일 경우, 강수량이 될 수 있는 수는 0부터 10까지입니다. 그렇기에 11가지 경우를 모두 확인해야 합니다 ! (오답의 원인2)&amp;nbsp; &lt;/i&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;i&gt;저는 바보같이 주어진 높이만 가능한 줄 알고 set으로 중복을 제거 하고 리스트로 바꿔서 인덱스별로 접근했습니다 ㅠ&amp;nbsp;&lt;/i&gt;&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;pre id=&quot;code_1733112152551&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class prac {
    public static int[][] arr;
    public static boolean[][] visited;
    public static int n;
    public static int[] dx = {0,1,0,-1};
    public static int[] dy = {1,0,-1,0};

    public static void main(String[] args) throws Exception {   
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        n = Integer.parseInt(br.readLine());

        arr = new int[n][n];
        int max_v = 0;
        int max_h = 0;

        for (int i=0; i&amp;lt;n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j=0; j&amp;lt;n; j++) {
                int k = Integer.parseInt(st.nextToken());
                arr[i][j] = k;
                max_h = Math.max(max_h, k);
            }
        }

        for (int t=0; t&amp;lt;=max_h; t++) {
            int cnt = 0;
            visited = new boolean[n][n];
            for (int i=0; i&amp;lt;n; i++) {
                for (int j=0; j&amp;lt;n; j++) {
                    if (!visited[i][j] &amp;amp;&amp;amp; arr[i][j] &amp;gt; t) {
                        visited[i][j] = true;
                        bfs(i,j,t);
                        cnt++;
                    }
                }
            }
            max_v = Math.max(max_v,cnt);
        }
        System.out.println(max_v);
    }

    public static void bfs(int x, int y,int h) {
        Queue&amp;lt;Node&amp;gt; q = new ArrayDeque&amp;lt;Node&amp;gt;();
        q.add(new Node(x,y));


        while (!q.isEmpty()) {
            Node cur = q.poll();

            for (int i=0; i&amp;lt;4; i++) {
                int nx = cur.x + dx[i];
                int ny = cur.y + dy[i];

                if (check(nx,ny) &amp;amp;&amp;amp; !visited[nx][ny]) {
                    if (arr[nx][ny] &amp;gt; h) {
                        q.add(new Node(nx,ny));
                        visited[nx][ny] = true;
                    }
                }
            }
        }
    }

    public static boolean check(int x, int y) {
        if (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; n &amp;amp;&amp;amp; 0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; n) return true;
        else return false;
    }
}

class Node{
    int x;
    int y;
    public Node(int x, int y) {
        this.x = x;
        this.y = y;
    }
}&lt;/code&gt;&lt;/pre&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;&lt;i&gt;난이도는 실버1이지만 그래프 문제에서 꽤 괜찮은 문제였다고 생각합니다 ! 함정에 빠지지 않도록 항상 신경써야될 거 같습니다 !!&amp;nbsp;&lt;/i&gt;&lt;/p&gt;</description>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/384</guid>
      <comments>https://hyul-mode.tistory.com/384#entry384comment</comments>
      <pubDate>Mon, 2 Dec 2024 13:06:22 +0900</pubDate>
    </item>
    <item>
      <title>[SSAFY] 싸피 자율 프로젝트 후기 !!!</title>
      <link>https://hyul-mode.tistory.com/383</link>
      <description>&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;&lt;i&gt;싸피 자율 프로젝트가 끝난지도 어느덧 2주가 지났다.. 후기 이런 거 쓰는 편은 아닌데 조금이나마 도움이 됐으면 좋겠다는 마음으로 작성해봅니다 !!&amp;nbsp;&lt;/i&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;i&gt;좀 더 오피셜한 정보를 알고싶으면 &lt;span style=&quot;color: #006dd7;&quot;&gt;싸피셜에서 운영하는 블로그나 인스타&lt;/span&gt; ? 포스팅 보면 좋을듯 ㅎㅎ&amp;nbsp;&lt;/i&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;h3 data-ke-size=&quot;size23&quot;&gt;1. 자율 프로젝트란 ?&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;자율프로젝트는 프로젝트 시작 전 비전공자, 전공자 비율의 할당 없이 &lt;span style=&quot;color: #006dd7;&quot;&gt;자유롭게 6인의 팀&lt;/span&gt;을 꾸릴 수 있었어요. 그래서 이전에 일정 비율만큼의 비전공자나 전공자가 필요했던 공통, 특화 프로젝트와는 달리 아무런 제약 없이 자신이 원하는 팀원과 함께 프로젝트를 진행할 수 있다는 게 넘 좋았던 점이었습니다. 또 개&lt;span style=&quot;color: #006dd7;&quot;&gt;발에 필요한 교보재&lt;/span&gt;도 신청만 하면 싸피 사무국에서 빵빵하게 지원해줍니다 ! 팀당 60만원이었던거 같아요 :)&amp;nbsp;&lt;/i&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;i&gt;또한 자율 프로젝트에는 3가지 도메인 중 하나를 선택할 수 있슴다 !&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&lt;i&gt;자율 주제&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;기업연계&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;오픈소스&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이 주제에 맞춰서 마음이 맞는 사람끼리 팀빌딩을 하더라구요 ?? 다들 장단점이 존재하는 거 같아요. 저희 팀은 &lt;span style=&quot;color: #006dd7;&quot;&gt;자율 주제&lt;span style=&quot;color: #000000;&quot;&gt;로 진행&lt;/span&gt;&lt;/span&gt;했어요 :)&amp;nbsp;&lt;/i&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;i&gt;(자율 프로젝트 반 1등으로 선정됐을 때 상금에 관한 정보가 거의 없던데 !! 제 기수의 경우엔 1등 - 40만원, 2등- 20만원이었습니다)&lt;/i&gt;&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;2. 팀선정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;저는 특화 프로젝트때 같이 했던 팀원들 + 1명의 NF(뉴페이스) 백엔드랑 팀을 이뤘어요. 기존의 팀원들과 같이 했던 이유는 다들 실력이 출중했고, 업무적으로도 잘 맞았기에 또 해도 좋을 거 같다고 생각했었습니다 킼&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;팀원을 선택&lt;/span&gt;하는 게 진짜진짜진짜 중요한 거 같아요. 자율 프로젝트는 주어진 일정이 다른 프로젝트보다 짧기 때문에 &lt;span style=&quot;color: #006dd7;&quot;&gt;팀빌딩의 시간이 거의 없기 때문&lt;/span&gt;이죠ㅠ&amp;nbsp;&lt;/i&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;i&gt;그리고 프로젝트가 끝나기 전에 미리미리 컨텍하는 분위기니까 플젝 끝나고 하시면 늦습니다 ! 참고 하세융 :)&lt;/i&gt;&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;3. 아이디어 기획&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;저희 팀은 아이디어 기획 단계에서 조금 전략적으로 아이템을 선정하려고 했어요. 이건 제 뇌피셜이긴 한데 &quot;&lt;span style=&quot;color: #006dd7;&quot;&gt;사회공헌쪽으로 주제를 선정 + 이쁜인터페이스 + 오 좀 잘했네 ?? 하는 기능&lt;/span&gt;&quot; 이정도 조합이면 충분히 수상 노려볼만 한 거 같아요. 저희 팀도 이왕 하는 거 열심히 해서 수상하면 베스트라고 생각했기에 주제 선정도 전략적으로 진행했지요&amp;nbsp;&amp;nbsp;&lt;/i&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;i&gt;서비스의 타겟층을 5~7세의 어린아이로 잡은 뒤, 아이들의 속마음을 대화를 통해 이끌어내고, 부모님께 데이터 시각화로 보여주자 ! 라는 주제로 가지고 시작하였습니다. 아주 전략적이죠 ? 구현만 제대로 하면 충분히 매력적인 아이템이라고 생각했어요 !&amp;nbsp;&amp;nbsp;&lt;/i&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;i&gt;이후엔 어떻게 구현할지에 대해 꽤 많은 시간을 썼던 거 같은데 첨에 나온건 웹앱 기반의 서비스였어요. 요새 아이들이 테블릿을 많이 사용한다나? 전 주변에 어린 아이들이 없어서 잘 몰랐는데 생각보다 엄청 잘쓴다고 함 ! (시작하는 시기가 많이 빨라지긴 했나봄,,) 여튼 그래서 웹앱이 어떤가 고민했는데 아무리 생각해도 다른 팀들과의 차별성을 주기 힘들다고 생각했습니다ㅠ&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;그리고 개인적으로는 싸피 2학기 내내 웹앱 프론트엔드만 했기 때문에 이번엔 조금 다른 분야를 도전해보고 싶었어요 ! 다른 팀원들도 비슷한 생각이었던 거 같았구요 :)&amp;nbsp;&lt;/i&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;i&gt;그래서 결론적으로 !! &lt;span style=&quot;color: #006dd7;&quot;&gt;IoT&lt;/span&gt;를 하게 됐어요. 패기로웠지만 사실 막막했는데, 팀에 IoT를 제대로 해본 인원이 한명밖에 없었기 때문에 어떻게 풀어나가야 할까 고민을 많이했습니다 ! 그치만 저희 서비스가 IoT를 엄청 빡빡하게 구현하는 느낌이 아니라서 충분히 해낼 수 있다는 마인드로 다음과 같이 역할 분담을 진행했어요&lt;/i&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;i&gt;FE : 1명같은 2명&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;BE : 2명&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;IoT : 1명같은 2명&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Infra : 1명&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;데이터분석 : 1명&lt;/i&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;i&gt;!!&amp;nbsp;&lt;/i&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;i&gt;여덟명 같죠? 6명에서 한건 맞는데 메인이 서버나 프론트가 아니다보니 도와줄 수 있는 부분은 서로서로 도와가면서 역할 분담도 &lt;span style=&quot;color: #006dd7;&quot;&gt;유동적으로 진행&lt;/span&gt;했어요.&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;저는 FE에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;데이터 시각화할 때 사용하는 차트 구현하고 캘린더 커스터마이징&lt;/span&gt; 정도 헀구요, IoT에서는 &lt;span style=&quot;color: #006dd7;&quot;&gt;Server-Client 사이에 Mqtt 통신하는 부분 구현&lt;/span&gt;했습니다 !&amp;nbsp;&lt;/i&gt;&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;4. 서비스 개발&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;저희가 갑작스럽게 웹앱에서 IoT로 바꾸다보니 1차 교보재 신청 기간을 놓치게 되었어요ㅠ 그래서 개발에 계속 딜레이가 생겼는데 아무래도 하드웨어 기기가 없다보니 제대로 테스트가 안되더라구요 ! 그 부분이 제일 아쉬웠습니다ㅠ&lt;/i&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;i&gt;여기서 스노우볼이 좀 굴러갔는데 저희 팀원들이 사비를 꽤 썼습니다 ! 리튬 배터리도 주문하고 마이크, 잿슨나노(산 건 아님 ㅎ), 충전기 등등 당장 필요한 것들을 사는데 지출이 좀 있었습니다. 그래도 결과가 좋았으니 정상참작 가능했던 거 같아요 킼&amp;nbsp;&lt;/i&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;i&gt;열심히 개발 기간을 거쳐서 만들어진 우리 팀의 &quot;&lt;span style=&quot;color: #006dd7;&quot;&gt;토키(Talkie)&lt;/span&gt;&quot; 서비스 !!&amp;nbsp;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;talkieMain.png&quot; data-origin-width=&quot;7680&quot; data-origin-height=&quot;4320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ygKXr/btsK3ONnKnP/w0Wv3MZj4xSBNMFTpqcWh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ygKXr/btsK3ONnKnP/w0Wv3MZj4xSBNMFTpqcWh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ygKXr/btsK3ONnKnP/w0Wv3MZj4xSBNMFTpqcWh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FygKXr%2FbtsK3ONnKnP%2Fw0Wv3MZj4xSBNMFTpqcWh0%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;600&quot; height=&quot;338&quot; data-filename=&quot;talkieMain.png&quot; data-origin-width=&quot;7680&quot; data-origin-height=&quot;4320&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;&lt;i&gt;저는 부울경 지역이었는데, 아무래도 삼성전기가 보안사업장이다보니 인형을 밖으로 들고나오지도 못헀고, 계속 카메라도 붙이고 있어야 해서 실물 사진은 거의 없었습니다ㅠ&amp;nbsp;&amp;nbsp;&lt;/i&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;i&gt;자세한 내용은 제 깃헙 참고하시면 도움되실듯 !! ㅎㅎ&lt;/i&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;a href=&quot;https://github.com/busangangster/talkie&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/busangangster/talkie&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1733106890329&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - busangangster/talkie&quot; data-og-description=&quot;Contribute to busangangster/talkie development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/busangangster/talkie&quot; data-og-url=&quot;https://github.com/busangangster/talkie&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eAxBeR/hyXGEEpo11/tpywkncn3K8swyCVWHzEIk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/busangangster/talkie&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/busangangster/talkie&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eAxBeR/hyXGEEpo11/tpywkncn3K8swyCVWHzEIk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - busangangster/talkie&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to busangangster/talkie development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;5. 성과 및 느낀점&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;저희팀은 본선 발표회에 진출할 수 있었고, 비록 결선에는 가지 못했지만 &lt;span style=&quot;color: #006dd7;&quot;&gt;반 1등&lt;/span&gt;을 할 수 있었습니다 :) 결과가 좋았으니 길게 말할 건 없으나 개인적으로는 조금 아쉽기도 했습니다. 자율 프로젝트라 함은 내가 이때까지 배우고 사용했던 기술들을 총망라해서 할 수 있는 가장 최고의 결과물을 도출해야하는데, 과연 &lt;span style=&quot;color: #006dd7;&quot;&gt;이번 프로젝트에 내 모든 것을 쏟아부었을까?&lt;/span&gt; 하는 생각이 가장 먼저 떠올랐던 거 같습니다.&amp;nbsp;&lt;/i&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;i&gt;물론 취업 시즌이랑도 겹치고, 각자의 우선순위가 다르기 때문에 팀으로서 모두의 의견을 하나로 만들기는 힘들겠지만 조금의 시간이라도 내서 &lt;span style=&quot;color: #006dd7;&quot;&gt;각자의 목표와 방향성을 공유하는 시간&lt;/span&gt;을 꼭 가지셨으면 좋겠네요 !! 다들 파이팅입니다 :)&amp;nbsp;&lt;/i&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;</description>
      <category>일상</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/383</guid>
      <comments>https://hyul-mode.tistory.com/383#entry383comment</comments>
      <pubDate>Mon, 2 Dec 2024 11:41:20 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 20046번: Road Reconstruction (JAVA)</title>
      <link>https://hyul-mode.tistory.com/382</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/20046&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/20046&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728221524157&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {
    static int m, n;
    static int INF = 1000 * 1000 + 1;
    static int[][] arr;
    static int[] dx = {-1, 0, 1, 0};
    static int[] dy = {0, -1, 0, 1};
    static int[][] min_dis;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());
        m = Integer.parseInt(st.nextToken());
        n = Integer.parseInt(st.nextToken());

        arr = new int[m][n];

        for (int i = 0; i &amp;lt; m; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j &amp;lt; n; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        if (arr[0][0] == -1 || arr[m-1][n-1] == -1) {
            System.out.println(-1);
            return;
        }
        int ans = dijkstra(0, 0);
        System.out.println(ans);
    }

    public static int dijkstra(int x, int y) {
        min_dis = new int[m][n];
        for (int i = 0; i &amp;lt; m; i++) {
            Arrays.fill(min_dis[i], INF);
        }
        PriorityQueue&amp;lt;Pos&amp;gt; pq = new PriorityQueue&amp;lt;&amp;gt;((o1, o2) -&amp;gt; Integer.compare(o1.cost, o2.cost));
        min_dis[x][y] = (arr[x][y] == 0 ) ? 0 : arr[x][y];
        pq.offer(new Pos(x, y, min_dis[x][y]));

        while (!pq.isEmpty()) {
            Pos cur = pq.poll();

            if (cur.x == m - 1 &amp;amp;&amp;amp; cur.y == n - 1) return min_dis[cur.x][cur.y];

            if (min_dis[cur.x][cur.y] &amp;lt; cur.cost) continue;

            for (int i = 0; i &amp;lt; 4; i++) {
                int xx = cur.x + dx[i];
                int yy = cur.y + dy[i];
                if (0 &amp;lt;= xx &amp;amp;&amp;amp; xx &amp;lt; m &amp;amp;&amp;amp; 0 &amp;lt;= yy &amp;amp;&amp;amp; yy &amp;lt; n &amp;amp;&amp;amp; arr[xx][yy] != -1) {
                    int cost = arr[xx][yy]  + cur.cost;
                    if (min_dis[xx][yy] &amp;gt; cost) {
                        min_dis[xx][yy] = cost;
                        pq.offer(new Pos(xx, yy, cost));
                    }
                }
            }
        }
        return -1;
    }
}

class Pos {
    int x;
    int y;
    int cost;

    public Pos(int x, int y, int cost) {
        this.x = x;
        this.y = y;
        this.cost = cost;
    }
}&lt;/code&gt;&lt;/pre&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;문제를 풀면서 주의해야 할 부분은 시작점인 0,0을 무조건 0으로 초기화하면 안된다는 것입니다 ! 시작 지점이 막혀있을 수도 있으며 (-1), 시작 지점에 도로가 없는 상태(1 or 2)일 수도 있기 때문에 -1일 경우 -1을 리턴하도록, 1 or 2일 경우 해당 값을 가지고 갈 수 있도록 초기화 해줘야 합니다 !&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;또한 해당 문제를 최단 경로를 찾는 알고리즘인 BFS로 풀이하면 안될까라는 생각을 할 수도 있지만, BFS의 경우엔 모든 구간에서 똑같은 가중치를 가지고 있어야 하기에 위 문제와 같이 가중치가 1과 2로 다른 경우 다익스트라로 풀이하여햐 합니다 !&lt;/b&gt;&lt;/i&gt;&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;</description>
      <category>Java</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/382</guid>
      <comments>https://hyul-mode.tistory.com/382#entry382comment</comments>
      <pubDate>Sun, 6 Oct 2024 22:35:43 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 24511번: queuestack (JAVA)</title>
      <link>https://hyul-mode.tistory.com/381</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/24511&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/24511&lt;/a&gt;&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;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1719988243906&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;
public class prac {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        int[] queuestack = new int[n];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i &amp;lt; n; i++) {
            queuestack[i] = Integer.parseInt(st.nextToken()); // 해당 인덱스의 자료구조가 큐인지 스택인지 
        }

        Deque&amp;lt;Integer&amp;gt; dq = new ArrayDeque&amp;lt;&amp;gt;(); // 값을 넣고 뺼 덱 생성 

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i &amp;lt; n; i++) {
            int k = Integer.parseInt(st.nextToken());
            if (queuestack[i] == 0) { // stack은 후입선출이라 넣었다 빼는 값이 같기 때문에 제외하고 큐만 취급
                dq.add(k);
            }
        }

        int m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i &amp;lt; m; i++) {
            int v = Integer.parseInt(st.nextToken());
            dq.addFirst(v);
            sb.append(dq.pollLast()).append(&quot; &quot;);
        }
        System.out.println(sb);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;★&amp;nbsp;생각보다 어려웠던 문제였습니다 ! 처음엔 이중 for문을 사용해서 구현하였습니다. 그랬더니 시간 초과를 받았고, 입력 값 크기를 살펴보니 n과 m이 각각 100,000까지 들어올 수 있기 때문에 이중 for문을 사용하면 100억의 연산과정이 필요하게 됩니다 !&amp;nbsp;&lt;/i&gt;&lt;/b&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;b&gt;&lt;i&gt; ★ 큐는 선입선출의 구조를, 스택은 후입선출의 구조를 가지고 있습니다. 문제에서 주어진 조건을 확인해보면 stack의 경우엔 들어간 값이 바로 제거되기 때문에 굳이 고려해주지 않아도 됩니다 ! 그렇기에 queue 구조만 확인해주면 됩니다.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/381</guid>
      <comments>https://hyul-mode.tistory.com/381#entry381comment</comments>
      <pubDate>Wed, 3 Jul 2024 15:36:56 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Vue에서 컴포넌트 간에 데이터 전송하는 방식</title>
      <link>https://hyul-mode.tistory.com/380</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Props와 Emit&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;setup&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719446441334&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g @vue/cli // vue cli 설정

vue create my-vue-app // 프로젝트 생성

cd my-vue-app // 디렉토리 이동&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ChildComponent.vue&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719446524511&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;h2&amp;gt;자식 컴포넌트&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;부모로부터 받은 데이터: {{ data }}&amp;lt;/p&amp;gt;
    &amp;lt;button @click=&quot;updateData&quot;&amp;gt;데이터 업데이트&amp;lt;/button&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import { defineComponent, toRefs } from 'vue';

export default defineComponent({
  name: 'ChildComponent',
  props: {
    data: {
      type: String,
      required: true
    }
  },
  emits: ['updateData'],
  setup(props, { emit }) {
    const { data } = toRefs(props);

    const updateData = () =&amp;gt; {
      emit('updateData', '안녕하세요, 부모 컴포넌트!');
    };

    return {
      data,
      updateData
    };
  }
});
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ParentComponent.vue&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719446589349&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;h1&amp;gt;부모 컴포넌트&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;부모 데이터: {{ parentData }}&amp;lt;/p&amp;gt;
    &amp;lt;ChildComponent :data=&quot;parentData&quot; @updateData=&quot;handleUpdate&quot; /&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  setup() {
    const parentData = ref('안녕하세요, 자식 컴포넌트!');

    const handleUpdate = (newData) =&amp;gt; {
      parentData.value = newData;
    };

    return {
      parentData,
      handleUpdate
    };
  }
};
&amp;lt;/script&amp;gt;&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;2. Mitt 라이브러리&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mitt 라이브러리란?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: JavaScript와 TypeScript를 위한 매우 간단하고 작은 이벤트 발행-구독(pub/sub) 라이브러리입니다. MITT는 특히 브라우저 환경이나 Node.js 환경에서 이벤트를 간단하게 관리하기 위해 설계되었습니다. 이 라이브러리는 성능이 뛰어나고, 설치 및 사용이 매우 간편하여 많은 개발자들이 선호합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719446619229&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install mitt // 라이브러리 설치&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;eventBus.js &lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719446640847&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import mitt from 'mitt';
const emitter = mitt();
export default emitter;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ChildComponent.vue&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719446710323&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;h2&amp;gt;자식 컴포넌트&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;부모로부터 받은 데이터: {{ parentData }}&amp;lt;/p&amp;gt;
    &amp;lt;button @click=&quot;updateData&quot;&amp;gt;데이터 업데이트&amp;lt;/button&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import emitter from '../eventBus';
import { defineComponent, toRefs } from 'vue';

export default defineComponent({
  name: 'ChildComponent',
  props: {
    parentData: {
      type: String,
      required: true
    }
  },
  setup(props) {
    const { parentData: receivedData } = toRefs(props);

    const updateData = () =&amp;gt; {
      emitter.emit('updateData', '안녕하세요, 부모 컴포넌트!');
    };

    return {
      receivedData,
      updateData
    };
  }
});
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ParentComponent.vue&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719446680248&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;h1&amp;gt;부모 컴포넌트&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;부모 데이터: {{ parentData }}&amp;lt;/p&amp;gt;
    &amp;lt;ChildComponent :parentData=&quot;parentData&quot; /&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import { ref, onMounted, onUnmounted } from 'vue';
import emitter from '../eventBus';
import ChildComponent from './ChildComponent.vue';

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  setup() {
    const parentData = ref('안녕하세요, 자식 컴포넌트!');

    const handleUpdate = (newData) =&amp;gt; {
      parentData.value = newData;
    };

    onMounted(() =&amp;gt; {
      emitter.on('updateData', handleUpdate);
    });

    onUnmounted(() =&amp;gt; {
      emitter.off('updateData', handleUpdate);
    });

    return {
      parentData,
    };
  }
};
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&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;h2 data-ke-size=&quot;size26&quot;&gt;3. Vuex와 같은 상태관리 방식&amp;nbsp;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719447702212&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install vuex@next // vueX 설치&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;store 설정&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719447729317&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { createStore } from 'vuex';

export default createStore({
  state: {
    message: '안녕하세요, 자식 컴포넌트!'
  },
  mutations: { // 상태 변경. 동기적 방식
    setMessage(state, newMessage) {
      state.message = newMessage;
    }
  },
  actions: { // 비동기 작업을 포함한 복잡한 로직을 처리
    updateMessage({ commit }, newMessage) {
      commit('setMessage', newMessage);
    }
  },
  getters: { // 상태를 계산하거나 필터링한 결과
    message: (state) =&amp;gt; state.message
  }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;main.js&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719447747018&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { createApp } from 'vue';
import App from './App.vue';
import store from './store';

const app = createApp(App);
app.use(store);
app.mount('#app');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ChildComponent.vue&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719447802706&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;h2&amp;gt;자식 컴포넌트&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;부모로부터 받은 데이터: {{ message }}&amp;lt;/p&amp;gt;
    &amp;lt;button @click=&quot;updateData&quot;&amp;gt;데이터 업데이트&amp;lt;/button&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import { computed } from 'vue';
import { useStore } from 'vuex';

export default {
  name: 'ChildComponent',
  setup() {
    const store = useStore();
    const message = computed(() =&amp;gt; store.getters.message);

    const updateData = () =&amp;gt; {
      store.dispatch('updateMessage', '안녕하세요, 부모 컴포넌트!');
    };

    return {
      message,
      updateData
    };
  }
};
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ParentComponent.vue&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1719447790053&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;h1&amp;gt;부모 컴포넌트&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;부모 데이터: {{ message }}&amp;lt;/p&amp;gt;
    &amp;lt;ChildComponent /&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import { computed } from 'vue';
import { useStore } from 'vuex';
import ChildComponent from './ChildComponent.vue';

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  setup() {
    const store = useStore();
    const message = computed(() =&amp;gt; store.getters.message);

    return {
      message
    };
  }
};
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&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;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qVs7E/btsIeGjQCqq/ks8FmFMAHdaKrk3ChQyn4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qVs7E/btsIeGjQCqq/ks8FmFMAHdaKrk3ChQyn4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qVs7E/btsIeGjQCqq/ks8FmFMAHdaKrk3ChQyn4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqVs7E%2FbtsIeGjQCqq%2Fks8FmFMAHdaKrk3ChQyn4K%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;633&quot; height=&quot;245&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;245&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;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYFucR/btsIdNYoy34/uI8xgLwukgOVpeews5EtiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYFucR/btsIdNYoy34/uI8xgLwukgOVpeews5EtiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYFucR/btsIdNYoy34/uI8xgLwukgOVpeews5EtiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYFucR%2FbtsIdNYoy34%2FuI8xgLwukgOVpeews5EtiK%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;748&quot; height=&quot;245&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Summary&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&lt;b&gt;props 및 emit 방식&lt;/b&gt;: 단방향 데이터 흐름이 명확하고, 작은 애플리케이션에 적합함. 그러나 깊이 있는 컴포넌트 구조에서는 복잡해질 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;mitt 라이브러리 방식&lt;/b&gt;: 컴포넌트 계층에 구애받지 않고 이벤트를 통해 데이터를 전달 가능. 그러나 네임스페이스 충돌과 이벤트 추적의 어려움이 있을 수 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vuex와 같은 상태 관리 방식&lt;/b&gt;: 중앙 집중식으로 상태를 관리하여 대규모 애플리케이션에 적합. 그러나 설정과 사용이 복잡하고, 학습 곡선이 있을 수 있음.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 자신의 프로젝트에 맞는 방식을 채택하면 됨 !!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Vue</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/380</guid>
      <comments>https://hyul-mode.tistory.com/380#entry380comment</comments>
      <pubDate>Fri, 28 Jun 2024 12:49:10 +0900</pubDate>
    </item>
    <item>
      <title>[자료구조] 세그먼트 트리 (Segment Tree)</title>
      <link>https://hyul-mode.tistory.com/379</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;세그먼트 트리란 ?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;배열 또는 리스트와 같은 데이터 구조를 이용하여 구간에 대한 질의를 효율적으로 처리하는 자료구조&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;주어진 구간에 대한 쿼리 연산을 빠르게 수행할 수 있도록 도와줌. 주로 구간 합, 최솟값 최댓값 등.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;트리 구조를 사용하여 데이터를 분할하고 각 분할된 영역에 대한 요약정보를 저장. 이를 통해 트정 구간에 대한 연산을 빠르게 수행할 수 있음&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;트리를 구축하는 초기 비용이 크지만, 이 후 구간 질의에 대해 빠르게 답을 제공할 수 있음으로 효율적&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;세그먼트 트리 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcKeSo/btsFckkWroo/gFa8nXUrEj8ijo0pwRFh4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcKeSo/btsFckkWroo/gFa8nXUrEj8ijo0pwRFh4K/img.png&quot; data-alt=&quot;출처:&amp;amp;amp;nbsp;https://yongj.in/data%20structure/Segment-Tree/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcKeSo/btsFckkWroo/gFa8nXUrEj8ijo0pwRFh4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcKeSo%2FbtsFckkWroo%2FgFa8nXUrEj8ijo0pwRFh4K%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;648&quot; height=&quot;457&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;amp;nbsp;https://yongj.in/data%20structure/Segment-Tree/&lt;/figcaption&gt;
&lt;/figure&gt;
&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;시간복잡도&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;트리를 구축: O(N)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;합, 곱 계산(쿼리 연산): O(logN)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;값의 갱신(업데이트 연산): O(logN)&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;=&amp;gt; N은 배열의 크기이며, 구간에 대한 연산을 처리하는 경우 logN만큼의 시간이 들기 때문에 &lt;span style=&quot;color: #0593d3;&quot;&gt;세그먼트 트리의 시잔복잡도는 O(logN)&lt;/span&gt;으로 볼 수 있습니다.&amp;nbsp;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그럼 세그먼트 트리를 왜 쓰나 ?&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;누적합&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;누적합의 시간 복잡도는 배열의 길이에 비례함. 배열을 N이라고 했을 때 누적합을 구하는 &lt;span style=&quot;color: #0593d3;&quot;&gt;시간 복잡도는 O(N)&lt;/span&gt;인데, 이는 배열의 각 요소를 한번씩 순회하여 누적합을 계산하기 때문입니다.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;따라서 배열의 크기게 선형적으로 비례하는 시간이 소요됩니다.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;동적 프로그래밍(DP)&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;DP의 시간복잡도는 문제의 특성과 구현 방식에 따라 달라짐. 하지만 일반적으로는 하위 문제들의 수와, 각 하위 문제를 해결하는 데 걸리는 시간에 따라 결정됨.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;메모이제이션을 통해 이미 해결된 문제들을 저장하고 재활용하는 경우, 각 하위 문제를 한번씩만 계산하게 되고, 하위 문제들의 수를 N이라고 할 때, &lt;span style=&quot;color: #0593d3;&quot;&gt;시간 복잡도는 O(N)&lt;/span&gt;이 나오게 됩니다.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;i&gt;=&amp;gt; 세그먼트 트리가 훨씬 빠름&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;구현&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 트리 크기 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708648801975&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 트리 크기 설정

// 생성자 함수로 설정할 때
 public SegmentTree(int arrSize) { 
            int h = (int) Math.ceil(Math.log(arrSize) / Math.log(2)); // 트리 높이
            this.treeSize = (int) Math.pow(2,h+1); // 높이를 통해 배열 크기 구하기
            tree = new long[treeSize];
        }
        
// 약식으로 설정
tree = new long[N*4];

/*
N = 12 (데이터의 개수)
=&amp;gt; 세그먼트 트리의 전체 크기를 구하기 위해서는 2^k로 N보다 바로 큰 값을 만들 수 있는 k를 찾아야 함.
=&amp;gt; k는 4고, 2^k는 16. 16*2 =&amp;gt; 32. 
=&amp;gt; 넉넉하게 N에 4를 곱해준 값으로 트리의 크기를 설정. 
*/&lt;/code&gt;&lt;/pre&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;b&gt;2. 트리 초기화&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708649567798&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 트리 초기화

/*
세그먼트 트리 초기화 단계
1. 트리의 루트(root) 노드부터 시작합니다.
2. 배열의 전체 구간을 표현하는 루트 노드의 구간을 계산하고 값을 할당합니다.
3. 재귀적으로 왼쪽 서브트리와 오른쪽 서브트리를 초기화합니다.
4. 각 노드의 구간을 계산하고 해당 구간에 속하는 배열 요소들의 값을 합산하여 현재 노드에 저장합니다.
5.리프(leaf) 노드까지 이 과정을 반복합니다.
*/

// tree: 원소 배열, node: 현재 노드, start: 현재 구간의 시작점, edn: 현재 구간의 끝점
public  long init(long[] tree, int node, int start, int end) {
	// 배열의 시작과 끝이 같으면 리프 노드! 
    if (start == end) return tree[node] = arr[start]; 

	// 아니면 자식 노드 합을 저장. 재귀 형식임 
    int mid = (start+end) / 2;
    return tree[node] = init(tree,node*2,start,mid) + init(tree,node*2+1,mid+1,end);
}&lt;/code&gt;&lt;/pre&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;b&gt;3. 값 갱신&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708649754323&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 값 갱신 

public  void update(long[] tree, int node, int start, int end, int idx, long diff) {
    if (idx &amp;lt; start || idx &amp;gt; end) return; // 범위밖에 있는 경우

	// 값이 변경되는 차이만큼 원소 갱신
    tree[node] += diff; 

    int mid = (start+end) / 2;
    if (start != end) { // 재귀로 리프 노드까지 값 변경 진핸
        update(tree,node*2,start,mid,idx,diff);
        update(tree,node*2+1,mid+1,end,idx,diff);
    }
}&lt;/code&gt;&lt;/pre&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;b&gt;4. 구간 합 연산&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708651158776&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 구간 합 연산

/*
구간 합 연산 단계
1. 구간이 포함하는 노드들을 찾습니다. 이는 세그먼트 트리의 특성에 따라 수행됩니다.
2. 구간이 포함하는 노드들의 값을 합하여 구간의 부분 합을 계산합니다.
3. 필요에 따라 노드들을 재귀적으로 탐색하여 구간을 더 세분화하고 각 부분 구간의 합을 계산합니다.
4. 최종적으로 모든 부분 구간의 합을 더하여 전체 구간의 합을 얻습니다.
*/

public static long sum(int node, int start, int end, int left, int right) {
	if ( left &amp;gt; end || right &amp;lt; start) return 0; // 범위를 벗어나는 경우
		
	if (left &amp;lt;= start &amp;amp;&amp;amp; end &amp;lt;= right) return tree[node]; //범위를 완전히 포함하는 경우
		
    // 재귀로 지속적으로 구간 값 연산 진행
	int mid = (start+end) / 2;
	return sum(node*2,start,mid,left,right) + sum(node*2+1,mid+1,end,left,right);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 문제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2042&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2042&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708651309456&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2042번: 구간 합 구하기&quot; data-og-description=&quot;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2042&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2042&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jkwSi/hyVm4fmGks/5lbjzR2fW6LoTbJTN5JMgk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2042&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2042&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jkwSi/hyVm4fmGks/5lbjzR2fW6LoTbJTN5JMgk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2042번: 구간 합 구하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1708651331103&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

class Main {
    static long[] arr;
    static int a,b;
    static long c;

    public static class SegmentTree {
        long[] tree;
        int treeSize;

        public SegmentTree(int arrSize) {
            int h = (int) Math.ceil(Math.log(arrSize) / Math.log(2));
            this.treeSize = (int) Math.pow(2,h+1);
            tree = new long[treeSize];
        }

        public  long init(long[] tree, int node, int start, int end) {
            if (start == end) return tree[node] = arr[start];

            int mid = (start+end) / 2;
            return tree[node] = init(tree,node*2,start,mid) 
            		+ init(tree,node*2+1,mid+1,end);
        }

        public  void update(long[] tree, int node, int start, int end, int idx, long diff) {
            if (idx &amp;lt; start || idx &amp;gt; end) return;

            tree[node] += diff;

            int mid = (start+end) / 2;
            if (start != end) {
                update(tree,node*2,start,mid,idx,diff);
                update(tree,node*2+1,mid+1,end,idx,diff);
            }
        }

        public  long sum(long[] tree, int node, int start, int end, int left, int right) {
            if (left &amp;gt; end || right &amp;lt; start) return 0;

            if (left &amp;lt;= start &amp;amp;&amp;amp; end &amp;lt;= right) {
                return tree[node];
            }

            int mid = (start+end) / 2;
            return sum(tree,node*2,start,mid,left,right) 
            		+ sum(tree,node*2+1,mid+1,end,left,right);
        }

    }

    public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
    StringBuilder sb = new StringBuilder();

    int N = Integer.parseInt(st.nextToken());
    int M = Integer.parseInt(st.nextToken());
    int k = Integer.parseInt(st.nextToken());
    arr = new long[N+1];

    for (int i=1; i&amp;lt;=N;i++) {
        arr[i] = Long.parseLong(br.readLine());
    }

    SegmentTree sgTree = new SegmentTree(N);

    sgTree.init(sgTree.tree,1,1,N);

    for (int i=0; i&amp;lt; M+k;i++) {
        st = new StringTokenizer(br.readLine());
        a = Integer.parseInt(st.nextToken());
        b = Integer.parseInt(st.nextToken());
        c = Long.parseLong(st.nextToken());

        if (a == 1) { 
             sgTree.update(sgTree.tree,1,1,N,b,c-arr[b]);
             arr[b] = c; // update 연산시, 배열 arr도 함께 바꿔줘야 트리의 값을 변경할 때 반영됨
        }
        else {
            sb.append(sgTree.sum(sgTree.tree,1,1,N,b,(int) c)).append(&quot;\n&quot;);
        	}
    	}
    System.out.println(sb);
	}
}&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size20&quot;&gt;Tips&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;i&gt;트리의 크기는 데이터의 개수 * 4로 설정하기 !!&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;i&gt;입력으로 초기값이 들어오지 않으면, 초기화하는 과정 필요없음 !! (init 메서드 생략)&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Java</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/379</guid>
      <comments>https://hyul-mode.tistory.com/379#entry379comment</comments>
      <pubDate>Fri, 23 Feb 2024 11:09:43 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 10423번: 전기가 부족해 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/378</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10423&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/10423&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708605009974&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;10423번: 전기가 부족해&quot; data-og-description=&quot;첫째 줄에는 도시의 개수 N(1 &amp;le; N &amp;le; 1,000)과 설치 가능한 케이블의 수 M(1 &amp;le; M &amp;le; 100,000)개, 발전소의 개수 K(1 &amp;le; K &amp;le; N)개가 주어진다. 둘째 줄에는 발전소가 설치된 도시의 번호가 주어진다. 셋째&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10423&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10423&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dGobgv/hyVqf7hRRF/ECtOEKWQtQdfr5FNQk1azk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10423&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10423&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dGobgv/hyVqf7hRRF/ECtOEKWQtQdfr5FNQk1azk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10423번: 전기가 부족해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 도시의 개수 N(1 &amp;le; N &amp;le; 1,000)과 설치 가능한 케이블의 수 M(1 &amp;le; M &amp;le; 100,000)개, 발전소의 개수 K(1 &amp;le; K &amp;le; N)개가 주어진다. 둘째 줄에는 발전소가 설치된 도시의 번호가 주어진다. 셋째&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1708605065437&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {

static int N,M,K,ans;
    static boolean[] visited;
    static ArrayList&amp;lt;ArrayList&amp;lt;Node&amp;gt;&amp;gt; graph;
    static ArrayList&amp;lt;Integer&amp;gt; elec;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());

         N = Integer.parseInt(st.nextToken());
         M = Integer.parseInt(st.nextToken());
         K = Integer.parseInt(st.nextToken());

         elec = new ArrayList&amp;lt;Integer&amp;gt;();
         visited = new boolean[N+1];
         graph = new ArrayList&amp;lt;ArrayList&amp;lt;Node&amp;gt;&amp;gt;();

         for (int i=0; i&amp;lt;=N; i++) {
            graph.add(new ArrayList&amp;lt;&amp;gt;());
         }

         st = new StringTokenizer(br.readLine());
         for (int i=0; i&amp;lt;K; i++) {
            elec.add(Integer.parseInt(st.nextToken())); 
         }

         for (int i=0; i&amp;lt;M; i++) {
            st = new StringTokenizer(br.readLine());
            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());
            int w = Integer.parseInt(st.nextToken());
            graph.get(u).add(new Node(v,w));
            graph.get(v).add(new Node(u,w));
         }

         Prim();
         System.out.println(ans);
    
    }

    public static void Prim() {
        PriorityQueue&amp;lt;Node&amp;gt; pq = new PriorityQueue&amp;lt;Node&amp;gt;();

        ans = 0;

        for (int i=0; i&amp;lt;elec.size(); i++) { // 발전소가 있는 위치를 우선순위 큐에 한번에 넣어줌
            pq.offer(new Node(elec.get(i),0));
        }

        while (!pq.isEmpty()) {
            Node cur = pq.poll();

            if (visited[cur.x]) continue;

            visited[cur.x] = true;
            ans += cur.weight;

            for (Node next: graph.get(cur.x)) {
                if (!visited[next.x] &amp;amp;&amp;amp; check(next.x)) {
                    pq.offer(new Node(next.x, next.weight));
                }
            }
        }
    }

    public static boolean check(int x) {
        if (elec.contains(x)) return false;
        return true;
    }
}

class Node implements Comparable&amp;lt;Node&amp;gt;{
    int x;
    int weight;
    public Node(int x, int weight) {
        this.x = x;
        this.weight = weight;
    }
    @Override
    public int compareTo(Node o) {
        return this.weight - o.weight;
    }
}&lt;/code&gt;&lt;/pre&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 contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 문제 유형은 최소 신장 트리이고, 간선의 수가 정점의 수보다 많기 때문에 저는 &quot;프림&quot; 알고리즘을 사용해 문제를 해결하였습니다.&lt;/b&gt;&lt;/i&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;i&gt;&lt;b&gt; ★ 전체적인 틀은 프림 알고리즘의 기본 구조와 크게 다르지 않습니다. 전 두가지를 고려해줬습니다.&lt;/b&gt;&lt;/i&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;i&gt;&lt;b&gt;1. 발전소의 위치를 한번에 우선순위 큐에 넣은 뒤, prim 알고리즘을 수행한다.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;2. 발전소가 있는 정점이면 따로 방문하지 않는다.&lt;/b&gt;&lt;/i&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;i&gt;&lt;b&gt;사실 1번은 이전에 비슷한 유형의 문제를 풀어본 경험이 없다면 아이디어가 쉽게 떠오르지 않았을 거라고 생각하기도 했습니다 ! (하지만 정답률이 꽤 높군요 ㅎㅎ)&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/378</guid>
      <comments>https://hyul-mode.tistory.com/378#entry378comment</comments>
      <pubDate>Thu, 22 Feb 2024 21:36:27 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 1268번: 임시 반장 정하기 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/377</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1268&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1268&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1707870519862&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1268번: 임시 반장 정하기&quot; data-og-description=&quot;오민식 선생님은 올해 형택초등학교 6학년 1반 담임을 맡게 되었다. 오민식 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다. &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1268&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1268&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kpHK0/hyVi8IifTc/n8MznQQgHNPSDJJ33uvgSK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1268&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1268&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kpHK0/hyVi8IifTc/n8MznQQgHNPSDJJ33uvgSK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1268번: 임시 반장 정하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오민식 선생님은 올해 형택초등학교 6학년 1반 담임을 맡게 되었다. 오민식 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1707870556793&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		int N = Integer.parseInt(br.readLine());
		int[][] arr = new int[N][5];
		
		for (int i = 0; i&amp;lt; N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j=0; j&amp;lt; 5; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		int max_v = Integer.MIN_VALUE;
		int ans = 0;
		for (int i=0; i&amp;lt;N; i++) {
			int cnt = 0;
			for (int j=0; j&amp;lt;N;j++) {
				if (i == j) continue;
				else {
					for (int k=0; k&amp;lt;5; k++) {
						if (arr[i][k] == arr[j][k]) {
							cnt++;
							break;
						}
					}
				}
			}
			if (cnt &amp;gt; max_v) {
				max_v = cnt;
				ans = i+1;
			}
		}
        
		sb.append(ans);
		System.out.println(sb);
		
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 연산횟수를 어림잡아봤을 때, 3중 반복문으로도 충분히 풀 수 있을 거 같았습니다 ! 학생별로 각 학년마다 몇반이었는지를 다른 모든 학생들과 비교해줬습니다. 이 때 주의해야 할 부분은 &lt;span style=&quot;color: #006dd7;&quot;&gt;한번이라도 같은 반이었던 사람이 가장 많은 학생을 임시반장으로 선정한다는 것&lt;/span&gt;입니다. 저는 이 부분을 고려하지 않아서 맞왜틀을 2번 시전했습니당 :)&amp;nbsp;&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ 위 조건은 한 학생이 다른 사람과 여러 학년에 걸쳐서 같은 반이 되었더라도, 한번만 카운트해줘야 한다는 것입니다 ! 그렇기에 반복문을 돌면서 break문으로 빠져나와줬습니다.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/377</guid>
      <comments>https://hyul-mode.tistory.com/377#entry377comment</comments>
      <pubDate>Wed, 14 Feb 2024 09:33:47 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 7570번: 줄 세우기 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/376</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7570&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/7570&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1707825571429&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;7570번: 줄 세우기&quot; data-og-description=&quot;입력은 2 개의 줄로 이루어져 있다. 첫 줄에는 어린이 수를 나타내는 정수가 주어진다. 둘째 줄에는 처음에 줄서있는 어린이들의 번호가 차례대로 주어진다. 주어진 번호들 사이에는 공백이 하&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/7570&quot; data-og-url=&quot;https://www.acmicpc.net/problem/7570&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnIrEq/hyVjoc7AaR/8sMi9gYZ3cGXNdFpBCXKd1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7570&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/7570&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnIrEq/hyVjoc7AaR/8sMi9gYZ3cGXNdFpBCXKd1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;7570번: 줄 세우기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;입력은 2 개의 줄로 이루어져 있다. 첫 줄에는 어린이 수를 나타내는 정수가 주어진다. 둘째 줄에는 처음에 줄서있는 어린이들의 번호가 차례대로 주어진다. 주어진 번호들 사이에는 공백이 하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1707825611487&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package Baekjoon.DP;
import java.io.*;
import java.util.*;

class P7570 {
    public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		// 뽑은 수를 맨 뒤와 앞으로만 이동시킬 수 있기 때문에, 증가하는 부분수열은 연속적이어야 함 !
		// 그게 아니라 아무데나 집어넣을 수 있으면 연속적이지 않아도 됨. 
		int N = Integer.parseInt(br.readLine());
		int[] dp = new int[N+1];

		st = new StringTokenizer(br.readLine());
		for (int i=0; i&amp;lt;N;i++) {
			int k = Integer.parseInt(st.nextToken());
			dp[k] = dp[k-1]+1;
		}

        sb.append(N-Arrays.stream(dp).max().getAsInt());
        System.out.println(sb);
        
	}
}&lt;/code&gt;&lt;/pre&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 contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2631&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2631&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1707825655504&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2631번: 줄세우기&quot; data-og-description=&quot;KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2631&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2631&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dJnxow/hyVjlAxvL0/kmCFWhgHO7AFu500MDP7j0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2631&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2631&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dJnxow/hyVjlAxvL0/kmCFWhgHO7AFu500MDP7j0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2631번: 줄세우기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;i&gt;&lt;b&gt;★&lt;span&gt;&amp;nbsp;&lt;/span&gt; 위 문제와 비슷한 유형의 문제이지만 이동하는 학생이 아무데나 갈 수 있는 것이 아니라, 줄의 맨 앞과 뒤로만 이동할 수 있다는 점이 차이입니다. &lt;span style=&quot;color: #006dd7;&quot;&gt;이는 곧 증가하는 부분 수열이지만, 연속적인 수를 가져야 한다는 의미입니다 !&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/i&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;i&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예시로, 5 2 4 1 3이 주어진 경우, 2와 3은 움직이지 않고 5, 4, 1만 맨 앞, 뒤로 보내면서 조건을 만족하는 수열을 만들 수 있습니다 ! 이때 dp의 인덱스는 0번부터 시작하는 것이 아니라, 수열의 값이 dp의 인덱스가 됩니다. 그렇기에 자기 자신의 바로 전&amp;nbsp; dp의 값이 +1을 한 값이 자신의 dp 값이 됩니다 ! &lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/376</guid>
      <comments>https://hyul-mode.tistory.com/376#entry376comment</comments>
      <pubDate>Tue, 13 Feb 2024 21:12:48 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 2631번: 줄세우기 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/375</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2631&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2631&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1707824889679&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2631번: 줄세우기&quot; data-og-description=&quot;KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2631&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2631&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dJnxow/hyVjlAxvL0/kmCFWhgHO7AFu500MDP7j0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2631&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2631&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dJnxow/hyVjlAxvL0/kmCFWhgHO7AFu500MDP7j0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2631번: 줄세우기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1707824917827&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package Baekjoon.DP;
import java.io.*;
import java.util.*;

class P2631 {
    public static void main(String[] args)throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
        int[] dp = new int[N];

        for (int i=0; i&amp;lt;N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        for (int i=0; i&amp;lt;N; i++) {
            dp[i] = 1;
            for (int j=0; j&amp;lt;i; j++) {
                if (arr[i] &amp;gt; arr[j]) {
                    dp[i] = Math.max(dp[i],dp[j]+1);
                }
            }
        }

        sb.append(N - Arrays.stream(dp).max().getAsInt());
        System.out.println(sb);
        
    }
}&lt;/code&gt;&lt;/pre&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 contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 일반적인 LIS(Longest Increasing Subsequence, 최장 증가 수열)을 활용하는 문제입니다. 문제에서 주어진 수열을 가지고 예시를 들어보면, &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: center;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: center;&quot;&gt;3 7 5 2 6 1 4&lt;/span&gt; 이라는 값 중, 최장 증가 수열은 3, 5, 6인 것을 알 수 있습니다. 그럼 3, 5, 6은 고정되어 있고, 나머지 수인 7,2,1,4만 움직여서 주어진 수열을 오름차순 정렬할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/i&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;i&gt;&lt;b&gt; ★ 최종적으로는 LIS 중 가장 긴 값을 찾아주고, 전체 값인 N에서 LIS를 빼준 값을 출력해주면 됩니다:)&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/375</guid>
      <comments>https://hyul-mode.tistory.com/375#entry375comment</comments>
      <pubDate>Tue, 13 Feb 2024 20:58:34 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 10999번: 구간 합 구하기 2 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/374</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10999&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/10999&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1707226179219&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;10999번: 구간 합 구하기 2&quot; data-og-description=&quot;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10999&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10999&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b13Mo3/hyVf7iukjN/lrjvdF6QqGUUSFN9VGXpt0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10999&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10999&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b13Mo3/hyVf7iukjN/lrjvdF6QqGUUSFN9VGXpt0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10999번: 구간 합 구하기 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1707226243680&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

class Main {
    static long[] tree,lazy,arr;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        arr = new long[N+1];
        tree = new long[N*4];
        lazy = new long[N*4];

        for (int i=1; i&amp;lt;= N;i++) {
            arr[i] = Long.parseLong(br.readLine());
        }

        init(1, 1, N);

        for (int i=0; i&amp;lt;M+K;i++) {
            st = new StringTokenizer(br.readLine());
            int cmd = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            int c = Integer.parseInt(st.nextToken());
            if (cmd == 1) {
                long d = Long.parseLong(st.nextToken());
                update(1, 1, N, b, c, d);
                
            }
            else {
                if (b&amp;lt;=c) {
                    sb.append(sum(1, 1, N, b, c)).append(&quot;\n&quot;);
                }
                else {
                    sb.append(sum(1, 1, N, c, b)).append(&quot;\n&quot;);
                }

            }
        }
        System.out.println(sb);
    }    

    public static long init(int node, int start, int end) {
        if (start == end) return tree[node] = arr[start];		
		
		int mid = (start + end) / 2;
		return tree[node] = init(node*2,start,mid) + init(node*2+1,mid+1,end);
    }

    public static void wait(int node, int start, int end) {
        if (lazy[node] != 0) {
            if (start != end) {
                lazy[node*2] += lazy[node];
                lazy[node*2+1] += lazy[node];
            }
            tree[node] += lazy[node] *(end-start+1);
            lazy[node] = 0;
        }
    }

    public static void update(int node, int start, int end, int left, int right, long value) {
        wait(node,start,end);
        if (left &amp;gt; end || right &amp;lt; start) return;

        if (left &amp;lt;= start &amp;amp;&amp;amp; end &amp;lt;= right) {
            lazy[node] = value;
            wait(node, start, end);
            return;
        }

        int mid = (start + end) / 2;
        update(node*2, start, mid, left, right, value);
        update(node*2+1, mid+1, end, left, right, value);
        tree[node] = tree[node*2]+tree[node*2+1];
    }

    public static long sum(int node, int start, int end, int left, int right) {
        wait(node, start, end);
        if (left &amp;gt; end || right &amp;lt; start) return 0;

        if (left &amp;lt;= start &amp;amp;&amp;amp; end &amp;lt;= right) return tree[node];

        int mid = (start + end) / 2;
        return sum(node*2, start, mid, left, right) 
        	+ sum(node*2+1, mid+1, end, left, right);
    }
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/374</guid>
      <comments>https://hyul-mode.tistory.com/374#entry374comment</comments>
      <pubDate>Tue, 6 Feb 2024 22:45:21 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] BFS - 너비 우선 탐색 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/373</link>
      <description>&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;b&gt;BFS란&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;루트 노드 (혹은 시작 노드)에서 시작하여 인접한 노드를 먼저 방문하는 알고리즘입니다. 즉 DFS와 같이 깊이를 먼저 탐색하는 것이 아니라 자신 주변을 넓게 탐색하여 너비 우선 탐색이라고 불립니다.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;BFS로 최단경로를 찾을 수 있는 이유는 한 정점에서 연결되는 모든 길을 &quot;한번씩&quot; 탐색하기 때문입니다. 특정 노드와 연결된 노드 사이의 길이는 1이기 때문에 같은 방식으로 모든 노드 사이의 거리를 구할 수 있기 때문입니다. 하지만 가중치가 있는 그래프의 경우 BFS를 사용할 수 없습니다 !&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;BNhJLpgkqMRkwNcShBgneHPzh0UVsvaQ0XkdQ66nhrfU_0SUw1sR4zlogg3XK9zhwrhoU0N7N2RsOI-HJz9PIw.gif&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJDnm/btsElhvDL2W/fbV6QWyFPOLFgiNfaM7Gi0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJDnm/btsElhvDL2W/fbV6QWyFPOLFgiNfaM7Gi0/img.gif&quot; data-alt=&quot;출처: 나무위키&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJDnm/btsElhvDL2W/fbV6QWyFPOLFgiNfaM7Gi0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/wJDnm/btsElhvDL2W/fbV6QWyFPOLFgiNfaM7Gi0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;333&quot; data-filename=&quot;BNhJLpgkqMRkwNcShBgneHPzh0UVsvaQ0XkdQ66nhrfU_0SUw1sR4zlogg3XK9zhwrhoU0N7N2RsOI-HJz9PIw.gif&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 나무위키&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;BFS의 특징&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;그래프 탐색 시, 어떤 노드를 방문했는지 여부를 반드시 검사해야 합니다. 검사하지 않았을 경우, 무한루프에 빠질 수 있습니다.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;BFS 알고리즘은 일반적으로 선입선출(FIFO)의 특징을 가지는 큐 자료구조를 사용합니다.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;보통은 가중치가 없는 그래프에서 최단 경로를 찾거나, 임의의 경로를 찾고자 할 때 사용합니다&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;i&gt;Queue 구현 시, LinkedList&amp;nbsp; ? or ArrayDeque ? &lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ArrayDeque는 Queue의 서브 인터페이스인 Deque의 구현체, LinkedList는 List와 Quque의 구현체 !&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;- 연산 성능&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ArrayDeque과&amp;nbsp; LinkedList 모두 원소의 &lt;span style=&quot;color: #006dd7;&quot;&gt;삽입/삭제 연산은 O(1)&lt;/span&gt;로 뛰어납니다. 하지만 원소를 조회하는 속도에서 차이가 나는데, &lt;span style=&quot;color: #006dd7;&quot;&gt;LinkedList의 경우 O(n)&lt;/span&gt;의 시간복잡도를 가지지만&lt;span style=&quot;color: #006dd7;&quot;&gt; ArrayDeque의 경우엔 O(1)&lt;/span&gt;의 성능을 가집니다. 그 이유는 LinkedList에서는 순차접근만 가능하기 때문입니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;- 메모리&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;LinkedList의 경우에는 next, prev와 같은 참조자 또한 저장해줘야 하기 때문에 추가적인 메모리를 할당해야 합니다. 그렇기에 ArrayDeque보다 추가적인 공간이 더 필요할 수 밖에 없는 구조입니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;i&gt;BFS 예시&lt;/i&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2178&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2178&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706883320382&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2178번: 미로 탐색&quot; data-og-description=&quot;첫째 줄에 두 정수 N, M(2 &amp;le; N, M &amp;le; 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2178&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2178&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GLYBi/hyVf6bPfmQ/KQghim6mCAZ4oQ9bY3Y43k/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2178&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2178&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GLYBi/hyVf6bPfmQ/KQghim6mCAZ4oQ9bY3Y43k/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2178번: 미로 탐색&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 두 정수 N, M(2 &amp;le; N, M &amp;le; 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1706883309450&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package Baekjoon.BFS;
import java.util.*;
import java.io.*;

class P2178 {
    static int[][] arr;
    static int[] dx = {1,0,-1,0};
    static int[] dy = {0,-1,0,1};
    static int N,M;
    static boolean[][] visited;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        arr = new int[N][M];

        for (int i=0;i&amp;lt; N;i++) {
            String s = br.readLine();
            for (int j=0;j&amp;lt;M;j++) {
                arr[i][j] = s.charAt(j)- '0';
            }
        }

        visited = new boolean[N][M];
        visited[0][0] = true;
        BFS(0,0);
        sb.append(arr[N-1][M-1]);
        System.out.println(sb);

    }   
    
    public static void BFS(int x, int y) {
        Queue&amp;lt;Node&amp;gt; q = new ArrayDeque&amp;lt;&amp;gt;();
        q.add(new Node (x,y));

        while (!q.isEmpty()) {
            Node cur = q.poll();

            for (int i=0; i&amp;lt;4;i++) {
                int nx = cur.x + dx[i];
                int ny = cur.y + dy[i];

                if (nx &amp;gt;= 0 &amp;amp;&amp;amp; nx &amp;lt; N &amp;amp;&amp;amp; ny &amp;gt;= 0 &amp;amp;&amp;amp; ny &amp;lt; M) { // 범위 안에 있으면서
                    if (!visited[nx][ny] &amp;amp;&amp;amp; arr[nx][ny] != 0) { // 아직 방문 X, 0이 아닌경우
                        visited[nx][ny] = true;
                        arr[nx][ny] = arr[cur.x][cur.y] + 1;
                        q.add(new Node(nx,ny));
                    }
                }
            }
        }
    }
}

class Node {
    int x;
    int y;
    public Node(int x, int y) {
        this.x = x;
        this.y = y;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/373</guid>
      <comments>https://hyul-mode.tistory.com/373#entry373comment</comments>
      <pubDate>Sun, 4 Feb 2024 17:35:04 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 11505번: 구간 곱 구하기 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/372</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11505&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/11505&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706833120213&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;11505번: 구간 곱 구하기&quot; data-og-description=&quot;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le;&amp;nbsp;1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 곱을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11505&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11505&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qjJWb/hyVf9TQlwp/5ReNZ9Tm0zlF9IDdPhxNak/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11505&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11505&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qjJWb/hyVf9TQlwp/5ReNZ9Tm0zlF9IDdPhxNak/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11505번: 구간 곱 구하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le;&amp;nbsp;1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 곱을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1706833216059&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

class Main {
    static long[] arr;
    static int a,b,c;
    static final int MOD = 1000000007;

    public static class SegmentTree {
        long[] tree;
        int treeSize;

        public SegmentTree(int arrSize) {
            int h = (int) Math.ceil(Math.log(arrSize) / Math.log(2));
            treeSize = (int) Math.pow(2,h+1);
            tree = new long[treeSize];
        }

        public long init(long[] tree, int node, int start, int end) {
            if (start == end) return tree[node] = arr[start];

            int mid = (start+end) / 2;
            return tree[node] = init(tree,node*2,start,mid) 
            				* init(tree,node*2+1,mid+1,end) % MOD;
        }

        public long update(long[] tree, int node, int start, int end, int idx, int value) {
            if (idx &amp;lt; start || idx &amp;gt; end) return tree[node];
 
            if (start == end) return tree[node] = value;
            
            int mid = (start+end) / 2;
            return tree[node] = update(tree,node*2,start,mid,idx,value)
            				* update(tree,node*2+1,mid+1,end,idx,value) % MOD;
        }

        public long multi(long[] tree, int node, int start, int end, int left, int right) {
            if (left &amp;gt; end || right &amp;lt; start) return 1;

            if (left &amp;lt;= start &amp;amp;&amp;amp; end &amp;lt;= right) return tree[node];

            int mid = (start+end)/2;
            return multi(tree, node*2, start, mid, left, right) 
            	* multi(tree, node*2+1, mid+1, end, left, right) % MOD;
        }
    }


    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        arr = new long[N+1];

        for (int i=1; i&amp;lt;=N; i++) {
            arr[i] = Long.parseLong(br.readLine()); 
        }

        SegmentTree sgTree = new SegmentTree(N);

        sgTree.init(sgTree.tree, 1, 1, N);

        for (int i=0; i&amp;lt;M+K; i++) {
            st = new StringTokenizer(br.readLine(),&quot; &quot;);
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
            c = Integer.parseInt(st.nextToken());
            if (a == 1){
                arr[b] = c;
                sgTree.update(sgTree.tree, 1, 1, N, b, c);
            }
            else {
                sb.append(sgTree.multi(sgTree.tree, 1, 1, N, b, c)%MOD).append(&quot;\n&quot;);
            }
        }
        System.out.println(sb);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;★ 구간의 최대 곱을 구하는 방식은 최대합을 구하는 방식과는 조금 다릅니다. 구간의 합은 리프 노드부터 시작하지 않고, 위에서부터 아래로 내려가며, 값의 차이인 diff를 더해주는 방식이었습니다. 하지만 곱의 경우에는 0을 곱해주게 되면, 한번 0으로 초기화 된 값은 다시 0이 아닌 수로 바꿀 수 없기 때문에 리프 노드에서부터 밑에서 위로 읽어가며 곱셈을 수행해줘야 합니다 !&lt;/i&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/372</guid>
      <comments>https://hyul-mode.tistory.com/372#entry372comment</comments>
      <pubDate>Fri, 2 Feb 2024 09:27:05 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 2042번: 구간 합 구하기 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/371</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2042&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2042&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706832646175&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2042번: 구간 합 구하기&quot; data-og-description=&quot;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2042&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2042&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dkL7Dq/hyVgdPtZk8/GQSE41dvXmuY2Cym2RJVl1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2042&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2042&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dkL7Dq/hyVgdPtZk8/GQSE41dvXmuY2Cym2RJVl1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2042번: 구간 합 구하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)과 M(1 &amp;le; M &amp;le; 10,000), K(1 &amp;le; K &amp;le; 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt; 소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1706832669943&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

class Main {
    static long[] arr;
    static int a,b;
    static long c;

    public static class SegmentTree {
        long[] tree;
        int treeSize;

        public SegmentTree(int arrSize) {
            int h = (int) Math.ceil(Math.log(arrSize) / Math.log(2));
            this.treeSize = (int) Math.pow(2,h+1);
            tree = new long[treeSize];
        }

        public  long init(long[] tree, int node, int start, int end) {
            if (start == end) return tree[node] = arr[start];

            int mid = (start+end) / 2;
            return tree[node] = init(tree,node*2,start,mid) 
            					+ init(tree,node*2+1,mid+1,end);
        }

        public  void update(long[] tree, int node, int start, int end, int idx, long diff) {
            if (idx &amp;lt; start || idx &amp;gt; end) return;

            tree[node] += diff;

            int mid = (start+end) / 2;
            if (start != end) {
                update(tree,node*2,start,mid,idx,diff);
                update(tree,node*2+1,mid+1,end,idx,diff);
            }
        }

        public  long sum(long[] tree, int node, int start, int end, int left, int right) {
            if (left &amp;gt; end || right &amp;lt; start) return 0;

            if (left &amp;lt;= start &amp;amp;&amp;amp; end &amp;lt;= right)  return tree[node];

            int mid = (start+end) / 2;
            return sum(tree,node*2,start,mid,left,right) 
              		+ sum(tree,node*2+1,mid+1,end,left,right);
        }

    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        arr = new long[N+1];

        for (int i=1; i&amp;lt;=N;i++) {
            arr[i] = Long.parseLong(br.readLine());
        }

        SegmentTree sgTree = new SegmentTree(N);

        sgTree.init(sgTree.tree,1,1,N);

        for (int i=0; i&amp;lt; M+k;i++) {
            st = new StringTokenizer(br.readLine());
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
            c = Long.parseLong(st.nextToken());

            if (a == 1) {
                 sgTree.update(sgTree.tree,1,1,N,b,c-arr[b]);
                 arr[b] = c;
            }
            else {
                sb.append(sgTree.sum(sgTree.tree,1,1,N,b,(int) c)).append(&quot;\n&quot;);
            }
        }
        System.out.println(sb);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★세그먼트 트리를 사용하는 아주 기본적인 문제입니다 ! 구간의 합을 누적합이나 반복문으로 풀게 되면 시간초과가 발생하게 되고, 세그먼트 트리라는 알고리즘을 사용하여 풀어야 합니다 :)&amp;nbsp;&lt;/b&gt;&lt;/i&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt; &lt;b&gt;★ 세그먼트 트리 참고&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;a href=&quot;https://hongjw1938.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hongjw1938.tistory.com/20&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706832948236&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;자료구조 - 세그먼트 트리(Segment Tree)&quot; data-og-description=&quot;1. 세그먼트 트리(Segment Tree, 구간 트리)란? 특정 구간 내 연산(쿼리)에 대해 빠르게 응답하기 위해 만들어진 자료구조이다. 예를 들어 크기가 N=100인 int배열 arr이 있다면 1~100의 인덱스 내 숫자들&quot; data-og-host=&quot;hongjw1938.tistory.com&quot; data-og-source-url=&quot;https://hongjw1938.tistory.com/20&quot; data-og-url=&quot;https://hongjw1938.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/caGTLV/hyVceP6y3f/mAyvjCgVIj5rbCMAkdLWoK/img.png?width=562&amp;amp;height=112&amp;amp;face=0_0_562_112,https://scrap.kakaocdn.net/dn/bRQpws/hyVb9gVTwS/vuj2D23J8kjPhYz5wMXk5k/img.png?width=562&amp;amp;height=112&amp;amp;face=0_0_562_112,https://scrap.kakaocdn.net/dn/bD3gVM/hyVf5w8BPi/bLXX3Ch4tOrCFLrEbavCMk/img.png?width=772&amp;amp;height=391&amp;amp;face=392_220_442_275&quot;&gt;&lt;a href=&quot;https://hongjw1938.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hongjw1938.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/caGTLV/hyVceP6y3f/mAyvjCgVIj5rbCMAkdLWoK/img.png?width=562&amp;amp;height=112&amp;amp;face=0_0_562_112,https://scrap.kakaocdn.net/dn/bRQpws/hyVb9gVTwS/vuj2D23J8kjPhYz5wMXk5k/img.png?width=562&amp;amp;height=112&amp;amp;face=0_0_562_112,https://scrap.kakaocdn.net/dn/bD3gVM/hyVf5w8BPi/bLXX3Ch4tOrCFLrEbavCMk/img.png?width=772&amp;amp;height=391&amp;amp;face=392_220_442_275');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;자료구조 - 세그먼트 트리(Segment Tree)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 세그먼트 트리(Segment Tree, 구간 트리)란? 특정 구간 내 연산(쿼리)에 대해 빠르게 응답하기 위해 만들어진 자료구조이다. 예를 들어 크기가 N=100인 int배열 arr이 있다면 1~100의 인덱스 내 숫자들&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hongjw1938.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/371</guid>
      <comments>https://hyul-mode.tistory.com/371#entry371comment</comments>
      <pubDate>Fri, 2 Feb 2024 09:16:30 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 20529번: 가장 가까운 세 사람의 심리적 거리 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/370</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/20529&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/20529&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706703699636&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;20529번: 가장 가까운 세 사람의 심리적 거리&quot; data-og-description=&quot;각 테스트 케이스에 대한 답을 정수 형태로 한 줄에 하나씩 출력한다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/20529&quot; data-og-url=&quot;https://www.acmicpc.net/problem/20529&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RtarD/hyVgdBIl6H/wK8rLVZOYj0eZaQ6QlEw0K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/20529&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/20529&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RtarD/hyVgdBIl6H/wK8rLVZOYj0eZaQ6QlEw0K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;20529번: 가장 가까운 세 사람의 심리적 거리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;각 테스트 케이스에 대한 답을 정수 형태로 한 줄에 하나씩 출력한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1706703726235&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package Baekjoon.브루트포스;
import java.util.*;
import java.io.*;

class P20529 {
    static int bt;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		int T = Integer.parseInt(br.readLine());
		for (int t = 0; t &amp;lt; T; t++) {
			int N = Integer.parseInt(br.readLine());
			String[] arr = new String[N];
			StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
			int min_v = Integer.MAX_VALUE;
			
			for (int n = 0; n&amp;lt;N;n++) {
				arr[n] =  st.nextToken();
			}
			
			if (N &amp;gt; 32) { // 같은 mbti가 하나라도 3개 이상 있을 시, 답은 무조건 0임 
				sb.append(0).append(&quot;\n&quot;);
				continue;
			}
		
			else {
				for (int i=0; i&amp;lt;N-2;i++) {
					for (int j=i+1;j&amp;lt;N-1;j++) {
						for (int k=j+1; k&amp;lt;N; k++) {
							bt = 0;
							compare(arr[i],arr[j]);
							compare(arr[j],arr[k]);
							compare(arr[i],arr[k]);
							
							if (bt &amp;lt; min_v) {
								min_v = bt;
							} 
						}		
					}
				}
				sb.append(min_v).append(&quot;\n&quot;);
			}
		}	
		System.out.println(sb);
	}
	
	public static void compare(String x, String y) {
		for (int i=0; i&amp;lt;4;i++) {
			if (x.charAt(i) != y.charAt(i)) {
				bt += 1;
			}
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★&amp;nbsp;삼중 for문을 사용하면서 완탐으로 풀어도 되는 문제인지 긴가민가했습니다. 하지만&amp;nbsp; n이 32 초과일 경우엔 답이 0이 되고, 더이상의 반복문을 수행하지 않아도 되기에 괜찮습니다 !!&amp;nbsp;&lt;/b&gt;&lt;/i&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;i&gt;&lt;b&gt; ★ n이 32를 초과할 때 답이 0이 되는 이유는 다음과 같습니다. mbti는 총 2^4개로 16개가 있습니다. 입력에 같은 mbti가 2개까지만 들어온다면 이는 반복문을 통해 심리적 거리가 최소가 되는 경우를 찾아줘야 합니다. 하지만 32를 넘어가는 순간, 특정 mbti가 3개 들어왔다는 것을 알 수 있습니다. 특정&amp;nbsp; mbti가 3개일 경우 심리적 거리의 최소는 항상 0이기 때문에 답에 0을 저장하고 반복문을 빠져나와도 괜찮은 것입니다. (이는 예제 2번을 보면 더 잘 이해할 수 있습니다 ! )&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/370</guid>
      <comments>https://hyul-mode.tistory.com/370#entry370comment</comments>
      <pubDate>Wed, 31 Jan 2024 21:27:48 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] Prioirty Queue 우선순위 큐 (자료구조)</title>
      <link>https://hyul-mode.tistory.com/369</link>
      <description>&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;b&gt;우선순위 큐란 ?&lt;/b&gt;&lt;/h3&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; 일반적인 큐의 구조 FIFO(First In First Out)의 구조를 가지지만, 데이터가 들어온 순서대로 빠져나가는 것이 아니라, 우선순위를 결정하고, 우선순위에 따라 데이터가 출력되는 구조입니다 .&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;- 내부가 힙의 구조로 되어있기 때문에 O(nlogn)의 시간복잡도를 가지게 됩니다.&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;&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;b&gt;우선순위 큐 선언&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1706433901849&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.PriorityQueue;

PriorityQueue&amp;lt;&amp;gt; hq = new PriorityQueue&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&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;b&gt;우선순위에 따른 최대, 최소 힙&amp;nbsp;&lt;/b&gt;&lt;/h3&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;b&gt;- 최소힙: 최솟값이 우선순위인 큐&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706434228671&quot; class=&quot;java&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.util.PriorityQueue;

PriorityQueue&amp;lt;&amp;gt; hq = new PriorityQueue&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&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;b&gt;- 최대힙: 최댓값이 우선순위인 큐&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706434235750&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.PriorityQueue;
import java.util.Collections; 

PriorityQueue&amp;lt;&amp;gt; hq = new PriorityQueue&amp;lt;&amp;gt;(Collections.reverseOrder());&lt;/code&gt;&lt;/pre&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;b&gt;우선순위 큐에 데이터 삽입, 삭제, 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 값을 삽입, 제거할 때 O(n)의 시간복잡도 발생. &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706434458482&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.PriorityQueue;

PriorityQueue&amp;lt;&amp;gt; hq = new PriorityQueue&amp;lt;&amp;gt;();

// 삽입
hq.add(1); // 삽입에 성공하면 true 반환
hq.add(10);
hq.offer(100); // 삽입 실패시, 예외발생 

// 삭제
hq.poll(100); 첫번째 값을 제거하고 비어있다면 null 반환
hq.remove(10); // 값이 비어있으면, 에외 발생

// 첫번째 값 체크(반환만 하고, 제거는 X)
hq.peek();  큐가 비어있으면 null 반환
hq.element(); 예외 발생 

// 초기화
hq.clear();&lt;/code&gt;&lt;/pre&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;b&gt;우선순위 큐 동작 방식&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CMS5T/btsD6v7H8dR/b2UfZCuAV5m9c7FW707PM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CMS5T/btsD6v7H8dR/b2UfZCuAV5m9c7FW707PM0/img.png&quot; data-alt=&quot;출처: https://coding-factory.tistory.com/603&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CMS5T/btsD6v7H8dR/b2UfZCuAV5m9c7FW707PM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCMS5T%2FbtsD6v7H8dR%2Fb2UfZCuAV5m9c7FW707PM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;354&quot; height=&quot;792&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://coding-factory.tistory.com/603&lt;/figcaption&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;- 리스트 정렬과 우선순위 큐 중에 뭘 써야 더 성능이 좋을까 ??&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Arrays.sort()의 경우에는 평균 nlogn, 최악의 경우 n^2의 시간복잡도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Collections.sort()의 경우 평균, 최악 둘다 nlogn&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선순위 큐의 경우에는 정렬된 상태에서 삽입, 삭제 연산이 일어나기 때문에 logn을 유지 !!&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;&lt;b&gt;BOJ 추천문제&amp;nbsp;&lt;/b&gt;&lt;br /&gt;- &lt;a href=&quot;https://www.acmicpc.net/problem/1927&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1927&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706434972463&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1927번: 최소 힙&quot; data-og-description=&quot;첫째 줄에 연산의 개수 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1927&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1927&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cJPaI1/hyVcffTsJB/mzGLY2kxrCLFVw4LhN8aJK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1927&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1927&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cJPaI1/hyVcffTsJB/mzGLY2kxrCLFVw4LhN8aJK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1927번: 최소 힙&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 연산의 개수 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;a href=&quot;https://www.acmicpc.net/problem/11279&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/11279&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706434982986&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;11279번: 최대 힙&quot; data-og-description=&quot;첫째 줄에 연산의 개수 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11279&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11279&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dq6m5h/hyVccDuEuB/Ju7nrebDOUkHaEad1QVga1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11279&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11279&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dq6m5h/hyVccDuEuB/Ju7nrebDOUkHaEad1QVga1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11279번: 최대 힙&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 연산의 개수 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;a href=&quot;https://www.acmicpc.net/problem/22252&quot;&gt;https://www.acmicpc.net/problem/22252&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706434963153&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;22252번: 정보 상인 호석&quot; data-og-description=&quot;암흑가의 권력은 주먹과 정보에서 나온다. 주먹은 한 명에게 강하고, 정보는 세계를 가지고 놀 수 있기 때문에 호석이는 세상 모든 정보를 모으는 &amp;quot;정보 상인&amp;quot;이 되고 싶다. 정보 상인은 정보를 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/22252&quot; data-og-url=&quot;https://www.acmicpc.net/problem/22252&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eF8AnS/hyVb21WTWt/Xu5sjTS5j0TYqqeG1VHkKK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/22252&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/22252&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eF8AnS/hyVb21WTWt/Xu5sjTS5j0TYqqeG1VHkKK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;22252번: 정보 상인 호석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;암흑가의 권력은 주먹과 정보에서 나온다. 주먹은 한 명에게 강하고, 정보는 세계를 가지고 놀 수 있기 때문에 호석이는 세상 모든 정보를 모으는 &quot;정보 상인&quot;이 되고 싶다. 정보 상인은 정보를&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/369</guid>
      <comments>https://hyul-mode.tistory.com/369#entry369comment</comments>
      <pubDate>Sun, 28 Jan 2024 18:43:33 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 2338번: 긴자리 계산 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/368</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2338&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2338&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706190331401&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2338번: 긴자리 계산&quot; data-og-description=&quot;첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A&amp;times;B를 출력한다. 각각을 출력할 때, 답이 0인 경우를 제외하고는 0으로 시작하게 해서는 안 된다(1을 01로 출력하면 안 된다는 의미).&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2338&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2338&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCKa6I/hyU8WaO3K0/3bQ6PzR02QAZhnhJoVzRM1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2338&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2338&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCKa6I/hyU8WaO3K0/3bQ6PzR02QAZhnhJoVzRM1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2338번: 긴자리 계산&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A&amp;times;B를 출력한다. 각각을 출력할 때, 답이 0인 경우를 제외하고는 0으로 시작하게 해서는 안 된다(1을 01로 출력하면 안 된다는 의미).&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;소스&lt;/b&gt;&lt;b&gt;코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1706190366566&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.math.BigInteger;

class P2338 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        // int 형, long 형보다 큰 수가 들어올 수 있는 경우 =&amp;gt; BigInteger 
        BigInteger a = new BigInteger(br.readLine());
        BigInteger b = new BigInteger(br.readLine());

        sb.append(a.add(b)).append(&quot;\n&quot;)
          .append(a.subtract(b)).append(&quot;\n&quot;)
          .append(a.multiply(b));
        System.out.println(sb);
    }
}&lt;/code&gt;&lt;/pre&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;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 브론즈 5문제인데 정답률이 50프로길래 뭔가 있겠구나 싶었습니다 ! 그래서 변수의 타입을 int형이 아닌 long형으로 지정해줬습니다. 그 이유는 웬만하면 long형의 데이터 표현 범위 안에 들어오기 때문입니다 !&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btdojC/btsDUKMHiwa/IqEXA4AgspJOOZgl0hZDNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btdojC/btsDUKMHiwa/IqEXA4AgspJOOZgl0hZDNk/img.png&quot; data-alt=&quot;https://tcpschool.com/java/java_datatype_basic&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btdojC/btsDUKMHiwa/IqEXA4AgspJOOZgl0hZDNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtdojC%2FbtsDUKMHiwa%2FIqEXA4AgspJOOZgl0hZDNk%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;998&quot; height=&quot;404&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://tcpschool.com/java/java_datatype_basic&lt;/figcaption&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;i&gt; &lt;b&gt;★ 하지만 long 타입으로도 런타임 에러가 떴고, 다른 방식이 있나 구글링을 해보니 BigInteger라는 클래스를 활용하면 값의 무한대를 표현할 수 있다고 합니다.&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ BigInteger 클래스의 특이점은 &lt;span style=&quot;color: #ee2323;&quot;&gt;문자열&lt;/span&gt;을 인자값으로 넘겨줘야 합니다. 또한 문자열이기 때문에 사칙연산이 되지 않습니다 ! 그래서 클래스에서 지원하는 add, subtract, multiply와 같은 메서드로 결과값을 구해줬습니다 :)&amp;nbsp;&lt;/b&gt;&lt;/i&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;&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;&lt;i&gt;&lt;b&gt; &lt;i&gt;&lt;b&gt;★&lt;/b&gt;&lt;/i&gt; 자세한 설명은 다음 블로그를 참고하시면 좋을 거 같습니다. &lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;a href=&quot;https://coding-factory.tistory.com/604&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://coding-factory.tistory.com/604&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706190916212&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 &amp;amp; 예제 총정리&quot; data-og-description=&quot;BigInteger를 사용해야 하는 이유 Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long&quot; data-og-host=&quot;coding-factory.tistory.com&quot; data-og-source-url=&quot;https://coding-factory.tistory.com/604&quot; data-og-url=&quot;https://coding-factory.tistory.com/604&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmCJfM/hyVcb5ejjq/OOPufPInydhO40bpwSnPh1/img.png?width=203&amp;amp;height=122&amp;amp;face=0_0_203_122,https://scrap.kakaocdn.net/dn/yVskp/hyVce1Wt5b/6UKng9W1KvDDEfQLRkBrcK/img.png?width=203&amp;amp;height=122&amp;amp;face=0_0_203_122,https://scrap.kakaocdn.net/dn/emEf8R/hyU8Zk5Dz7/KRRirDIO0aUmgbeKu3tWiK/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428&quot;&gt;&lt;a href=&quot;https://coding-factory.tistory.com/604&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://coding-factory.tistory.com/604&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmCJfM/hyVcb5ejjq/OOPufPInydhO40bpwSnPh1/img.png?width=203&amp;amp;height=122&amp;amp;face=0_0_203_122,https://scrap.kakaocdn.net/dn/yVskp/hyVce1Wt5b/6UKng9W1KvDDEfQLRkBrcK/img.png?width=203&amp;amp;height=122&amp;amp;face=0_0_203_122,https://scrap.kakaocdn.net/dn/emEf8R/hyU8Zk5Dz7/KRRirDIO0aUmgbeKu3tWiK/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 &amp;amp; 예제 총정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;BigInteger를 사용해야 하는 이유 Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;coding-factory.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/368</guid>
      <comments>https://hyul-mode.tistory.com/368#entry368comment</comments>
      <pubDate>Thu, 25 Jan 2024 22:54:34 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 26265번: 멘토와 멘티 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/367</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/26265&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/26265&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706181861520&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;26265번: 멘토와 멘티&quot; data-og-description=&quot;서울사이버대학교에는 멘토링 프로그램이 있다. 멘토링 프로그램은 한 명의 멘토(선배학습자)가 여러 명의 멘티(후배학습자)에게 대학 생활에 대한 노하우와 정보 등을 전수하는 것이다. 빅데&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/26265&quot; data-og-url=&quot;https://www.acmicpc.net/problem/26265&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MRAAM/hyU83VhcIe/CQN0BKYMBnfUZHELPRFKKK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/26265&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/26265&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MRAAM/hyU83VhcIe/CQN0BKYMBnfUZHELPRFKKK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;26265번: 멘토와 멘티&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;서울사이버대학교에는 멘토링 프로그램이 있다. 멘토링 프로그램은 한 명의 멘토(선배학습자)가 여러 명의 멘티(후배학습자)에게 대학 생활에 대한 노하우와 정보 등을 전수하는 것이다. 빅데&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1706181893055&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

class P26265 {
    public static void main(String[] args) throws Exception{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());

        String[][] arr = new String[n][2];

        for (int i=0;i&amp;lt;n;i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
            arr[i][0] = st.nextToken();
            arr[i][1] = st.nextToken();
        }
        
        // 이차원 문자열 배열 정렬을 위해서는 람다식을 활용하여 compare를 재정의 해야함
        Arrays.sort(arr,new Comparator&amp;lt;String[]&amp;gt;() {
            @Override
            public int compare(String[] o1, String[] o2) {
                if (o1[0].equals(o2[0])) return o2[1].compareTo(o1[1]);
                else  return o1[0].compareTo(o2[0]);
            }   
        });
        for (String[] m: arr) {
            sb.append(m[0]+&quot; &quot;+m[1]).append(&quot;\n&quot;);
        }    
        System.out.println(sb);
    }
}&lt;/code&gt;&lt;/pre&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;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 요즘 계속 정렬문제를 풀고 있는데 자바의 정렬이 다른 언어에 비해서 꽤 까다로운 거 같습니다 ㅠㅠ&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ 2차원 문자열 배열을 정렬하기 위해선 compare 함수를 재정의 해줘야 합니다 ! 재정의 해줄 때 인자 값으로 배열을 받아주고, 해당 문제의 경우에는 멘토가 같을 경우, 멘티를 사전 순 내림차순으로 정렬해줬습니다.&amp;nbsp;&lt;/b&gt;&lt;/i&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;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/367</guid>
      <comments>https://hyul-mode.tistory.com/367#entry367comment</comments>
      <pubDate>Thu, 25 Jan 2024 20:48:08 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 7662번: 이중 우선순위 큐 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/366</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7662&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/7662&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705998626117&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;7662번: 이중 우선순위 큐&quot; data-og-description=&quot;입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/7662&quot; data-og-url=&quot;https://www.acmicpc.net/problem/7662&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bFGFDg/hyU8V3yQjC/I4PpEVL7HBwuCXUE2NB9AK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7662&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/7662&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bFGFDg/hyU8V3yQjC/I4PpEVL7HBwuCXUE2NB9AK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;7662번: 이중 우선순위 큐&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1705998747922&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

class P7662 {
  public static void main(String[] args)throws Exception{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();
    int t = Integer.parseInt(br.readLine());

    for (int i=0; i&amp;lt;t; i++) {
        int k = Integer.parseInt(br.readLine());
        // 수가 들어갈 때마다 그 수의 개수를 세주면서, 키 값에 따라 오름차순으로 정렬하기 위해 TreeMap를 사용
        TreeMap&amp;lt;Integer, Integer&amp;gt; tm = new TreeMap&amp;lt;&amp;gt;(); 

        for (int j=0;j&amp;lt;k;j++) {
          StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
          char d = st.nextToken().charAt(0);
          int v = Integer.parseInt(st.nextToken());

          if (d == 'D') { // 수를 트리에서 빼는 경우
            if (tm.isEmpty()) continue;
            else {
              if (v == 1) {
                int tmp = tm.lastKey(); // tree의 최댓값
                int cnt = tm.get(tmp);
                if (cnt == 1) tm.remove(tmp); // 해당 수의 개수가 한개면, 트리에서 삭제
                else tm.put(tmp,cnt-1); // 한개 이상이면 갯수 1 감소 
                  
              } else {
                int tmp = tm.firstKey(); // 트리의 최솟값
                int cnt = tm.get(tmp);
                if (cnt == 1) tm.remove(tmp);
                else tm.put(tmp,cnt-1);
              }
            }
          } else{ // 수를 트리에 집어 넣는경우 
              tm.put(v,tm.getOrDefault(v,0)+1);
          }
	      }
      if (tm.isEmpty()) sb.append(&quot;EMPTY&quot;).append(&quot;\n&quot;);
      else sb.append(tm.lastKey()+&quot; &quot;+tm.firstKey()).append(&quot;\n&quot;);
	    }
    System.out.println(sb);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 문제 제목도 이중 우선순위 큐여서 우선순위 큐를 활용해 푸는 방식을 고집했던 거 같습니다 ! 첨엔 두개의 우선순위 큐를 하나는 최대힙, 하나는 최소힙으로 만들어줬습니다. 그 후 입력 받는 값에 따라 각각의 큐에서 값을 제거해줬는데, 시간 제한이 6초임에도 불구하고 계속 시간초과 + 오답을 만날 수 있었습니다 ㅠㅠ&amp;nbsp;&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ 이건 뭔가 방식이 잘못되었다고 생각했고 구글링을 해보니,&amp;nbsp; java의 자료구조인 TreeMap을 활용해야 했습니다. java에 입문한지 얼마 안되어서 트리맵의 존재조차 몰랐는데, 풀면서 좋은 공부가 된 거 같습니다. 또한 우선순위 큐에서&amp;nbsp; remove() 하기 위해서는 큐를 탐색한 다음에 제거해줘야 하는데, 이는 O(n)의 시간이 걸리게 됩니다. 반면 TreeMap의 경우에는 O(logn)의 시간복잡도를 가지기에 더 효율적입니다 :)&amp;nbsp;&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ 자료구조를 알게 되니, 문제를 해결하는 아이디어는 비교적 쉽게 나온 거 같습니다. 트리맵은 맵의 구조를 가지고 있으며, 기본적으로 key값 기준으로 오름차순 정렬해줍니다. 이때 입력받는 값의 개수를 value로 세어주고, D가 입력으로 들어왔을 때, 최댓값 or 최솟값을 빼줘야 하는데 그 때마다 값을 빼주며,&amp;nbsp; value또한 1씩 감소시켜줬습니다 !&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ 모든 과정이 끝나고 트리맵이 비어있으면&amp;nbsp; empty를, 아니면 최댓값고 최솟값을 각각 StringBuilder에 입력해줬습니다 :)&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/366</guid>
      <comments>https://hyul-mode.tistory.com/366#entry366comment</comments>
      <pubDate>Tue, 23 Jan 2024 17:38:32 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 14940번: 쉬운 최단거리 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/365</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14940&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/14940&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705760815570&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;14940번: 쉬운 최단거리&quot; data-og-description=&quot;지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 &amp;le; n &amp;le; 1000, 2 &amp;le; m &amp;le; 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/14940&quot; data-og-url=&quot;https://www.acmicpc.net/problem/14940&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brzJxg/hyU8ZjHXlV/ZjlpDRkZZ6TFMdx8DWibsk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14940&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/14940&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brzJxg/hyU8ZjHXlV/ZjlpDRkZZ6TFMdx8DWibsk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;14940번: 쉬운 최단거리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 &amp;le; n &amp;le; 1000, 2 &amp;le; m &amp;le; 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1705760840289&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package Baekjoon.BFS;
import java.util.*;
import java.io.*;

class P14940 {
	static int[] nx = {1,0,-1,0};
	static int[] ny = {0,1,0,-1};
	static int arr[][],ans[][],n,m;
	static boolean[][] visited;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
		StringBuilder sb = new StringBuilder();
		
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());

		arr = new int[n][m]; // 지도
		visited = new boolean[n][m]; // 방문여부 확인
		ans = new int[n][m];

		int x=0,y=0; // 좌표의 값이 2일 때 해당 좌표를 찾기 위한 변수
		for (int i=0;i&amp;lt;n;i++) {
			st = new StringTokenizer(br.readLine(),&quot; &quot;);
			for (int j=0;j&amp;lt;m;j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
				if (arr[i][j] == 2) {
					x = i;
					y = j;
				} else if (arr[i][j] == 0) {
					visited[i][j] = true; // 좌표의 값이 0이면 가지 못하는 곳이기에 방문여부를 True로 초기화
				}
			}
		}

    	BFS(x,y); 

		for (int i=0;i&amp;lt;n;i++) {
			for (int j=0;j&amp;lt;m;j++) {
				if (!visited[i][j]) {
					ans[i][j] = -1 ;
				}
				sb.append(ans[i][j]+&quot; &quot;);
			}
			sb.append(&quot;\n&quot;);
		}
		System.out.println(sb);
	}
  
	public static void BFS(int x,int y) {
		Queue&amp;lt;int []&amp;gt; dq = new LinkedList&amp;lt;&amp;gt;();
		dq.add(new int[] {x,y});
		visited[x][y] = true;
		
		while (!dq.isEmpty()) {
      		int[] current = dq.poll();
			
			for (int i=0;i&amp;lt;4;i++) {
				int xx = current[0] + nx[i];
				int yy = current[1] + ny[i];
				
				if (0&amp;lt;= xx &amp;amp;&amp;amp; xx &amp;lt;n &amp;amp;&amp;amp; 0&amp;lt;= yy &amp;amp;&amp;amp; yy &amp;lt; m &amp;amp;&amp;amp; !visited[xx][yy] &amp;amp;&amp;amp; arr[xx][yy] == 1) {
					ans[xx][yy] = ans[current[0]][current[1]] + 1;
          			visited[xx][yy] = true;
          			dq.add(new int[] {xx,yy});
				}
			}
		}
	}
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/365</guid>
      <comments>https://hyul-mode.tistory.com/365#entry365comment</comments>
      <pubDate>Sat, 20 Jan 2024 23:27:47 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 22252번: 정보 상인 호석 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/362</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/22252&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/22252&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705456481504&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;22252번: 정보 상인 호석&quot; data-og-description=&quot;암흑가의 권력은 주먹과 정보에서 나온다. 주먹은 한 명에게 강하고, 정보는 세계를 가지고 놀 수 있기 때문에 호석이는 세상 모든 정보를 모으는 &amp;quot;정보 상인&amp;quot;이 되고 싶다. 정보 상인은 정보를 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/22252&quot; data-og-url=&quot;https://www.acmicpc.net/problem/22252&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baata4/hyU5KOynwE/wJWgT9qsTkqPgPkEMKKFfk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/22252&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/22252&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baata4/hyU5KOynwE/wJWgT9qsTkqPgPkEMKKFfk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;22252번: 정보 상인 호석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;암흑가의 권력은 주먹과 정보에서 나온다. 주먹은 한 명에게 강하고, 정보는 세계를 가지고 놀 수 있기 때문에 호석이는 세상 모든 정보를 모으는 &quot;정보 상인&quot;이 되고 싶다. 정보 상인은 정보를&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1705456500807&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		HashMap&amp;lt;String,PriorityQueue&amp;lt;Integer&amp;gt;&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
		
		int n = Integer.parseInt(br.readLine());
		long ans = 0;
		
		for (int i=0; i&amp;lt;n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
            
			int info = Integer.parseInt(st.nextToken()); // 쿼리 (1 or 2)
			String name = st.nextToken(); // 고릴라 이름
			int k = Integer.parseInt(st.nextToken()); // 정보 수
            
			if (info == 1) { // 쿼리가 1로 시작할 때
            	// 최대힙 만들기
				PriorityQueue&amp;lt;Integer&amp;gt; p = new PriorityQueue&amp;lt;&amp;gt;(Collections.reverseOrder()); 
				
				for (int j=0;j&amp;lt;k;j++) {
					p.add(Integer.parseInt(st.nextToken()));
				}
				
				if (map.containsKey(name)) { // map에 이미 등록되어 있으면, value에 입력값 추가
					for (int a=0;a&amp;lt;k;a++) {
						map.get(name).add(p.poll());
					}
				} else { // 없으면 새로 만들어준 힙큐를 map에 추가
					map.put(name,p);
				}
	
			} else { // 쿼리가 2일 때
				if (!map.containsKey(name)) { // 이름이 존재하지 않으면 continue
					continue;
				} else { // 있으면 k만큼 힙큐에서 제거하고 출력 값에 더해줌 
					while (!map.get(name).isEmpty() &amp;amp;&amp;amp; k &amp;gt;0) {
						ans += map.get(name).poll();
						k --;
					}
				}

			}
	
		}
		System.out.println(ans);	
	}
}&lt;/code&gt;&lt;/pre&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;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 자바로 우선순위 큐를 사용하는 법을 연습하고, 더불어&amp;nbsp; HashMap에 데이터를 추가 및 삭제하는 방식을 익히기 위해 문제를 풀어봤습니다 !&lt;/b&gt;&lt;/i&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;i&gt;&lt;b&gt; &lt;b&gt;★&lt;/b&gt; 문제는 그렇게 복잡하지 않습니다. 고릴라가 가지고 있는 정보의 가치가 높은 순서대로 뽑아줘야 하기 때문에 정보 배열을 우선순위 큐로 만들어줍니다. 이때 가치가 높은 순서대로 뽑아야 하기 때문에 일반적인 최소힙이 아닌, 최대힙으로 힙큐를 구성해줘야 합니다. &lt;/b&gt;&lt;b&gt;그 후 쿼리가 1일 경우 고릴라와 그 정보를 HashMap에 key와 value로 넣어주고 2일 경우 해당 이름을 가지고 있는 고릴라를 찾아서 정보를 제거시켜줍니다.&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/362</guid>
      <comments>https://hyul-mode.tistory.com/362#entry362comment</comments>
      <pubDate>Wed, 17 Jan 2024 11:02:27 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 11659번: 구간 합 구하기 4 (JAVA)</title>
      <link>https://hyul-mode.tistory.com/361</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11659&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/11659&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705409122444&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;11659번: 구간 합 구하기 4&quot; data-og-description=&quot;첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다.&amp;nbsp;셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11659&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11659&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wNKsi/hyU5RUgt7a/pT6iByAryyecbRuaK0sgP1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11659&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11659&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wNKsi/hyU5RUgt7a/pT6iByAryyecbRuaK0sgP1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11659번: 구간 합 구하기 4&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다.&amp;nbsp;셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1705409015316&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

class P11659 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = new StringTokenizer(br.readLine(),&quot; &quot;);
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		st = new StringTokenizer(br.readLine(),&quot; &quot;);
		int[] arr = new int[n];

		for (int i=0;i&amp;lt;n;i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
        int[] dp = new int[n]; // 누적합을 저장하는 배열
        dp[0] = arr[0];

        for (int i=1;i&amp;lt;n;i++) {
          dp[i] = dp[i-1] + arr[i]; // 누적합 저장 
        }

		for (int i=0;i&amp;lt;m;i++) {
			st = new StringTokenizer(br.readLine(),&quot; &quot;);
			int k = Integer.parseInt(st.nextToken());
			int t = Integer.parseInt(st.nextToken());
			if (k==1) {
                sb.append(dp[t-1]).append(&quot;\n&quot;);
              } else {
                sb.append(dp[t-1]-dp[k-2]).append(&quot;\n&quot;);
              }
                }
		System.out.println(sb);	
	}
}&lt;/code&gt;&lt;/pre&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;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 입력값이 최대 100,000이 들어오고, 제한 시간이 1초이기 때문에 2중 반복문을 통해 문제에서 주어진 구간의 합을 구하게 된다면 시간초과가 발생하게 됩니다. 그렇기에 입력받은 배열의 길이만큼 누적합 배열을 만든 후, 구간의 합을 누적시키는 배열을 따로 만들어준 뒤, 해결해야 합니다 !!&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/361</guid>
      <comments>https://hyul-mode.tistory.com/361#entry361comment</comments>
      <pubDate>Tue, 16 Jan 2024 21:46:16 +0900</pubDate>
    </item>
    <item>
      <title>[백준 알고리즘] 30974번: What's your ETA? (Python)</title>
      <link>https://hyul-mode.tistory.com/360</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/30974&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/30974&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704979804383&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;30974번: What's your ETA?&quot; data-og-description=&quot;첫 번째 줄에는 버스 정류장의 개수 $N$과 임의의 두 버스 정류장 사이를 잇는 양방향 도로의 개수 $M$이 공백으로 구분되어 주어진다. $(2 &amp;le; N &amp;le; 400\,000; 1 &amp;le; M &amp;le; 1\,000\,000)$ 두 번째 줄에는 각 버&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/30974&quot; data-og-url=&quot;https://www.acmicpc.net/problem/30974&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cmgnmo/hyU2fOUV0r/i9BjhKJI3u0X08ccAh1rZ0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/30974&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/30974&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cmgnmo/hyU2fOUV0r/i9BjhKJI3u0X08ccAh1rZ0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;30974번: What's your ETA?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 줄에는 버스 정류장의 개수 $N$과 임의의 두 버스 정류장 사이를 잇는 양방향 도로의 개수 $M$이 공백으로 구분되어 주어진다. $(2 &amp;le; N &amp;le; 400\,000; 1 &amp;le; M &amp;le; 1\,000\,000)$ 두 번째 줄에는 각 버&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1704979831836&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
import heapq as hq
import math
input = sys.stdin.readline

def dijkstra(start):
  q = []
  min_dis = [float('inf') for _ in range(n+1)]
  min_dis[start] = 0
  hq.heappush(q, (0, start))

  while q:
    cur_dis,cur_node = hq.heappop(q)

    if min_dis[cur_node] &amp;lt; cur_dis:
      continue

    for next_node,next_dis in graph[cur_node]:
      if prime[arr[cur_node]+arr[next_node]]:
        if min_dis[next_node] &amp;gt; cur_dis + next_dis:
          min_dis[next_node] = cur_dis + next_dis
          hq.heappush(q,(next_dis+cur_dis,next_node))
        
  return min_dis[n]

n,m = map(int,input().split())
arr = [0] + list(map(int,input().split()))
graph = [[] for _ in range(n+1)]
prime = [True for _ in range(10**7+1)]
        
for _ in range(m):
  u,v,w = map(int,input().split())
  graph[u].append((v,w))
  graph[v].append((u,w))
  
for i in range(2,int(math.sqrt(10**7+1))+1):
    if prime[i]:
        j = 2
        while i*j &amp;lt;= 10**7:
            prime[i*j] = False
            j += 1
    
k = dijkstra(1)
if k == float('inf'):
  print('Now where are you?')
else:
  print(k)&lt;/code&gt;&lt;/pre&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;b&gt;풀이&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;★ 문제 자체는 기본적인 다익스트라 + 소수 판별을 해주면 되는 방식이라 그렇게 어렵지 않다고 생각했지만 시간초과가 발생해서 며칠을 고민했던 문제였습니다 ! 소수 판별도 에라토스테네스 체로 해줬고, 최단 경로도 잘 찾은 거 같은데 왜 틀렸을까요 !!&amp;nbsp;&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ &lt;span style=&quot;color: #ee2323;&quot;&gt;문제는 큐에 집어 넣는 값을 리스트로 줬기 때문이었습니다.&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;이전까지는 다익스트라 문제든 다른 문제든 리스트를 자주 사용하였습니다. 그리고 별 문제도 없이 통과했었습니다 ! 하지만 구글링을 해보니 튜플이 리트에 비해 더 적은 메모를 사용하고 속도도 빠르다고 합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&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;i&gt; &lt;b&gt;★ 결과적으론 자신이 맞다고 생각하는데도 계속해서 시간초과가 뜨는 경우, 리스트를 튜플로 바꾼 뒤 제출하는 방법도 한번 생각해보시면 좋을 거 같습니다 :))&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm/백준</category>
      <author>에릭 Kim</author>
      <guid isPermaLink="true">https://hyul-mode.tistory.com/360</guid>
      <comments>https://hyul-mode.tistory.com/360#entry360comment</comments>
      <pubDate>Thu, 11 Jan 2024 22:35:23 +0900</pubDate>
    </item>
  </channel>
</rss>