<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>편안한 마음으로 꽃 구경하기</title>
    <link>https://junsky00.tistory.com/</link>
    <description>대기만성?</description>
    <language>ko</language>
    <pubDate>Sat, 6 Jun 2026 02:53:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>junsky00</managingEditor>
    <image>
      <title>편안한 마음으로 꽃 구경하기</title>
      <url>https://tistory1.daumcdn.net/tistory/8497340/attach/b53f5a25bb004b8091e2151cb46aeef2</url>
      <link>https://junsky00.tistory.com</link>
    </image>
    <item>
      <title>프로그래머스 - 다단계 칫솔 판매 [2021-Dev-Matching: 웹 백엔드 개발자(상반기)</title>
      <link>https://junsky00.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;민호는&amp;nbsp;다단계&amp;nbsp;조직을&amp;nbsp;이용하여&amp;nbsp;칫솔을&amp;nbsp;판매하고&amp;nbsp;있습니다.&amp;nbsp;판매원이&amp;nbsp;칫솔을&amp;nbsp;판매하면&amp;nbsp;그&amp;nbsp;이익이&amp;nbsp;피라미드&amp;nbsp;조직을&amp;nbsp;타고&amp;nbsp;조금씩&amp;nbsp;분배되는&amp;nbsp;형태의&amp;nbsp;판매망입니다.&amp;nbsp;어느정도&amp;nbsp;판매가&amp;nbsp;이루어진&amp;nbsp;후,&amp;nbsp;조직을&amp;nbsp;운영하던&amp;nbsp;민호는&amp;nbsp;조직&amp;nbsp;내&amp;nbsp;누가&amp;nbsp;얼마만큼의&amp;nbsp;이득을&amp;nbsp;가져갔는지가&amp;nbsp;궁금해졌습니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;민호가&amp;nbsp;운영하고&amp;nbsp;있는&amp;nbsp;다단계&amp;nbsp;칫솔&amp;nbsp;판매&amp;nbsp;조직이&amp;nbsp;아래&amp;nbsp;그림과&amp;nbsp;같다고&amp;nbsp;합시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DzEuI/dJMcabJ7FoP/OH9a0baabX6rzJV903kti0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DzEuI/dJMcabJ7FoP/OH9a0baabX6rzJV903kti0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DzEuI/dJMcabJ7FoP/OH9a0baabX6rzJV903kti0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDzEuI%2FdJMcabJ7FoP%2FOH9a0baabX6rzJV903kti0%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;1280&quot; height=&quot;708&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;민호는&amp;nbsp;center이며,&amp;nbsp;파란색&amp;nbsp;네모는&amp;nbsp;여덟&amp;nbsp;명의&amp;nbsp;판매원을&amp;nbsp;표시한&amp;nbsp;것입니다.&amp;nbsp;각각은&amp;nbsp;자신을&amp;nbsp;조직에&amp;nbsp;참여시킨&amp;nbsp;추천인에&amp;nbsp;연결되어&amp;nbsp;피라미드&amp;nbsp;식의&amp;nbsp;구조를&amp;nbsp;이루고&amp;nbsp;있습니다.&amp;nbsp;조직의&amp;nbsp;이익&amp;nbsp;분배&amp;nbsp;규칙은&amp;nbsp;간단합니다.&amp;nbsp;모든&amp;nbsp;판매원은&amp;nbsp;칫솔의&amp;nbsp;판매에&amp;nbsp;의하여&amp;nbsp;발생하는&amp;nbsp;이익에서&amp;nbsp;10%&amp;nbsp;를&amp;nbsp;계산하여&amp;nbsp;자신을&amp;nbsp;조직에&amp;nbsp;참여시킨&amp;nbsp;추천인에게&amp;nbsp;배분하고&amp;nbsp;나머지는&amp;nbsp;자신이&amp;nbsp;가집니다.&amp;nbsp;모든&amp;nbsp;판매원은&amp;nbsp;자신이&amp;nbsp;칫솔&amp;nbsp;판매에서&amp;nbsp;발생한&amp;nbsp;이익&amp;nbsp;뿐만&amp;nbsp;아니라,&amp;nbsp;자신이&amp;nbsp;조직에&amp;nbsp;추천하여&amp;nbsp;가입시킨&amp;nbsp;판매원에게서&amp;nbsp;발생하는&amp;nbsp;이익의&amp;nbsp;10%&amp;nbsp;까지&amp;nbsp;자신에&amp;nbsp;이익이&amp;nbsp;됩니다.&amp;nbsp;자신에게&amp;nbsp;발생하는&amp;nbsp;이익&amp;nbsp;또한&amp;nbsp;마찬가지의&amp;nbsp;규칙으로&amp;nbsp;자신의&amp;nbsp;추천인에게&amp;nbsp;분배됩니다.&amp;nbsp;단,&amp;nbsp;10%&amp;nbsp;를&amp;nbsp;계산할&amp;nbsp;때에는&amp;nbsp;원&amp;nbsp;단위에서&amp;nbsp;절사하며,&amp;nbsp;10%를&amp;nbsp;계산한&amp;nbsp;금액이&amp;nbsp;1&amp;nbsp;원&amp;nbsp;미만인&amp;nbsp;경우에는&amp;nbsp;이득을&amp;nbsp;분배하지&amp;nbsp;않고&amp;nbsp;자신이&amp;nbsp;모두&amp;nbsp;가집니다.&lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;아래와&amp;nbsp;같은&amp;nbsp;판매&amp;nbsp;기록이&amp;nbsp;있다고&amp;nbsp;가정하겠습니다.&amp;nbsp;칫솔의&amp;nbsp;판매에서&amp;nbsp;발생하는&amp;nbsp;이익은&amp;nbsp;개당&amp;nbsp;100&amp;nbsp;원으로&amp;nbsp;정해져&amp;nbsp;있습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 37.0921%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.4031%;&quot;&gt;판매원&lt;/td&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;판매 수량&lt;/td&gt;
&lt;td style=&quot;width: 12.5193%;&quot;&gt;이익금&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.4031%;&quot;&gt;young&lt;/td&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;12&lt;/td&gt;
&lt;td style=&quot;width: 12.5193%;&quot;&gt;1,200원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.4031%;&quot;&gt;ohn&lt;/td&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5193%;&quot;&gt;400원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.4031%;&quot;&gt;tod&lt;/td&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5193%;&quot;&gt;200원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.4031%;&quot;&gt;emily&lt;/td&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 12.5193%;&quot;&gt;500원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.4031%;&quot;&gt;mary&lt;/td&gt;
&lt;td style=&quot;width: 12.1705%;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 12.5193%;&quot;&gt;1,000원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판매원&amp;nbsp;young&amp;nbsp;에&amp;nbsp;의하여&amp;nbsp;1,200&amp;nbsp;원의&amp;nbsp;이익이&amp;nbsp;발생했습니다.&amp;nbsp;young&amp;nbsp;은&amp;nbsp;이&amp;nbsp;중&amp;nbsp;10%&amp;nbsp;에&amp;nbsp;해당하는&amp;nbsp;120&amp;nbsp;원을,&amp;nbsp;자신을&amp;nbsp;조직에&amp;nbsp;참여시킨&amp;nbsp;추천인인&amp;nbsp;edward&amp;nbsp;에게&amp;nbsp;배분하고&amp;nbsp;자신은&amp;nbsp;나머지인&amp;nbsp;1,080&amp;nbsp;원을&amp;nbsp;가집니다.&amp;nbsp;edward&amp;nbsp;는&amp;nbsp;young&amp;nbsp;에게서&amp;nbsp;받은&amp;nbsp;120&amp;nbsp;원&amp;nbsp;중&amp;nbsp;10%&amp;nbsp;인&amp;nbsp;12&amp;nbsp;원을&amp;nbsp;mary&amp;nbsp;에게&amp;nbsp;배분하고&amp;nbsp;자신은&amp;nbsp;나머지인&amp;nbsp;108&amp;nbsp;원을&amp;nbsp;가집니다.&amp;nbsp;12&amp;nbsp;원을&amp;nbsp;edward&amp;nbsp;로부터&amp;nbsp;받은&amp;nbsp;mary&amp;nbsp;는&amp;nbsp;10%&amp;nbsp;인&amp;nbsp;1&amp;nbsp;원을&amp;nbsp;센터에&amp;nbsp;(즉,&amp;nbsp;민호에게)&amp;nbsp;배분하고&amp;nbsp;자신은&amp;nbsp;나머지인&amp;nbsp;11&amp;nbsp;원을&amp;nbsp;가집니다.&amp;nbsp;이&amp;nbsp;상태를&amp;nbsp;그림으로&amp;nbsp;나타내면&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJQnxZ/dJMcadOCkjB/K7qkbREXsGYRnGGqNKKkKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJQnxZ/dJMcadOCkjB/K7qkbREXsGYRnGGqNKKkKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJQnxZ/dJMcadOCkjB/K7qkbREXsGYRnGGqNKKkKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJQnxZ%2FdJMcadOCkjB%2FK7qkbREXsGYRnGGqNKKkKK%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;1280&quot; height=&quot;708&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후, 판매원 john 에 의하여 400 원의 이익이 발생합니다. john 은 10% 인 40 원을 센터에 배분하고 자신이 나머지인 360 원을 가집니다. 이 상태를 그림으로 나타내면 아래와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mwmij/dJMcaaj7C8b/1MwIN6ElsVx42SlanQ06YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mwmij/dJMcaaj7C8b/1MwIN6ElsVx42SlanQ06YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mwmij/dJMcaaj7C8b/1MwIN6ElsVx42SlanQ06YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmwmij%2FdJMcaaj7C8b%2F1MwIN6ElsVx42SlanQ06YK%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;1280&quot; height=&quot;708&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또&amp;nbsp;그&amp;nbsp;후에는&amp;nbsp;판매원&amp;nbsp;tod&amp;nbsp;에&amp;nbsp;의하여&amp;nbsp;200&amp;nbsp;원&amp;nbsp;이익이&amp;nbsp;발생하는데,&amp;nbsp;tod&amp;nbsp;자신이&amp;nbsp;180&amp;nbsp;원을,&amp;nbsp;추천인인&amp;nbsp;jaimie&amp;nbsp;가&amp;nbsp;그&amp;nbsp;중&amp;nbsp;10%&amp;nbsp;인&amp;nbsp;20&amp;nbsp;원을&amp;nbsp;받아서&amp;nbsp;18&amp;nbsp;원을&amp;nbsp;가지고,&amp;nbsp;jaimie&amp;nbsp;의&amp;nbsp;추천인인&amp;nbsp;mary&amp;nbsp;는&amp;nbsp;2&amp;nbsp;원을&amp;nbsp;받지만&amp;nbsp;이것의&amp;nbsp;10%&amp;nbsp;는&amp;nbsp;원&amp;nbsp;단위에서&amp;nbsp;절사하면&amp;nbsp;배분할&amp;nbsp;금액이&amp;nbsp;없기&amp;nbsp;때문에&amp;nbsp;mary&amp;nbsp;는&amp;nbsp;2&amp;nbsp;원을&amp;nbsp;모두&amp;nbsp;가집니다.&amp;nbsp;이&amp;nbsp;상태를&amp;nbsp;그림으로&amp;nbsp;나타내면&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baehpT/dJMcafZ0utb/fuEpKICiKmi8GLX0Oc11h1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baehpT/dJMcafZ0utb/fuEpKICiKmi8GLX0Oc11h1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baehpT/dJMcafZ0utb/fuEpKICiKmi8GLX0Oc11h1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaehpT%2FdJMcafZ0utb%2FfuEpKICiKmi8GLX0Oc11h1%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;1280&quot; height=&quot;708&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&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;다음으로&amp;nbsp;emily&amp;nbsp;가&amp;nbsp;칫솔&amp;nbsp;판매를&amp;nbsp;통하여&amp;nbsp;얻은&amp;nbsp;이익&amp;nbsp;500&amp;nbsp;원은&amp;nbsp;마찬가지의&amp;nbsp;규칙에&amp;nbsp;따라&amp;nbsp;emily&amp;nbsp;에게&amp;nbsp;450&amp;nbsp;원,&amp;nbsp;mary&amp;nbsp;에게&amp;nbsp;45&amp;nbsp;원,&amp;nbsp;그리고&amp;nbsp;센터에&amp;nbsp;5&amp;nbsp;원으로&amp;nbsp;분배됩니다.&amp;nbsp;이&amp;nbsp;상태를&amp;nbsp;그림으로&amp;nbsp;나타내면&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKg2Ut/dJMcagq5Nr1/YlpHKEc7ykuYocr8Yu5bk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKg2Ut/dJMcagq5Nr1/YlpHKEc7ykuYocr8Yu5bk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKg2Ut/dJMcagq5Nr1/YlpHKEc7ykuYocr8Yu5bk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKg2Ut%2FdJMcagq5Nr1%2FYlpHKEc7ykuYocr8Yu5bk0%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;1280&quot; height=&quot;708&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&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;마지막으로, 판매원 mary 는 1,000 원의 이익을 달성하고, 이 중 10% 인 100 원을 센터에 배분한 후 그 나머지인 900 원을 자신이 가집니다. 이 상태를 그림으로 나타내면 아래와 같습니다. 위와&amp;nbsp;같이&amp;nbsp;하여&amp;nbsp;모든&amp;nbsp;조직&amp;nbsp;구성원들의&amp;nbsp;이익&amp;nbsp;달성&amp;nbsp;현황&amp;nbsp;집계가&amp;nbsp;끝났습니다.&amp;nbsp;지금까지&amp;nbsp;얻은&amp;nbsp;이익을&amp;nbsp;모두&amp;nbsp;합한&amp;nbsp;결과를&amp;nbsp;그림으로&amp;nbsp;나타내면&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5zG63/dJMcagSbdcV/PlaT0KZB59jSAXAz4wAPxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5zG63/dJMcagSbdcV/PlaT0KZB59jSAXAz4wAPxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5zG63/dJMcagSbdcV/PlaT0KZB59jSAXAz4wAPxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5zG63%2FdJMcagSbdcV%2FPlaT0KZB59jSAXAz4wAPxK%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;1280&quot; height=&quot;708&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 결과가 민호가 파악하고자 하는 이익 배분 현황입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NocI5/dJMcad19O1T/EO4HnAMFOy69TC2m6Y50NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NocI5/dJMcad19O1T/EO4HnAMFOy69TC2m6Y50NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NocI5/dJMcad19O1T/EO4HnAMFOy69TC2m6Y50NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNocI5%2FdJMcad19O1T%2FEO4HnAMFOy69TC2m6Y50NK%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;1280&quot; height=&quot;708&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;각&amp;nbsp;판매원의&amp;nbsp;이름을&amp;nbsp;담은&amp;nbsp;배열&amp;nbsp;enroll,&amp;nbsp;각&amp;nbsp;판매원을&amp;nbsp;다단계&amp;nbsp;조직에&amp;nbsp;참여시킨&amp;nbsp;다른&amp;nbsp;판매원의&amp;nbsp;이름을&amp;nbsp;담은&amp;nbsp;배열&amp;nbsp;referral,&amp;nbsp;판매량&amp;nbsp;집계&amp;nbsp;데이터의&amp;nbsp;판매원&amp;nbsp;이름을&amp;nbsp;나열한&amp;nbsp;배열&amp;nbsp;seller,&amp;nbsp;판매량&amp;nbsp;집계&amp;nbsp;데이터의&amp;nbsp;판매&amp;nbsp;수량을&amp;nbsp;나열한&amp;nbsp;배열&amp;nbsp;amount가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;각&amp;nbsp;판매원이&amp;nbsp;득한&amp;nbsp;이익금을&amp;nbsp;나열한&amp;nbsp;배열을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&amp;nbsp;판매원에게&amp;nbsp;배분된&amp;nbsp;이익금의&amp;nbsp;총합을&amp;nbsp;계산하여(정수형으로),&amp;nbsp;입력으로&amp;nbsp;주어진&amp;nbsp;enroll에&amp;nbsp;이름이&amp;nbsp;포함된&amp;nbsp;순서에&amp;nbsp;따라&amp;nbsp;나열하면&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;p data-ke-size=&quot;size16&quot;&gt;문제 해결:&lt;/p&gt;
&lt;pre id=&quot;code_1772584431821&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(enroll, referral, seller, amount):
    answer = []
    net = {}
    
    for p, r in zip(enroll, referral):
        net[p] = [r, 0]
        
    for s, a in zip(seller, amount):
        price = a*100
        curr = s
        
        while curr != &quot;-&quot; and price &amp;gt; 0:
            comm = price // 10
            net[curr][1] += (price-comm)
            
            curr = net[curr][0]
            price = comm
            
    for name in enroll:
        answer.append(net[name][1])
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문제는 간단한 구현 문제이다.&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;10%와 90%에 매몰되어 저 조건을 넘어가게 된다면 고전하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;절삭&quot;이므로 몫만 구한 뒤 price에서 빼는 형태로 사용하게 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에는 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 코드:&lt;/p&gt;
&lt;pre id=&quot;code_1772584540795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import math

def solution(enroll, referral, seller, amount):
    answer = []
    net = {}
    
    for p, r in zip(enroll, referral):
        if r == '-':
            net[p] = [[], 0]
        else:
            net[p] = [[r], 0]
            net[p][0].extend(net[r][0])
    
    for s, a in zip(seller, amount):
        price = a*100
        net[s][1] += 0.9*price
        price -= 0.9*price
        
        for c in net[s][0]:
            if price &amp;lt; 10:
                net[c][1] += round(price)
                price -= round(price)
                break
            
            net[c][1] += round(0.9*price)
            price -= round(0.9*price)
    
    [answer.append(v[1]) for k, v in net.items()]
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드가 절삭을 고려하지 않아 고전했던 코드인데 round로 해결하고자 하였지만 뜻대로되지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에 로직은 간단하게 dict 형태에 다른 초대인들을 모두 넣는다거나 다른 초대인들의 초대인들을 넣는 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상당히 간단한 로직이다.&lt;/p&gt;</description>
      <category>코테</category>
      <category>Greedy</category>
      <category>Python</category>
      <category>구현</category>
      <category>그리디</category>
      <category>코딩 테스트</category>
      <category>코테</category>
      <category>탐색</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/26</guid>
      <comments>https://junsky00.tistory.com/26#entry26comment</comments>
      <pubDate>Wed, 4 Mar 2026 09:37:19 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 사라지는 발판 [2022 KAKAO BLIND RECRUITMENT]</title>
      <link>https://junsky00.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이어&amp;nbsp;A와&amp;nbsp;플레이어&amp;nbsp;B가&amp;nbsp;서로&amp;nbsp;게임을&amp;nbsp;합니다.&amp;nbsp;당신은&amp;nbsp;이&amp;nbsp;게임이&amp;nbsp;끝날&amp;nbsp;때까지&amp;nbsp;양&amp;nbsp;플레이어가&amp;nbsp;캐릭터를&amp;nbsp;몇&amp;nbsp;번&amp;nbsp;움직이게&amp;nbsp;될지&amp;nbsp;예측하려고&amp;nbsp;합니다.&lt;br /&gt;&lt;br /&gt;각&amp;nbsp;플레이어는&amp;nbsp;자신의&amp;nbsp;캐릭터&amp;nbsp;하나를&amp;nbsp;보드&amp;nbsp;위에&amp;nbsp;올려놓고&amp;nbsp;게임을&amp;nbsp;시작합니다.&amp;nbsp;게임&amp;nbsp;보드는&amp;nbsp;1x1&amp;nbsp;크기&amp;nbsp;정사각&amp;nbsp;격자로&amp;nbsp;이루어져&amp;nbsp;있으며,&amp;nbsp;보드&amp;nbsp;안에는&amp;nbsp;발판이&amp;nbsp;있는&amp;nbsp;부분과&amp;nbsp;없는&amp;nbsp;부분이&amp;nbsp;있습니다.&amp;nbsp;발판이&amp;nbsp;있는&amp;nbsp;곳에만&amp;nbsp;캐릭터가&amp;nbsp;서있을&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;처음&amp;nbsp;캐릭터를&amp;nbsp;올려놓는&amp;nbsp;곳은&amp;nbsp;항상&amp;nbsp;발판이&amp;nbsp;있는&amp;nbsp;곳입니다.&amp;nbsp;캐릭터는&amp;nbsp;발판이&amp;nbsp;있는&amp;nbsp;곳으로만&amp;nbsp;이동할&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;보드&amp;nbsp;밖으로&amp;nbsp;이동할&amp;nbsp;수&amp;nbsp;없습니다.&amp;nbsp;밟고&amp;nbsp;있던&amp;nbsp;발판은&amp;nbsp;그&amp;nbsp;위에&amp;nbsp;있던&amp;nbsp;캐릭터가&amp;nbsp;다른&amp;nbsp;곳으로&amp;nbsp;이동하여&amp;nbsp;다른&amp;nbsp;발판을&amp;nbsp;밞음과&amp;nbsp;동시에&amp;nbsp;사라집니다.&amp;nbsp;양&amp;nbsp;플레이어는&amp;nbsp;번갈아가며&amp;nbsp;자기&amp;nbsp;차례에&amp;nbsp;자신의&amp;nbsp;캐릭터를&amp;nbsp;상하좌우로&amp;nbsp;인접한&amp;nbsp;4개의&amp;nbsp;칸&amp;nbsp;중에서&amp;nbsp;발판이&amp;nbsp;있는&amp;nbsp;칸으로&amp;nbsp;옮겨야&amp;nbsp;합니다.&lt;br /&gt;&lt;br /&gt;다음과&amp;nbsp;같은&amp;nbsp;2가지&amp;nbsp;상황에서&amp;nbsp;패자와&amp;nbsp;승자가&amp;nbsp;정해지며,&amp;nbsp;게임이&amp;nbsp;종료됩니다.&lt;br /&gt;&lt;br /&gt;움직일&amp;nbsp;차례인데&amp;nbsp;캐릭터의&amp;nbsp;상하좌우&amp;nbsp;주변&amp;nbsp;4칸이&amp;nbsp;모두&amp;nbsp;발판이&amp;nbsp;없거나&amp;nbsp;보드&amp;nbsp;밖이라서&amp;nbsp;이동할&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;경우,&amp;nbsp;해당&amp;nbsp;차례&amp;nbsp;플레이어는&amp;nbsp;패배합니다.&lt;br /&gt;두&amp;nbsp;캐릭터가&amp;nbsp;같은&amp;nbsp;발판&amp;nbsp;위에&amp;nbsp;있을&amp;nbsp;때,&amp;nbsp;상대&amp;nbsp;플레이어의&amp;nbsp;캐릭터가&amp;nbsp;다른&amp;nbsp;발판으로&amp;nbsp;이동하여&amp;nbsp;자신의&amp;nbsp;캐릭터가&amp;nbsp;서있던&amp;nbsp;발판이&amp;nbsp;사라지게&amp;nbsp;되면&amp;nbsp;패배합니다.&lt;br /&gt;게임은&amp;nbsp;항상&amp;nbsp;플레이어&amp;nbsp;A가&amp;nbsp;먼저&amp;nbsp;시작합니다.&amp;nbsp;양&amp;nbsp;플레이어는&amp;nbsp;최적의&amp;nbsp;플레이를&amp;nbsp;합니다.&amp;nbsp;즉,&amp;nbsp;이길&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;플레이어는&amp;nbsp;최대한&amp;nbsp;빨리&amp;nbsp;승리하도록&amp;nbsp;플레이하고,&amp;nbsp;질&amp;nbsp;수밖에&amp;nbsp;없는&amp;nbsp;플레이어는&amp;nbsp;최대한&amp;nbsp;오래&amp;nbsp;버티도록&amp;nbsp;플레이합니다.&amp;nbsp;'이길&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;플레이어'는&amp;nbsp;실수만&amp;nbsp;하지&amp;nbsp;않는다면&amp;nbsp;항상&amp;nbsp;이기는&amp;nbsp;플레이어를&amp;nbsp;의미하며,&amp;nbsp;'질&amp;nbsp;수밖에&amp;nbsp;없는&amp;nbsp;플레이어'는&amp;nbsp;최선을&amp;nbsp;다해도&amp;nbsp;상대가&amp;nbsp;실수하지&amp;nbsp;않으면&amp;nbsp;항상&amp;nbsp;질&amp;nbsp;수밖에&amp;nbsp;없는&amp;nbsp;플레이어를&amp;nbsp;의미합니다.&amp;nbsp;최대한&amp;nbsp;오래&amp;nbsp;버틴다는&amp;nbsp;것은&amp;nbsp;양&amp;nbsp;플레이어가&amp;nbsp;캐릭터를&amp;nbsp;움직이는&amp;nbsp;횟수를&amp;nbsp;최대화한다는&amp;nbsp;것을&amp;nbsp;의미합니다.&lt;br /&gt;&lt;br /&gt;아래&amp;nbsp;그림은&amp;nbsp;초기&amp;nbsp;보드의&amp;nbsp;상태와&amp;nbsp;각&amp;nbsp;플레이어의&amp;nbsp;위치를&amp;nbsp;나타내는&amp;nbsp;예시입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVnQPB/dJMcaih4YHB/zVdI4fbmJjKZ4u6Vl1m6P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVnQPB/dJMcaih4YHB/zVdI4fbmJjKZ4u6Vl1m6P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVnQPB/dJMcaih4YHB/zVdI4fbmJjKZ4u6Vl1m6P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVnQPB%2FdJMcaih4YHB%2FzVdI4fbmJjKZ4u6Vl1m6P0%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;1000&quot; height=&quot;1000&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와&amp;nbsp;같은&amp;nbsp;경우,&amp;nbsp;플레이어&amp;nbsp;A는&amp;nbsp;실수만&amp;nbsp;하지&amp;nbsp;않는다면&amp;nbsp;항상&amp;nbsp;이길&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;따라서&amp;nbsp;플레이어&amp;nbsp;A는&amp;nbsp;이길&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;플레이어이며,&amp;nbsp;B는&amp;nbsp;질&amp;nbsp;수밖에&amp;nbsp;없는&amp;nbsp;플레이어입니다.&amp;nbsp;다음은&amp;nbsp;A와&amp;nbsp;B가&amp;nbsp;최적의&amp;nbsp;플레이를&amp;nbsp;하는&amp;nbsp;과정을&amp;nbsp;나타냅니다.&lt;br /&gt;&lt;br /&gt;플레이어&amp;nbsp;A가&amp;nbsp;초기&amp;nbsp;위치&amp;nbsp;(1,&amp;nbsp;0)에서&amp;nbsp;(1,&amp;nbsp;1)로&amp;nbsp;이동합니다.&amp;nbsp;플레이어&amp;nbsp;A가&amp;nbsp;(0,&amp;nbsp;0)이나&amp;nbsp;(2,&amp;nbsp;0)으로&amp;nbsp;이동할&amp;nbsp;경우&amp;nbsp;승리를&amp;nbsp;보장할&amp;nbsp;수&amp;nbsp;없습니다.&amp;nbsp;따라서&amp;nbsp;무조건&amp;nbsp;이길&amp;nbsp;방법이&amp;nbsp;있는&amp;nbsp;(1,&amp;nbsp;1)로&amp;nbsp;이동합니다.&lt;br /&gt;플레이어&amp;nbsp;B는&amp;nbsp;(1,&amp;nbsp;1)로&amp;nbsp;이동할&amp;nbsp;경우,&amp;nbsp;바로&amp;nbsp;다음&amp;nbsp;차례에&amp;nbsp;A가&amp;nbsp;위&amp;nbsp;또는&amp;nbsp;아래&amp;nbsp;방향으로&amp;nbsp;이동하면&amp;nbsp;발판이&amp;nbsp;없어져&amp;nbsp;패배하게&amp;nbsp;됩니다.&amp;nbsp;질&amp;nbsp;수밖에&amp;nbsp;없는&amp;nbsp;플레이어는&amp;nbsp;최대한&amp;nbsp;오래&amp;nbsp;버티도록&amp;nbsp;플레이하기&amp;nbsp;때문에&amp;nbsp;(1,&amp;nbsp;1)로&amp;nbsp;이동하지&amp;nbsp;않습니다.&amp;nbsp;(1,&amp;nbsp;2)에서&amp;nbsp;위쪽&amp;nbsp;칸인&amp;nbsp;(0,&amp;nbsp;2)로&amp;nbsp;이동합니다.&lt;br /&gt;A가&amp;nbsp;(1,&amp;nbsp;1)에서&amp;nbsp;(0,&amp;nbsp;1)로&amp;nbsp;이동합니다.&lt;br /&gt;B에게는&amp;nbsp;남은&amp;nbsp;선택지가&amp;nbsp;(0,&amp;nbsp;1)밖에&amp;nbsp;없습니다.&amp;nbsp;따라서&amp;nbsp;(0,&amp;nbsp;2)에서&amp;nbsp;(0,&amp;nbsp;1)로&amp;nbsp;이동합니다.&lt;br /&gt;A가&amp;nbsp;(0,&amp;nbsp;1)에서&amp;nbsp;(0,&amp;nbsp;0)으로&amp;nbsp;이동합니다.&amp;nbsp;이동을&amp;nbsp;완료함과&amp;nbsp;동시에&amp;nbsp;B가&amp;nbsp;서있던&amp;nbsp;(0,&amp;nbsp;1)의&amp;nbsp;발판이&amp;nbsp;사라집니다.&amp;nbsp;B가&amp;nbsp;패배합니다.&lt;br /&gt;만약&amp;nbsp;과정&amp;nbsp;2에서&amp;nbsp;B가&amp;nbsp;아래쪽&amp;nbsp;칸인&amp;nbsp;(2,&amp;nbsp;2)로&amp;nbsp;이동하더라도&amp;nbsp;A는&amp;nbsp;(2,&amp;nbsp;1)로&amp;nbsp;이동하면&amp;nbsp;됩니다.&amp;nbsp;이후&amp;nbsp;B가&amp;nbsp;(2,&amp;nbsp;1)로&amp;nbsp;이동,&amp;nbsp;다음&amp;nbsp;차례에&amp;nbsp;A가&amp;nbsp;(2,&amp;nbsp;0)으로&amp;nbsp;이동하면&amp;nbsp;B가&amp;nbsp;패배합니다.&lt;br /&gt;위&amp;nbsp;예시에서&amp;nbsp;양&amp;nbsp;플레이어가&amp;nbsp;최적의&amp;nbsp;플레이를&amp;nbsp;했을&amp;nbsp;경우,&amp;nbsp;캐릭터의&amp;nbsp;이동&amp;nbsp;횟수&amp;nbsp;합은&amp;nbsp;5입니다.&amp;nbsp;최적의&amp;nbsp;플레이를&amp;nbsp;하는&amp;nbsp;방법은&amp;nbsp;여러&amp;nbsp;가지일&amp;nbsp;수&amp;nbsp;있으나,&amp;nbsp;이동한&amp;nbsp;횟수는&amp;nbsp;모두&amp;nbsp;5로&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;게임&amp;nbsp;보드의&amp;nbsp;초기&amp;nbsp;상태를&amp;nbsp;나타내는&amp;nbsp;2차원&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;board와&amp;nbsp;플레이어&amp;nbsp;A의&amp;nbsp;캐릭터&amp;nbsp;초기&amp;nbsp;위치를&amp;nbsp;나타내는&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;aloc,&amp;nbsp;플레이어&amp;nbsp;B의&amp;nbsp;캐릭터&amp;nbsp;초기&amp;nbsp;위치를&amp;nbsp;나타내는&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;bloc이&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;양&amp;nbsp;플레이어가&amp;nbsp;최적의&amp;nbsp;플레이를&amp;nbsp;했을&amp;nbsp;때,&amp;nbsp;두&amp;nbsp;캐릭터가&amp;nbsp;움직인&amp;nbsp;횟수의&amp;nbsp;합을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&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;p data-ke-size=&quot;size16&quot;&gt;문제 해결:&lt;/p&gt;
&lt;pre id=&quot;code_1771977866347&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(board, aloc, bloc):
    R, C = len(board), len(board[0])
    
    def back(curr_loc, opp_loc):
        r, c = curr_loc
        
        if board[r][c] == 0:
            return False, 0
        
        can_move = False
        min_steps = float('inf')
        max_steps = 0
        
        for dr, dc in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
            nr, nc = r + dr, c + dc
            
            if 0 &amp;lt;= nr &amp;lt; R and 0 &amp;lt;= nc &amp;lt; C and board[nr][nc] == 1:
                can_move = True
                
                board[r][c] = 0
                win, steps = back(opp_loc, [nr, nc])
                board[r][c] = 1
                
                if not win:
                    min_steps = min(min_steps, steps + 1)
                else:
                    max_steps = max(max_steps, steps + 1)
        
        if not can_move:
            return False, 0
        
        if min_steps != float('inf'):
            return True, min_steps
        
        return False, max_steps

    _, answer = back(aloc, bloc)
    return answer&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 10초 정도의 시간이 제한 조건이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. board의 전체 조건은 1부터 5 사이이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 전체를 다 돌아도 시간 내에서 끝낼 수 있을 것으로 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 고려 사항은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. board의 0이 다음 이동 방향일 때는 움직일 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. win이라면 min_step의 비교가 필요하다 이때 min(min_steps, steps+1)로 현재 값과 이전 값의 비교를 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. win이 아니라면 max_step으로 비교를 해야한다. 져야한다면 가장 늦게 져야하기 때문이다. max(max_steps, steps+1)로 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. dx, dy 는 1, -1 이므로 [(0,1), (0,-1), (1,0), (-1,0)]으로 설정하여 for 문을 돌며 dx, dy를 구한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 이때, board 안의 index에서만 돌 수 있도록 간단한 체크문이 필요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5-1. 백트래킹의 기본 원칙을 이용하여 넣을 때는 board의 cur location을 0으로 만들고 넘겨준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5-2. 이후 다시 cur location을 1로 만든다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 마지막으로 inf와 비교하여 min_steps가 존재할 때는 minstep을 return하고 그렇지 않으면 max step을 return 한다&lt;/p&gt;</description>
      <category>코테</category>
      <category>KAKAO</category>
      <category>Python</category>
      <category>백트래킹</category>
      <category>카카오</category>
      <category>코딩 테스트</category>
      <category>코테</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/25</guid>
      <comments>https://junsky00.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 25 Feb 2026 09:11:44 +0900</pubDate>
    </item>
    <item>
      <title>프롬프트를 반복하면 정확도가 올라간다</title>
      <link>https://junsky00.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;본문:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2512.14982&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/pdf/2512.14982&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년 12월에 올라온 논문의 내용인데 최근데 GeekNews에 떠서 읽게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용은 한 줄로 요약이 가능하고 다음과 같다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;Prompt를 reasoning 없이 반복하여 사용하면 높은 퍼포먼스를 보여준다.&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tcQsJ/dJMcaiI7amB/umtG8MDS4q7YcT9Nk0csr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tcQsJ/dJMcaiI7amB/umtG8MDS4q7YcT9Nk0csr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tcQsJ/dJMcaiI7amB/umtG8MDS4q7YcT9Nk0csr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtcQsJ%2FdJMcaiI7amB%2FumtG8MDS4q7YcT9Nk0csr1%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;1524&quot; height=&quot;808&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도표를 보면 다음과 같이 나와있다. 모든 벤치마크에 따라서 높은 퍼포먼스를 보여주는 것은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 보면 prompt repetition을 하면 할수록 높아지고 있다.&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;상당히 간단한 논문이고 총 장수는 12장이지만 그 중에서 3장만 읽으면 끝이다.&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;이 Google 연구진들이 생각하는 다음 방향은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. repeated prompts로 fine-tune하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. efficiency를 높이기 위해 reasoning model을 prompt repetition을 사용하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. KV-cache에 두번 repeat한 것만 넣기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Reorder prompt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. Repeat only parts of prompt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 해당 내용을 non-text modalities에 적용하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. Analyze the attention patterns due to repetition&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. Selective attention을 사용하여 use repetitions in tandem&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등 여러가지 연구 방향성을 제시하기도 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(대학원생 챙기는 건 역시 갓구글...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글이 이젠 scholar까지 먹여살리는 것으로 보인다.&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;</description>
      <category>IT 뉴스</category>
      <category>Google</category>
      <category>Google Paper</category>
      <category>LLM</category>
      <category>LLM 잘 쓰기</category>
      <category>PAPER</category>
      <category>prompt</category>
      <category>구글</category>
      <category>구글 논문</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/24</guid>
      <comments>https://junsky00.tistory.com/24#entry24comment</comments>
      <pubDate>Tue, 24 Feb 2026 20:11:52 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - [3차] 자동완성 [2018 KAKAO BLIND RECRUITMENT]</title>
      <link>https://junsky00.tistory.com/23</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동완성&lt;br /&gt;포털&amp;nbsp;다음에서&amp;nbsp;검색어&amp;nbsp;자동완성&amp;nbsp;기능을&amp;nbsp;넣고&amp;nbsp;싶은&amp;nbsp;라이언은&amp;nbsp;한&amp;nbsp;번&amp;nbsp;입력된&amp;nbsp;문자열을&amp;nbsp;학습해서&amp;nbsp;다음&amp;nbsp;입력&amp;nbsp;때&amp;nbsp;활용하고&amp;nbsp;싶어&amp;nbsp;졌다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;go&amp;nbsp;가&amp;nbsp;한&amp;nbsp;번&amp;nbsp;입력되었다면,&amp;nbsp;다음&amp;nbsp;사용자는&amp;nbsp;g&amp;nbsp;만&amp;nbsp;입력해도&amp;nbsp;go를&amp;nbsp;추천해주므로&amp;nbsp;o를&amp;nbsp;입력할&amp;nbsp;필요가&amp;nbsp;없어진다!&amp;nbsp;단,&amp;nbsp;학습에&amp;nbsp;사용된&amp;nbsp;단어들&amp;nbsp;중&amp;nbsp;앞부분이&amp;nbsp;같은&amp;nbsp;경우에는&amp;nbsp;어쩔&amp;nbsp;수&amp;nbsp;없이&amp;nbsp;다른&amp;nbsp;문자가&amp;nbsp;나올&amp;nbsp;때까지&amp;nbsp;입력을&amp;nbsp;해야&amp;nbsp;한다.&lt;br /&gt;효과가&amp;nbsp;얼마나&amp;nbsp;좋을지&amp;nbsp;알고&amp;nbsp;싶은&amp;nbsp;라이언은&amp;nbsp;학습된&amp;nbsp;단어들을&amp;nbsp;찾을&amp;nbsp;때&amp;nbsp;몇&amp;nbsp;글자를&amp;nbsp;입력해야&amp;nbsp;하는지&amp;nbsp;궁금해졌다.&lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;학습된&amp;nbsp;단어들이&amp;nbsp;아래와&amp;nbsp;같을&amp;nbsp;때&lt;br /&gt;&lt;br /&gt;go&lt;br /&gt;gone&lt;br /&gt;guild&lt;br /&gt;go를&amp;nbsp;찾을&amp;nbsp;때&amp;nbsp;go를&amp;nbsp;모두&amp;nbsp;입력해야&amp;nbsp;한다.&lt;br /&gt;gone을&amp;nbsp;찾을&amp;nbsp;때&amp;nbsp;gon&amp;nbsp;까지&amp;nbsp;입력해야&amp;nbsp;한다.&amp;nbsp;(gon이&amp;nbsp;입력되기&amp;nbsp;전까지는&amp;nbsp;go&amp;nbsp;인지&amp;nbsp;gone인지&amp;nbsp;확신할&amp;nbsp;수&amp;nbsp;없다.)&lt;br /&gt;guild를&amp;nbsp;찾을&amp;nbsp;때는&amp;nbsp;gu&amp;nbsp;까지만&amp;nbsp;입력하면&amp;nbsp;guild가&amp;nbsp;완성된다.&lt;br /&gt;이&amp;nbsp;경우&amp;nbsp;총&amp;nbsp;입력해야&amp;nbsp;할&amp;nbsp;문자의&amp;nbsp;수는&amp;nbsp;7이다.&lt;br /&gt;&lt;br /&gt;라이언을&amp;nbsp;도와&amp;nbsp;위와&amp;nbsp;같이&amp;nbsp;문자열이&amp;nbsp;입력으로&amp;nbsp;주어지면&amp;nbsp;학습을&amp;nbsp;시킨&amp;nbsp;후,&amp;nbsp;학습된&amp;nbsp;단어들을&amp;nbsp;순서대로&amp;nbsp;찾을&amp;nbsp;때&amp;nbsp;몇&amp;nbsp;개의&amp;nbsp;문자를&amp;nbsp;입력하면&amp;nbsp;되는지&amp;nbsp;계산하는&amp;nbsp;프로그램을&amp;nbsp;만들어보자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 예시:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;words&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;[&quot;go&quot;,&quot;gone&quot;,&quot;guild&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;[&quot;abc&quot;,&quot;def&quot;,&quot;ghi&quot;,&quot;jklm&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;[&quot;word&quot;,&quot;war&quot;,&quot;warrior&quot;,&quot;world&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결:&lt;/p&gt;
&lt;pre id=&quot;code_1771904705219&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(words):
    answer = 0
    N = len(words)
    MAXLEN = len(max(words, key=lambda x: len(x)))
    
    # 반드시 시작점부터 idx까지
    # key값으로 넣고 count 값 넣어서 1인 애들만 더하기
    idx = 1
    count = 0
    
    for idx in range(1, MAXLEN+1):
        lst = []
        dictWords = {}
        
        for idxw in range(len(words)):
            target = words[idxw][:idx]
            if target not in dictWords.keys():
                dictWords[target] = [idxw]
            else:
                dictWords[target].append(idxw)
                
            if len(words[idxw]) == idx:
                count += 1
                answer += len(words[idxw])
                
                if words[idxw] not in lst:
                    lst.append(words[idxw])
        
        for k, v in dictWords.items():
            if len(v) == 1:
                if words[v[0]] not in lst:
                    lst.append(words[v[0]])
                    count += 1
                    answer += len(k)
        
        for i in lst:
            words.remove(i)
        
        if count == N:
            break
    
    return answer&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;문제점은 이미 answer에 확정된 단어를 다시 보고 있는 것이 문제였고 끝났음에도 for문을 계속 도는 것이 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771904791248&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(words):
    # 트라이(Trie) 구조 생성
    # 구조: {문자: [해당 문자를 거쳐가는 단어 수, 하위 노드 딕셔너리]}
    trie = {}
    
    # 1. 모든 단어를 트라이에 삽입
    for word in words:
        current_node = trie
        for char in word:
            if char not in current_node:
                current_node[char] = [0, {}]
            current_node[char][0] += 1 # 이 노드를 거쳐가는 단어 수 증가
            current_node = current_node[char][1]
            
    answer = 0
    
    # 2. 각 단어별 최소 입력 횟수 계산
    for word in words:
        current_node = trie
        count = 0
        for char in word:
            count += 1
            # 만약 이 접두사를 공유하는 단어가 1개뿐이라면 중단
            if current_node[char][0] == 1:
                break
            current_node = current_node[char][1]
        answer += count
        
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에서 사용한 로직은 트라이(trie)이다.&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;이 로직은 처음에 {} 으로 비어있는 dict를 주면서 그 이전에 거쳐간 알파벳이 없다는 것을 인지 시키는 것이 제일 중요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서,  gone이라면 {g}, [1, {go}], ... [1, {gone}] 이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 모든 단어에 대해서 모든 char를 돌고 결과값을 낸다&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;#2 에서는 만들어진 trie를 통해 1만 나오는 값을 찾고 해당 값을 answer에 더하고 return한다&lt;/p&gt;</description>
      <category>코테</category>
      <category>Python</category>
      <category>Trie</category>
      <category>카카오</category>
      <category>카카오 코테</category>
      <category>코딩 테스트</category>
      <category>코테</category>
      <category>트라이</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/23</guid>
      <comments>https://junsky00.tistory.com/23#entry23comment</comments>
      <pubDate>Tue, 24 Feb 2026 12:50:10 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 숫자 게임 [Summer/Winter Coding (~2018)]</title>
      <link>https://junsky00.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;xx&amp;nbsp;회사의&amp;nbsp;2xN명의&amp;nbsp;사원들은&amp;nbsp;N명씩&amp;nbsp;두&amp;nbsp;팀으로&amp;nbsp;나눠&amp;nbsp;숫자&amp;nbsp;게임을&amp;nbsp;하려고&amp;nbsp;합니다.&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;팀을&amp;nbsp;각각&amp;nbsp;A팀과&amp;nbsp;B팀이라고&amp;nbsp;하겠습니다.&amp;nbsp;숫자&amp;nbsp;게임의&amp;nbsp;규칙은&amp;nbsp;다음과&amp;nbsp;같습니다. &lt;br /&gt;&lt;br /&gt;먼저&amp;nbsp;모든&amp;nbsp;사원이&amp;nbsp;무작위로&amp;nbsp;자연수를&amp;nbsp;하나씩&amp;nbsp;부여받습니다. &lt;br /&gt;각&amp;nbsp;사원은&amp;nbsp;딱&amp;nbsp;한&amp;nbsp;번씩&amp;nbsp;경기를&amp;nbsp;합니다. &lt;br /&gt;각&amp;nbsp;경기당&amp;nbsp;A팀에서&amp;nbsp;한&amp;nbsp;사원이,&amp;nbsp;B팀에서&amp;nbsp;한&amp;nbsp;사원이&amp;nbsp;나와&amp;nbsp;서로의&amp;nbsp;수를&amp;nbsp;공개합니다.&amp;nbsp;그때&amp;nbsp;숫자가&amp;nbsp;큰&amp;nbsp;쪽이&amp;nbsp;승리하게&amp;nbsp;되고,&amp;nbsp;승리한&amp;nbsp;사원이&amp;nbsp;속한&amp;nbsp;팀은&amp;nbsp;승점을&amp;nbsp;1점&amp;nbsp;얻게&amp;nbsp;됩니다. &lt;br /&gt;만약&amp;nbsp;숫자가&amp;nbsp;같다면&amp;nbsp;누구도&amp;nbsp;승점을&amp;nbsp;얻지&amp;nbsp;않습니다. &lt;br /&gt;전체&amp;nbsp;사원들은&amp;nbsp;우선&amp;nbsp;무작위로&amp;nbsp;자연수를&amp;nbsp;하나씩&amp;nbsp;부여받았습니다.&amp;nbsp;그다음&amp;nbsp;A팀은&amp;nbsp;빠르게&amp;nbsp;출전순서를&amp;nbsp;정했고&amp;nbsp;자신들의&amp;nbsp;출전&amp;nbsp;순서를&amp;nbsp;B팀에게&amp;nbsp;공개해버렸습니다.&amp;nbsp;B팀은&amp;nbsp;그것을&amp;nbsp;보고&amp;nbsp;자신들의&amp;nbsp;최종&amp;nbsp;승점을&amp;nbsp;가장&amp;nbsp;높이는&amp;nbsp;방법으로&amp;nbsp;팀원들의&amp;nbsp;출전&amp;nbsp;순서를&amp;nbsp;정했습니다.&amp;nbsp;이때의&amp;nbsp;B팀이&amp;nbsp;얻는&amp;nbsp;승점을&amp;nbsp;구해주세요. &lt;br /&gt;A&amp;nbsp;팀원들이&amp;nbsp;부여받은&amp;nbsp;수가&amp;nbsp;출전&amp;nbsp;순서대로&amp;nbsp;나열되어있는&amp;nbsp;배열&amp;nbsp;A와&amp;nbsp;i번째&amp;nbsp;원소가&amp;nbsp;B팀의&amp;nbsp;i번&amp;nbsp;팀원이&amp;nbsp;부여받은&amp;nbsp;수를&amp;nbsp;의미하는&amp;nbsp;배열&amp;nbsp;B가&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;B&amp;nbsp;팀원들이&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;최대&amp;nbsp;승점을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&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;p data-ke-size=&quot;size16&quot;&gt;문제 예시:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;A&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;B&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[5,1,3,7]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[2,2,6,8]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[2,2,2,2]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[1,1,1,1]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 예 #1&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFiv80/dJMcahKecYP/ki7XrJIEMnaSGKlUK4SLMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFiv80/dJMcahKecYP/ki7XrJIEMnaSGKlUK4SLMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFiv80/dJMcahKecYP/ki7XrJIEMnaSGKlUK4SLMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFiv80%2FdJMcahKecYP%2Fki7XrJIEMnaSGKlUK4SLMk%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;500&quot; height=&quot;165&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;A&amp;nbsp;팀은&amp;nbsp;숫자&amp;nbsp;5를&amp;nbsp;부여받은&amp;nbsp;팀원이&amp;nbsp;첫번째로&amp;nbsp;출전하고,&amp;nbsp;이어서&amp;nbsp;1,3,7을&amp;nbsp;부여받은&amp;nbsp;팀원들이&amp;nbsp;차례대로&amp;nbsp;출전합니다. &lt;br /&gt;B&amp;nbsp;팀원들을&amp;nbsp;4번,&amp;nbsp;2번,&amp;nbsp;3번,&amp;nbsp;1번의&amp;nbsp;순서대로&amp;nbsp;출전시킬&amp;nbsp;경우&amp;nbsp;팀원들이&amp;nbsp;부여받은&amp;nbsp;숫자들은&amp;nbsp;차례대로&amp;nbsp;8,2,6,2가&amp;nbsp;됩니다.&amp;nbsp;그러면,&amp;nbsp;첫&amp;nbsp;번째,&amp;nbsp;두&amp;nbsp;번째,&amp;nbsp;세&amp;nbsp;번째&amp;nbsp;경기에서&amp;nbsp;승리하여&amp;nbsp;3점을&amp;nbsp;얻게&amp;nbsp;되고,&amp;nbsp;이때가&amp;nbsp;최대의&amp;nbsp;승점입니다. &lt;br /&gt;&lt;br /&gt;입출력&amp;nbsp;예&amp;nbsp;#2 &lt;br /&gt;B&amp;nbsp;팀원들을&amp;nbsp;어떤&amp;nbsp;순서로&amp;nbsp;출전시켜도&amp;nbsp;B팀의&amp;nbsp;승점은&amp;nbsp;0점입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결:&lt;/p&gt;
&lt;pre id=&quot;code_1771737360781&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(A, B):
    answer = 0
    
    B.sort()
    
    for a in A:
        for b in B:
            if b &amp;gt; a:
                answer += 1
                B.remove(b)
                break
    
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결은 했지만 효율성 테스트에서 탈락했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 이중 for문을 돌며 O(n^2)이 되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 하나의 for문을 돌며 O(n)이 되게 만드려면 idx를 직접 만들어서 돌아야 한다.&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;이를 위해서는 A와 B 둘 다 sort를 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sort 시에는 가장 큰 값부터 봐야 하므로 reverse=True를 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 idx를 a와 b 둘 다에게 주면서 값을 비교해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 True로 준 이유가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내림차순으로 정렬하면 서로 가장 큰 값들끼리 비교를 하므로 확정적으로 승점을 얻을 수 있는 최적을 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 크지 않다면 가장 작은 값을 없앰으로써 가장 큰 값에 가장 작은 값을 매칭시키는 방안으로 수행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771738565715&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(A, B):
    answer = 0
    
    B.sort(reverse=True)
    A.sort(reverse=True)
    
    idxa = 0
    idxb = 0
    
    for i in range(len(A)):
        if B[idxb] &amp;gt; A[idxa]:
            idxa += 1
            idxb += 1
            answer += 1
        else:
            B.pop()
            idxa += 1
    
    return answer&lt;/code&gt;&lt;/pre&gt;</description>
      <category>코테</category>
      <category>Python</category>
      <category>정렬</category>
      <category>코딩 테스트</category>
      <category>코테</category>
      <category>탐색</category>
      <category>파이썬</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/22</guid>
      <comments>https://junsky00.tistory.com/22#entry22comment</comments>
      <pubDate>Sun, 22 Feb 2026 14:36:28 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 섬 연결하기 [탐욕법(Greedy)]</title>
      <link>https://junsky00.tistory.com/21</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n개의&amp;nbsp;섬&amp;nbsp;사이에&amp;nbsp;다리를&amp;nbsp;건설하는&amp;nbsp;비용(costs)이&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;최소의&amp;nbsp;비용으로&amp;nbsp;모든&amp;nbsp;섬이&amp;nbsp;서로&amp;nbsp;통행&amp;nbsp;가능하도록&amp;nbsp;만들&amp;nbsp;때&amp;nbsp;필요한&amp;nbsp;최소&amp;nbsp;비용을&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution을&amp;nbsp;완성하세요. &lt;br /&gt;&lt;br /&gt;다리를&amp;nbsp;여러&amp;nbsp;번&amp;nbsp;건너더라도,&amp;nbsp;도달할&amp;nbsp;수만&amp;nbsp;있으면&amp;nbsp;통행&amp;nbsp;가능하다고&amp;nbsp;봅니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;A&amp;nbsp;섬과&amp;nbsp;B&amp;nbsp;섬&amp;nbsp;사이에&amp;nbsp;다리가&amp;nbsp;있고,&amp;nbsp;B&amp;nbsp;섬과&amp;nbsp;C&amp;nbsp;섬&amp;nbsp;사이에&amp;nbsp;다리가&amp;nbsp;있으면&amp;nbsp;A&amp;nbsp;섬과&amp;nbsp;C&amp;nbsp;섬은&amp;nbsp;서로&amp;nbsp;통행&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;p data-ke-size=&quot;size16&quot;&gt;문제 예시:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;n&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;costs&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zMzsH/dJMcaaK2z1J/ookIQOF5vHhkTm3Yv2kCGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zMzsH/dJMcaaK2z1J/ookIQOF5vHhkTm3Yv2kCGK/img.png&quot; data-alt=&quot;CopyRight: Programmers&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zMzsH/dJMcaaK2z1J/ookIQOF5vHhkTm3Yv2kCGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzMzsH%2FdJMcaaK2z1J%2FookIQOF5vHhkTm3Yv2kCGK%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;822&quot; height=&quot;748&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CopyRight: Programmers&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;p data-ke-size=&quot;size16&quot;&gt;문제 해결:&lt;/p&gt;
&lt;pre id=&quot;code_1771499076133&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(n, costs):
    costs.sort(key=lambda x: x[2])
    main_group = {costs[0][0]}
    answer = 0
    
    while len(main_group) &amp;lt; n:
        for i in range(len(costs)):
            s, e, w = costs[i]
            
            if s in main_group and e in main_group:
                continue
            
            if s in main_group or e in main_group:
                main_group.add(s)
                main_group.add(e)
                answer += w
                costs.remove(costs[i])
                break
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 값을 비교하면서 최적 값을 넣고 찾았다면 break 하고 다시 while문을 돌려서 최적의 값을 비교하고 찾아낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, main_group에 값이 없어야 하며 만약 있더라도 모두가 있으면 안된다.&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;맨 처음에는 weight가 존재하므로 kruskal 방식으로 풀려고 하였지만 weight 비교를 하기가 너무 까다로웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, kruskal의 미숙함도 한 몫한 것으로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, kruskal을 쓸 때의 예시를 보여주겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771499189182&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def ancestor(node, parents):
    if parents[node] == node:
        return node
    else:
        return ancestor(parents[node], parents)

def solution(n, costs):
    answer = 0
    edges = sorted([(x[2], x[0], x[1]) for x in costs])
    parents = [i for i in range(n)]
    bridges = 0
    for w, f, t in edges:
        if ancestor(f, parents) != ancestor(t, parents):
            answer += w
            parents[ancestor(f, parents)] = t
            bridges += 1
        if bridges == n - 1:
            break
    return answer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 ancestor로 linked list가 자기 자신으로 향하는 방식으로 initialize를 한 후에 값을 비교합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 둘이 서로 같다면 (이미 연결된 상태) 이때는 건너뜁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 bridges 개수로 완료되었는지 아닌지 확인한 후에 n-1이면 (다 연결된 상태) 그만 둡니다.&lt;/p&gt;</description>
      <category>코테</category>
      <category>kruskal</category>
      <category>Python</category>
      <category>코딩 테스트</category>
      <category>코테</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/21</guid>
      <comments>https://junsky00.tistory.com/21#entry21comment</comments>
      <pubDate>Thu, 19 Feb 2026 20:07:50 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 야근 지수 [연습문제]</title>
      <link>https://junsky00.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 설명:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사원&amp;nbsp;Demi는&amp;nbsp;가끔은&amp;nbsp;야근을&amp;nbsp;하는데요,&amp;nbsp;야근을&amp;nbsp;하면&amp;nbsp;야근&amp;nbsp;피로도가&amp;nbsp;쌓입니다.&amp;nbsp;야근&amp;nbsp;피로도는&amp;nbsp;야근을&amp;nbsp;시작한&amp;nbsp;시점에서&amp;nbsp;남은&amp;nbsp;일의&amp;nbsp;작업량을&amp;nbsp;제곱하여&amp;nbsp;더한&amp;nbsp;값입니다.&amp;nbsp;Demi는&amp;nbsp;N시간&amp;nbsp;동안&amp;nbsp;야근&amp;nbsp;피로도를&amp;nbsp;최소화하도록&amp;nbsp;일할&amp;nbsp;겁니다.Demi가&amp;nbsp;1시간&amp;nbsp;동안&amp;nbsp;작업량&amp;nbsp;1만큼을&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있다고&amp;nbsp;할&amp;nbsp;때,&amp;nbsp;퇴근까지&amp;nbsp;남은&amp;nbsp;N&amp;nbsp;시간과&amp;nbsp;각&amp;nbsp;일에&amp;nbsp;대한&amp;nbsp;작업량&amp;nbsp;works에&amp;nbsp;대해&amp;nbsp;야근&amp;nbsp;피로도를&amp;nbsp;최소화한&amp;nbsp;값을&amp;nbsp;리턴하는&amp;nbsp;함수&amp;nbsp;solution을&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;p data-ke-size=&quot;size16&quot;&gt;문제 예시:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 31.3953%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.217%;&quot;&gt;works&lt;/td&gt;
&lt;td style=&quot;width: 7.8682%;&quot;&gt;n&lt;/td&gt;
&lt;td style=&quot;width: 10.31%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.217%;&quot;&gt;[4, 3, 3]&lt;/td&gt;
&lt;td style=&quot;width: 7.8682%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10.31%;&quot;&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.217%;&quot;&gt;[2, 1, 2]&lt;/td&gt;
&lt;td style=&quot;width: 7.8682%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10.31%;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.217%;&quot;&gt;[1, 1]&lt;/td&gt;
&lt;td style=&quot;width: 7.8682%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10.31%;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결:&lt;/p&gt;
&lt;pre id=&quot;code_1771398257148&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq

def solution(n, works):
    if sum(works) &amp;lt;= n:
        return 0
    
    max_heap = []
    for work in works:
        heapq.heappush(max_heap, -work)
    
    for _ in range(n):
        max_val = heapq.heappop(max_heap)
        
        if max_val &amp;lt; 0:
            heapq.heappush(max_heap, max_val+1)
        else:
            heapq.heappush(max_heap, 0)
        
    return sum(w**2 for w in max_heap)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;heapq는 heappop 시에 최소값을 뱉어내는 라이브러리이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 최대값에 적용 시키려면 heappush 시에 -값으로 변환시켜 적용하면 최대값이 나오게 된다.&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;ex)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4, 3, 3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-4, -3, -3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;heappop() 시에 -4가 튀어나온다.&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;따라서, heappop으로 매 순간 가장 작은 값을 가져와서 n range 내에서 +1 씩 한 후에 마지막에 제곱하여 더하면 결과값이 나온다.&lt;/p&gt;</description>
      <category>코테</category>
      <category>heap</category>
      <category>heapq</category>
      <category>Python</category>
      <category>코딩 테스트</category>
      <category>코테</category>
      <category>파이썬</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/20</guid>
      <comments>https://junsky00.tistory.com/20#entry20comment</comments>
      <pubDate>Wed, 18 Feb 2026 16:05:50 +0900</pubDate>
    </item>
    <item>
      <title>Agent AI Mini Project - 회의 인사이트 제공 AI</title>
      <link>https://junsky00.tistory.com/19</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요:&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근래에 한국의 근간 사업이 되는 반도체 사업의 붐이 일어나며 해당 산업의 Pain Point가 드러나기 시작했다.&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;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;3. 끊임없이 나오는 논문과 기사들을 모두 읽을 수 없지만 읽으려면 많은 시간이 걸린다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 내부 R&amp;amp;D 자료를 활용하기 어렵다. 왜냐하면 수많은 데이터가 존재하고 이를 외부와 소통하는 LLM에 넣지 못한다&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;해당 포인트들은 다음과 같은 Solution으로 해결한다.&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;1. On-Premise Open Source LLM으로 사내 민감 자료를 사용할 수 있게 합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 반도체와 관련된 기사를 수집 및 Qdrant Vector DB에 저장합니다 - 스케쥴링으로 매일 오후 3시에 수집&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 반도체와 관련된 논문을 수집 및 Qdrant Vector DB에 저장합니다 - 스케쥴링으로 매일 오후 3시에 수집&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 보고서 작성 및 인사이트 제공을 위해 LLM이 정보를 취합하여 보고서 형태로 작성합니다&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;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;archi_crawl.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRrUZ6/dJMcacot0wG/PKZLNWAfOCgvgcHcKMApW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRrUZ6/dJMcacot0wG/PKZLNWAfOCgvgcHcKMApW1/img.png&quot; data-alt=&quot;프로젝트의 아키텍쳐 도식화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRrUZ6/dJMcacot0wG/PKZLNWAfOCgvgcHcKMApW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRrUZ6%2FdJMcacot0wG%2FPKZLNWAfOCgvgcHcKMApW1%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;1920&quot; height=&quot;1080&quot; data-filename=&quot;archi_crawl.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝트의 아키텍쳐 도식화&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 마지막 보고서 작성 단계에서 퀄리티 좋은 보고서를 주지 못한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 기존의 사내 R&amp;amp;D 리포트는 외부와 연결을 닫힌 상태로 정보를 누구에게도 주지 않고 안에서만 돌아야 한다&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;이러한 과정 중 현재는 1번 문제만 해결을 부분적으로 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번의 경우 맞는 LLM을 선택하고 사내 서버에 설치하여야 하는데 적은 이틀동안 하기에 제약이 많아서 수행하진 못했다.&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. LLM의 분리화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 Orchestration을 부분적으로 구현하여 해결하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재는 Agent 모델이 총 4개로 각각 R&amp;amp;D 자료, 논문, 기사 자료를 검색 및 정보를 추출하는 Agent가 존재하고 보고서 작성 Agent가 또 존재한다.&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;이를 보고서 작성 단계에서 논문 Agent와 기사 Agent 둘이 회의 혹은 결과물을 만들고 중재자 Agent가 결과물을 통합 및 보고서로 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방향을 두 가지로 나눠서 구현해 보고 현재 비교 중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 논문 Agent와 기사 Agent 둘이 서로 토의 및 질문을 하며 질문을 고도화 - 이후 중재자 Agent가 답변들을 취합 및 보고서로 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 중재자 Agent에게 Persona를 입힌 후 기준을 세웁니다. 이후, 논문 Agent와 기사 Agent가 주는 답변을 받습니다. 이후, 수정이 필요하면 instruction과 함께 다시 명령을 내립니다. 최종 통과된 답변들을 취합하여 보고서를 만드는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;815&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWK3Ce/dJMcahDjxSK/l38C0zPnuKYhLySLTv5CR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWK3Ce/dJMcahDjxSK/l38C0zPnuKYhLySLTv5CR0/img.png&quot; data-alt=&quot;사용 예시 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWK3Ce/dJMcahDjxSK/l38C0zPnuKYhLySLTv5CR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWK3Ce%2FdJMcahDjxSK%2Fl38C0zPnuKYhLySLTv5CR0%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;704&quot; height=&quot;815&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;815&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;질문: 모 기업의 미래 성장 방향성을 제시해 주고 HBM 수율 문제를 어떻게 해결할 수 있을지 알려주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV2ZxZ/dJMcaf6Afrv/Nbizwi58oMFKfoEJ2c7Hbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV2ZxZ/dJMcaf6Afrv/Nbizwi58oMFKfoEJ2c7Hbk/img.png&quot; data-alt=&quot;결과 예시 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV2ZxZ/dJMcaf6Afrv/Nbizwi58oMFKfoEJ2c7Hbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV2ZxZ%2FdJMcaf6Afrv%2FNbizwi58oMFKfoEJ2c7Hbk%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;691&quot; height=&quot;427&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;427&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;(뒷 내용은 잘랐습니다)&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;현재는 사내 내부 R&amp;amp;D 자료를 사용하지 못하였으며 넣지 않습니다.&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;On-Premise로 만들기에는 Mini-Project를 수행하며 수업을 병행하기 어려우니 최종 프로젝트에서 동일한 주제를 사용하게 된다면 그때 바꿀 계획입니다.&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;/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 본 Geek News의 &quot;우리의 장인정신을 애도합니다&quot;를 보며 많은 생각이 들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nolanlawson.com/2026/02/07/we-mourn-our-craft/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://nolanlawson.com/2026/02/07/we-mourn-our-craft/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770769352446&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;We mourn our craft&quot; data-og-description=&quot;I didn&amp;rsquo;t ask for this and neither did you. I didn&amp;rsquo;t ask for a robot to consume every blog post and piece of code I ever wrote and parrot it back so that some hack could make money off o&amp;hellip;&quot; data-og-host=&quot;nolanlawson.com&quot; data-og-source-url=&quot;https://nolanlawson.com/2026/02/07/we-mourn-our-craft/&quot; data-og-url=&quot;http://nolanlawson.com/2026/02/07/we-mourn-our-craft/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfXulE/dJMb8U8PxK1/UfHY12foPBae4qYscc74u1/img.png?width=32&amp;amp;height=32&amp;amp;face=0_0_32_32,https://scrap.kakaocdn.net/dn/cUi6F4/dJMb85vKM5k/sw9J02ePHXjOHoRh1YeS11/img.png?width=32&amp;amp;height=32&amp;amp;face=0_0_32_32&quot;&gt;&lt;a href=&quot;https://nolanlawson.com/2026/02/07/we-mourn-our-craft/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nolanlawson.com/2026/02/07/we-mourn-our-craft/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfXulE/dJMb8U8PxK1/UfHY12foPBae4qYscc74u1/img.png?width=32&amp;amp;height=32&amp;amp;face=0_0_32_32,https://scrap.kakaocdn.net/dn/cUi6F4/dJMb85vKM5k/sw9J02ePHXjOHoRh1YeS11/img.png?width=32&amp;amp;height=32&amp;amp;face=0_0_32_32');&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;We mourn our craft&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I didn&amp;rsquo;t ask for this and neither did you. I didn&amp;rsquo;t ask for a robot to consume every blog post and piece of code I ever wrote and parrot it back so that some hack could make money off o&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nolanlawson.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 시대의 흐름 속에서 우리는 생각하는 방법을 끊임없이 길러야 하며 error 및 trouble shooting에서의 이해 능력을 길러야 살아남을 수 있을 것으로 보입니다.&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;비록 Vibe Coding의 생산력과 시간의 효율성은 압도적입니다. 하지만, 코드 리팩토링, 최적화, 창의적인 생각, 등의 능력들은 아직은 힘들다고 생각합니다. 물론 몇 년 사이에 정복될 것이라고 생각합니다. 하지만, 코드를 이해할 수 있는 개발자와 그렇지 못한 개발자는 AI를 쓰더라도 결과물의 퀄리티가 다를 것이라고 생각합니다.&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;본인의 강점을 끊임없이 생성하고 AI가 하지 못하는 영역을 고민하며 성장해 나가야 한다고 느끼는 좋은 시간이었습니다.&lt;/p&gt;</description>
      <category>SKALA</category>
      <category>Agent</category>
      <category>AI</category>
      <category>AI agent</category>
      <category>SK AI Leader Academy</category>
      <category>SK AX</category>
      <category>skala</category>
      <category>보고서 생성</category>
      <category>보고서 자동화</category>
      <category>스칼라</category>
      <category>프로젝트</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/19</guid>
      <comments>https://junsky00.tistory.com/19#entry19comment</comments>
      <pubDate>Thu, 12 Feb 2026 15:31:49 +0900</pubDate>
    </item>
    <item>
      <title>Compound Engineering - 개발자들의 AI의 활용의 극대화</title>
      <link>https://junsky00.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Github:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/EveryInc/compound-engineering-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/EveryInc/compound-engineering-plugin&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770770410692&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 - EveryInc/compound-engineering-plugin: Official Claude Code compound engineering plugin&quot; data-og-description=&quot;Official Claude Code compound engineering plugin. Contribute to EveryInc/compound-engineering-plugin development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/EveryInc/compound-engineering-plugin&quot; data-og-url=&quot;https://github.com/EveryInc/compound-engineering-plugin&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rCviT/dJMb8SpDQP9/9jwRF9udfk2VZXFdSIkDn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bim93H/dJMb81fOxzY/0btUNUYL686KkudYJ1uzY1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/EveryInc/compound-engineering-plugin&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/EveryInc/compound-engineering-plugin&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rCviT/dJMb8SpDQP9/9jwRF9udfk2VZXFdSIkDn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bim93H/dJMb81fOxzY/0btUNUYL686KkudYJ1uzY1/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 - EveryInc/compound-engineering-plugin: Official Claude Code compound engineering plugin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Official Claude Code compound engineering plugin. Contribute to EveryInc/compound-engineering-plugin 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;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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI를 사용하는데 아직도 채팅 서버 혹은 CLI와 같은 Extension으로만 사용하시나요?&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;Claw 혹은 Claude에서 발표한 Agent들과 비교하면 현재 AI 사용 방법 또한 발전해야 합니다.&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;b&gt;독립적은 AI Agent들이 일을 할 수 있게 Instruction을 해야 하는 것입니다.&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;이 Compound Engineering은 Readme.md 와 같은 본인의 취향과 정보를 넣고 plan을 넣으면 AI Agent가 자동으로 작업을 수행 및 완료합니다.&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;최근에 개발자들을 위한 Prompt 레시피가 많이 존재합니다.&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;해당 레시피와 유사하다고 보면 됩니다. 하지만, 이 뉴스에서는 AI 활용 단계의 고도화 스텝들을 명시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Geek News에서 발췌:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자&amp;nbsp;성장&amp;nbsp;단계&amp;nbsp;(5단계&amp;nbsp;래더)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Stage&amp;nbsp;0:&amp;nbsp;수동&amp;nbsp;개발 &lt;br /&gt;AI&amp;nbsp;없이&amp;nbsp;코드를&amp;nbsp;한&amp;nbsp;줄씩&amp;nbsp;작성,&amp;nbsp;문서와&amp;nbsp;Stack&amp;nbsp;Overflow로&amp;nbsp;조사,&amp;nbsp;print&amp;nbsp;문으로&amp;nbsp;디버깅 &lt;br /&gt;수십&amp;nbsp;년간&amp;nbsp;좋은&amp;nbsp;소프트웨어를&amp;nbsp;만들어왔지만&amp;nbsp;2025년에는&amp;nbsp;충분히&amp;nbsp;빠르지&amp;nbsp;않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Stage&amp;nbsp;1:&amp;nbsp;채팅&amp;nbsp;기반&amp;nbsp;어시스턴스 &lt;br /&gt;ChatGPT,&amp;nbsp;Claude,&amp;nbsp;Cursor&amp;nbsp;등에&amp;nbsp;질문하여&amp;nbsp;코드&amp;nbsp;스니펫을&amp;nbsp;받고&amp;nbsp;유용한&amp;nbsp;것을&amp;nbsp;복사&amp;middot;붙여 넣기 &lt;br /&gt;AI가&amp;nbsp;리서치와&amp;nbsp;보일러플레이트&amp;nbsp;생성을&amp;nbsp;가속하지만&amp;nbsp;모든&amp;nbsp;라인을&amp;nbsp;직접&amp;nbsp;리뷰하며&amp;nbsp;완전한&amp;nbsp;통제&amp;nbsp;유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Stage&amp;nbsp;2:&amp;nbsp;에이전틱&amp;nbsp;도구&amp;nbsp;+&amp;nbsp;라인별&amp;nbsp;리뷰 &lt;br /&gt;Claude&amp;nbsp;Code,&amp;nbsp;Cursor&amp;nbsp;Composer,&amp;nbsp;Copilot&amp;nbsp;Chat&amp;nbsp;등&amp;nbsp;에이전틱&amp;nbsp;도구가&amp;nbsp;파일을&amp;nbsp;읽고&amp;nbsp;코드베이스에&amp;nbsp;직접&amp;nbsp;변경 &lt;br /&gt;에이전트가&amp;nbsp;제안하는&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;승인/거절하는&amp;nbsp;게이트키퍼&amp;nbsp;역할 &lt;br /&gt;대부분의&amp;nbsp;개발자가&amp;nbsp;이&amp;nbsp;단계에서&amp;nbsp;정체하여&amp;nbsp;AI&amp;nbsp;위임의&amp;nbsp;이점을&amp;nbsp;누리지&amp;nbsp;못함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Stage&amp;nbsp;3:&amp;nbsp;계획&amp;nbsp;우선,&amp;nbsp;PR&amp;nbsp;수준&amp;nbsp;리뷰 &lt;br /&gt;모든&amp;nbsp;것이&amp;nbsp;변하는&amp;nbsp;단계:&amp;nbsp;요구사항&amp;middot;접근&amp;nbsp;방식&amp;middot;에지&amp;nbsp;케이스를&amp;nbsp;포함한&amp;nbsp;상세&amp;nbsp;계획을&amp;nbsp;AI와&amp;nbsp;공동&amp;nbsp;작성 &lt;br /&gt;계획&amp;nbsp;수립&amp;nbsp;후&amp;nbsp;AI가&amp;nbsp;감독&amp;nbsp;없이&amp;nbsp;구현,&amp;nbsp;출력물은&amp;nbsp;PR로&amp;nbsp;리뷰 &lt;br /&gt;Compound&amp;nbsp;Engineering이&amp;nbsp;여기서&amp;nbsp;시작&amp;nbsp;&amp;mdash;&amp;nbsp;매&amp;nbsp;사이클의&amp;nbsp;계획&amp;middot;구현&amp;middot;리뷰가&amp;nbsp;시스템을&amp;nbsp;학습시켜&amp;nbsp;다음&amp;nbsp;사이클을&amp;nbsp;더&amp;nbsp;빠르고&amp;nbsp;쉽게&amp;nbsp;만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Stage&amp;nbsp;4:&amp;nbsp;아이디어&amp;nbsp;&amp;rarr;&amp;nbsp;PR&amp;nbsp;(단일&amp;nbsp;머신) &lt;br /&gt;아이디어를&amp;nbsp;제공하면&amp;nbsp;에이전트가&amp;nbsp;코드베이스&amp;nbsp;리서치,&amp;nbsp;계획,&amp;nbsp;구현,&amp;nbsp;테스트,&amp;nbsp;자체&amp;nbsp;리뷰,&amp;nbsp;이슈&amp;nbsp;해결,&amp;nbsp;PR&amp;nbsp;생성까지&amp;nbsp;모두&amp;nbsp;처리 &lt;br /&gt;참여가&amp;nbsp;아이디어&amp;nbsp;제시,&amp;nbsp;PR&amp;nbsp;리뷰,&amp;nbsp;머지&amp;nbsp;3단계로&amp;nbsp;축소 &lt;br /&gt;아직&amp;nbsp;한&amp;nbsp;컴퓨터에서&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;하나만&amp;nbsp;실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Stage&amp;nbsp;5:&amp;nbsp;병렬&amp;nbsp;클라우드&amp;nbsp;실행&amp;nbsp;(다중&amp;nbsp;디바이스) &lt;br /&gt;실행을&amp;nbsp;클라우드로&amp;nbsp;이전하여&amp;nbsp;병렬&amp;nbsp;실행 &lt;br /&gt;3개&amp;nbsp;기능에&amp;nbsp;3개&amp;nbsp;에이전트를&amp;nbsp;동시&amp;nbsp;투입,&amp;nbsp;PR이&amp;nbsp;완료되면&amp;nbsp;리뷰 &lt;br /&gt;에이전트가&amp;nbsp;피드백을&amp;nbsp;모니터링하고&amp;nbsp;자발적으로&amp;nbsp;수정&amp;nbsp;제안까지&amp;nbsp;가능 &lt;br /&gt;개별&amp;nbsp;기여자가&amp;nbsp;아닌&amp;nbsp;에이전트&amp;nbsp;함대를&amp;nbsp;지휘하는&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI를 사용하려면 다음과 같은 단계가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 단계는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Plan &amp;rarr; Work &amp;rarr; Review &amp;rarr; Compound&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;1. Plan&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요구사항 이해&lt;/li&gt;
&lt;li&gt;기존 코드 베이스 조사&lt;/li&gt;
&lt;li&gt;사용할 프레임워크, 기술&lt;/li&gt;
&lt;li&gt;접근 방식과 변경 대상 파일을 결정&lt;/li&gt;
&lt;li&gt;전체 계획의 완결성과 정합성을 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Work&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Git Repository 또는 브랜치로 작업 분리&lt;/li&gt;
&lt;li&gt;에이전트가 단계별로 구현&lt;/li&gt;
&lt;li&gt;변경 후마다 테스트, 코드 검사, 타입 체크 수행&lt;/li&gt;
&lt;li&gt;진행 상황 추적 및 이슈 발생 시 계획 수정&lt;/li&gt;
&lt;li&gt;주의: 계획이 완벽하다면 모든 코드 라인들을 감시할 필요 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Review&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 에이전트 병렬로 코드 검토&lt;/li&gt;
&lt;li&gt;발견 사항을 우선순위로 분류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;P1 (필수 수정)&lt;/li&gt;
&lt;li&gt;P2 (권장 수정)&lt;/li&gt;
&lt;li&gt;P3 (개선 사항)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;리뷰 피드백 기반으로 이슈 수정, 수정 결과 검증&lt;/li&gt;
&lt;li&gt;특이 사항: 패턴을 기록합니다 (무엇이 잘못되었는지 재발 방지를 위해 문서화)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Compound&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발은 위의 단계에서 종료하지만 Compound 단계에서는 시스템 개선이 축적&lt;/li&gt;
&lt;li&gt;이 단계에서는 기능을 더 잘 만드는 시스템을 생산 및 개선하는 단계&lt;/li&gt;
&lt;li&gt;수행 작업:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;무엇이 효과적이고 아니었는지 재사용 가능한 통찰은 무엇인지 포착&lt;/li&gt;
&lt;li&gt;YAML로 메타이데이 터, 태그, 카테고리를 추가하여 검색 가능하게 설정&lt;/li&gt;
&lt;li&gt;새로운 패턴을 CLAUDE.md에 추가하고 필요시 새 에이전트 생성&lt;/li&gt;
&lt;li&gt;다음에 시스템이 이 문제를 자동으로 잡을 수 있는가? 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 플로우를 기반으로 Github은 구조화되어있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26개의 전문 에이전트, 23개 워크플로우 커맨드, 13개 스킬로 구성되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 구동 방식이나 구성은 Github을 확인해 주세요.&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버려야 할 8가지 이념&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;3. 설루션은 엔지니어에게서 나와야 한다 - 필자는 반대하는 입장이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 코드가 주요 산출물이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 코드 작성이 핵심 업무다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 첫 시도가 좋아야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 코드는 자기표현이다 - 필자는 반대하는 입장이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 더 많이 타이핑해야 더 많이 배운다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 이념&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시스템에 취향을 추출할 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이밍 규칙, 에러 처리 패턴 등 개발자의 취향을 기록하여 AI가 승인할 만한 코드를 직접 생산하도록 해야 함&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;2. 50/50 규칙 - 50%는 기능 개발, 50%는 시스템 개선에 배분&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;3. 프로세스를 신뢰하고 안정망을 구축할 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI가 테스트, 자동 리뷰, 모니터링 같은 가드레일 구축이 핵심 따라서 수동 리뷰가 아닌 해당 단계를 신뢰할 수 있게 만드는 시스템을 추가해야 합니다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&quot;여기서 가장 어려운 결정은 무엇이었나?&quot; - AI가 까다로운 부분과 판단 지점을 드러내도록 유도&lt;/li&gt;
&lt;li&gt;&quot;어떤 대안을 거부했고, 왜 그랬나?&quot; - 고려한 옵션을 확인하여 잘못된 선택 포착&lt;/li&gt;
&lt;li&gt;&quot;가장 확신이 없는 부분은?&quot; - LLM이 자신의 약점을 인정하게 하되, 직접 물어야만 답변&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;4. 환경을 에이전트 네이티브로 구성할 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 볼 수 있거나 할 수 있는 것을 에이전트도 할 수 있어야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에이전트에게 허용하지 않는 모든 작업은 직접 수동으로 수행해야 한다&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;5. 병렬화 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에이전트를 클라우드에 여러 개 띄워서 동시에 활용하면 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 계획이 새로운 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계획 문서가 이제 가장 중요한 산출물&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이디어를 종이 위에서 수정하는 것이 코드에서 수정하는 것보다 저렴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 핵심 원칙 요약&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든&amp;nbsp;작업&amp;nbsp;단위가&amp;nbsp;후속&amp;nbsp;작업을&amp;nbsp;쉽게&amp;nbsp;만들&amp;nbsp;것 &lt;br /&gt;취향은&amp;nbsp;리뷰가&amp;nbsp;아닌&amp;nbsp;시스템에&amp;nbsp;내장할&amp;nbsp;것 &lt;br /&gt;직접&amp;nbsp;작업하지&amp;nbsp;말고&amp;nbsp;시스템을&amp;nbsp;가르칠&amp;nbsp;것 &lt;br /&gt;리뷰&amp;nbsp;프로세스가&amp;nbsp;아닌&amp;nbsp;안전망을&amp;nbsp;구축할&amp;nbsp;것 &lt;br /&gt;환경을&amp;nbsp;에이전트&amp;nbsp;네이티브로&amp;nbsp;구조화할&amp;nbsp;것 &lt;br /&gt;복리적&amp;nbsp;사고를&amp;nbsp;모든&amp;nbsp;곳에&amp;nbsp;적용할&amp;nbsp;것 &lt;br /&gt;위임의&amp;nbsp;불편함을&amp;nbsp;수용하고,&amp;nbsp;완벽하지만&amp;nbsp;확장&amp;nbsp;불가한&amp;nbsp;결과보다&amp;nbsp;불완전하지만&amp;nbsp;확장&amp;nbsp;가능한&amp;nbsp;결과&amp;nbsp;선택 &lt;br /&gt;더&amp;nbsp;적은&amp;nbsp;코드를&amp;nbsp;작성하고&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;가치를&amp;nbsp;전달할&amp;nbsp;것 &lt;br /&gt;이&amp;nbsp;원칙들은&amp;nbsp;엔지니어링을&amp;nbsp;넘어&amp;nbsp;디자인,&amp;nbsp;리서치,&amp;nbsp;글쓰기&amp;nbsp;등&amp;nbsp;취향과&amp;nbsp;맥락의&amp;nbsp;코드화가&amp;nbsp;도움&amp;nbsp;되는&amp;nbsp;모든&amp;nbsp;분야에&amp;nbsp;확장&amp;nbsp;가능&lt;/p&gt;
&lt;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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시대가 빠르게 바뀌고 있고 이에 맞게 현명하게 AI를 쓰는 방법이 화두가 되는 중이다.&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;이전의 Prompt Engineer라고 불리었던 직무는 이제는 기본 소양으로 전락해 버렸고 이에 맞게 글을 잘 쓰는 방법과 내 생각을 잘 전달하는 과정이 핵심이라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금만큼 비전공자가 코딩을 하는데 쉬운 환경은 없을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 이상 코딩은 전공자들만의 전유물이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 코딩은 기본이 되었으며 차이를 가르는 것은 창의력과 해결 방법일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 과정을 사용하게 된다면 해결 방법 또한 AI가 만들어주니 창의력에서 갈라지게 될 것이며 Plan을 짜는 단계가 모든 결과물의 분기점이 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 더 이상 일반 개발자들은 깊이 있는 기술 공부를 하지 않아도 괜찮으며 모르는 분야의 접근성이 뛰어난 시대에서 창의력, 문해력, 독해력, 필력을 갖춰야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;개발자는 이제 문과&quot;라는 위험한 발언을 조심스레 해본다.&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;Reference:&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26560&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://news.hada.io/topic? id=26560&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770772984971&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;Compound Engineering : AI 네이티브 엔지니어링 철학 | GeekNews&quot; data-og-description=&quot;모든 엔지니어링 작업 단위가 이후 작업을 더 쉽게 만드는 복리형 소프트웨어 개발 방법론으로, AI 에이전트와의 협업을 체계화한 4단계 루프(계획&amp;rarr;실행&amp;rarr;리뷰&amp;rarr;복리화) 를 핵심으로 구성반복 &quot; data-og-host=&quot;news.hada.io&quot; data-og-source-url=&quot;https://news.hada.io/topic?id=26560&quot; data-og-url=&quot;https://news.hada.io/topic?id=26560&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b2zc5E/dJMb8PGr5fQ/k9y1kZmHBQXShO4NpL00Gk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/chwtKf/dJMb8RjXQzv/nuyjZ2PuqACSZJjWOUFkFK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26560&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.hada.io/topic?id=26560&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b2zc5E/dJMb8PGr5fQ/k9y1kZmHBQXShO4NpL00Gk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/chwtKf/dJMb8RjXQzv/nuyjZ2PuqACSZJjWOUFkFK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;Compound Engineering : AI 네이티브 엔지니어링 철학 | GeekNews&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;모든 엔지니어링 작업 단위가 이후 작업을 더 쉽게 만드는 복리형 소프트웨어 개발 방법론으로, AI 에이전트와의 협업을 체계화한 4단계 루프(계획&amp;rarr;실행&amp;rarr;리뷰&amp;rarr;복리화) 를 핵심으로 구성반복&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;news.hada.io&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>IT 뉴스</category>
      <category>Agent 코딩</category>
      <category>Agent 활용</category>
      <category>AI</category>
      <category>AI agent</category>
      <category>Compound Engineering</category>
      <category>IT 지식</category>
      <category>IT뉴스</category>
      <category>vibe coding</category>
      <category>프로그래밍</category>
      <category>프롬프트</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/18</guid>
      <comments>https://junsky00.tistory.com/18#entry18comment</comments>
      <pubDate>Wed, 11 Feb 2026 10:26:11 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL Is All You Need (?)</title>
      <link>https://junsky00.tistory.com/17</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ms3ol/dJMcac207SF/RjrHETt3KxBLF7WqSgd6q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ms3ol/dJMcac207SF/RjrHETt3KxBLF7WqSgd6q1/img.png&quot; data-alt=&quot;Postgre 진짜 하나로 끝?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ms3ol/dJMcac207SF/RjrHETt3KxBLF7WqSgd6q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fms3ol%2FdJMcac207SF%2FRjrHETt3KxBLF7WqSgd6q1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Postgre 진짜 하나로 끝?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;PostgreSQL&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 AI 화두와 비롯해 메모리 DB 사용 등 여러 기능들을 추가하고 사용하며 여러 기능들을 많이 사용하는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 이번에 들고 온 뉴스의 주장은 Postgres 하나로 모든 것을 해결할 수 있다는 주장이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;대부분의 회사는 Postgres 하나로 충분해 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;사용하는 Tool들&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 37.7892%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;도구&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&gt;목적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;Elasticsearch&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&gt;검색&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;Pinecone&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&gt;벡터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;Redis&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&gt;캐시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;Mongo DB&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&gt;JSON, 비정형 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;Kafka&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&gt;메세지 큐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;InfluxDB&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&gt;시계열 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;PostgreSQL&lt;/td&gt;
&lt;td style=&quot;width: 17.9361%;&quot;&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;이런 애들을 모두 연결하여 혹은 일부만 사용하여 연결하여 사용하는데 문제가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 에이전트는 테스트 DB를 빠르게 띄우고, 포크 하고, 디버깅해야 하는데 여러 DB를 쓰면 힘들다.&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;Ex) DB(Pinecone + Elasticsearch + Redis + MongoDB)로 사용하면 하나가 무너지거나 실패하면 해당 DB들의 모든 것들을 점검하고 모니터링하며 여러 노력들을 부어야 한다.&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;하지만 PostgreSQL은 위의 6개의 다른 tool들을 내부적으로 지원해 준다.&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;Elasticsearch - pg_textsearch - 둘 다 BM25 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pinecone - pgvector + pgvectorscale - 둘 다 DiskANN/HNSW 사용 - Pinecone보다 75% 낮은 cost와 28배 낮은 latency&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;InfluxDB - TimescaleDB - 둘 다 time partition 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MongoDB - JSONB - 둘 다 document index 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지리정보 - PostGIS - GIS 포맷 지원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kafka - pgmq - 로그 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis - UNLOGGED tables - 둘 다 in-memory 사용&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;같은 방식으로 작동하는가? Y&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 목적인가? Y&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 DB에서 사용하는가? N&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;Postgres를 쓰면 하나의 DB에서 작동 가능한가? Y&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;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 46.8605%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 21px;&quot;&gt;목적&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 21px;&quot;&gt;Postgre&lt;/td&gt;
&lt;td style=&quot;width: 14.6124%; height: 21px;&quot;&gt;다른 tool +&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 21px;&quot;&gt;백업 저장소&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 21px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 14.6124%; height: 21px;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 21px;&quot;&gt;모니터링 대시보드&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 21px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 14.6124%; height: 21px;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 21px;&quot;&gt;시큐리티 패치&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 21px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 14.6124%; height: 21px;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 21px;&quot;&gt;온콜 런북&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 21px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 14.6124%; height: 21px;&quot;&gt;7&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;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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미래 시대에는 AI Agent와 AI 시대에는 여러 DB들을 사용해야 하는 경우가 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 Postgres를 사용하면 필요한 기능들은 외부 extension으로 불러서 사용 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 복잡한 파이프라인을 구축할 필요 없이 하나의 DB에서 관리하여&lt;/p&gt;
&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;1. 모니터링&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2. 디버깅&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3. 관리&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;4. 동기화&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;5. 복구&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 data-ke-size=&quot;size16&quot;&gt;가 펴하게 할 수 있도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론&amp;nbsp;&lt;b&gt;Postgre로 모든 게 가능한 것은 아니다&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;특정 작업은 전문 DB가 낫기도 하고 right tool이라는 신화에 대해서 비판하고자 하기 위함이다.&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;따라서, Postgres부터 시작하고 필요 증명 (PoC) 단계에서 사용하고 이후에 Needs가 필요하다면 추가적으로 복잡하게 다르 DB를 사용하자.&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;하지만 대부분의 경우 Postgres 하나로 충분해 보이니 동기화 실패, 복구 난이도 폭증, 운영 복잡성의 측면에서 비교를 하고 사용하자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 사용 코드는 아래의 reference 및 source url에서 확인하면 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;References:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.tigerdata.com/blog/its-2026-just-use-postgres&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.tigerdata.com/blog/its-2026-just-use-postgres&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770251625490&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;It&amp;rsquo;s 2026, Just Use Postgres | Tiger Data&quot; data-og-description=&quot;Stop managing multiple databases. Postgres extensions replace Elasticsearch, Pinecone, Redis, MongoDB, and InfluxDB with BM25, vectors, JSONB, and time-series in one database.&quot; data-og-host=&quot;www.tigerdata.com&quot; data-og-source-url=&quot;https://www.tigerdata.com/blog/its-2026-just-use-postgres&quot; data-og-url=&quot;https://www.tigerdata.com/blog/its-2026-just-use-postgres&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gRSaB/dJMb8ZvwML3/8BLT9uAtv8jFtD66HHDpzK/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/hDX0T/dJMb81GSxXv/zkakTLhcp8LPPLyMeBAIQ1/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/b4gnbh/dJMb9g46vWR/9CXviG2jPmvsLYeVaegYl0/img.png?width=1000&amp;amp;height=563&amp;amp;face=0_0_1000_563&quot;&gt;&lt;a href=&quot;https://www.tigerdata.com/blog/its-2026-just-use-postgres&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.tigerdata.com/blog/its-2026-just-use-postgres&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gRSaB/dJMb8ZvwML3/8BLT9uAtv8jFtD66HHDpzK/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/hDX0T/dJMb81GSxXv/zkakTLhcp8LPPLyMeBAIQ1/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/b4gnbh/dJMb9g46vWR/9CXviG2jPmvsLYeVaegYl0/img.png?width=1000&amp;amp;height=563&amp;amp;face=0_0_1000_563');&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;It&amp;rsquo;s 2026, Just Use Postgres | Tiger Data&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Stop managing multiple databases. Postgres extensions replace Elasticsearch, Pinecone, Redis, MongoDB, and InfluxDB with BM25, vectors, JSONB, and time-series in one database.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.tigerdata.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>IT 뉴스</category>
      <author>junsky00</author>
      <guid isPermaLink="true">https://junsky00.tistory.com/17</guid>
      <comments>https://junsky00.tistory.com/17#entry17comment</comments>
      <pubDate>Thu, 5 Feb 2026 09:38:05 +0900</pubDate>
    </item>
  </channel>
</rss>