<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>MemoLOG</title>
    <link>https://4802852.tistory.com/</link>
    <description>기구쟁이의 우당탕탕 코딩 도전기</description>
    <language>ko</language>
    <pubDate>Thu, 14 May 2026 09:12:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>파랑ㅇ</managingEditor>
    <image>
      <title>MemoLOG</title>
      <url>https://tistory1.daumcdn.net/tistory/2116835/attach/ee2f766b211946309625c8ba299e69b6</url>
      <link>https://4802852.tistory.com</link>
    </image>
    <item>
      <title>[HA] SSH 애드온, HACS 설치하기</title>
      <link>https://4802852.tistory.com/300</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 진행한대로 HAOS를 설치했으면 내부망에서 HomeAssistant에 접속이 가능하다.&lt;br /&gt;기본 포트는 8123으로 필자의 환경에서는 192.168.0.x:8123 주소를 입력하여 접속하였다.&lt;br /&gt;처음 구성에 시간을 약간 기다리면 HomeAssistant 화면으로 접속할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2846&quot; data-origin-height=&quot;1488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2hBCg/btsL1DSais6/6EIqve3PDaTrkjIXk30LzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2hBCg/btsL1DSais6/6EIqve3PDaTrkjIXk30LzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2hBCg/btsL1DSais6/6EIqve3PDaTrkjIXk30LzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2hBCg%2FbtsL1DSais6%2F6EIqve3PDaTrkjIXk30LzK%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;2846&quot; height=&quot;1488&quot; data-origin-width=&quot;2846&quot; data-origin-height=&quot;1488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 각종 장치들을 연결할 준비를 해야하는데, 그 첫번째가 Home Assistant Commuity Store(줄여서 HACS)로 HomeAssistant 시스템의 앱스토어라고 보면 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SSH 애드온 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HACS를 설치하기 위해서는 SSH 접속이 필요하다. 이 과정을 번거롭지 않게 웹에서 할 수 있도록 애드온을 설치해주면 좋다.&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;2334&quot; data-origin-height=&quot;1286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XiZ58/btsL0C0RB05/y6Qkc6JgAbPScF8BJpBzX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XiZ58/btsL0C0RB05/y6Qkc6JgAbPScF8BJpBzX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XiZ58/btsL0C0RB05/y6Qkc6JgAbPScF8BJpBzX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXiZ58%2FbtsL0C0RB05%2Fy6Qkc6JgAbPScF8BJpBzX1%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;2334&quot; height=&quot;1286&quot; data-origin-width=&quot;2334&quot; data-origin-height=&quot;1286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정에서 애드온 메뉴를 클릭하고, 오른쪽 아래 애드온 스토어로 들어가 SSH를 검색한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2412&quot; data-origin-height=&quot;1018&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z7Zro/btsL0Wru5lw/m3Yp0daR9YHukMwz00VugK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z7Zro/btsL0Wru5lw/m3Yp0daR9YHukMwz00VugK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z7Zro/btsL0Wru5lw/m3Yp0daR9YHukMwz00VugK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz7Zro%2FbtsL0Wru5lw%2Fm3Yp0daR9YHukMwz00VugK%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;2412&quot; height=&quot;1018&quot; data-origin-width=&quot;2412&quot; data-origin-height=&quot;1018&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Terminal &amp;amp; SSH 를 클릭하고 설치해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wGAmQ/btsL2BlxJtI/lwCmuMsDEQev8KWNKLxKA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wGAmQ/btsL2BlxJtI/lwCmuMsDEQev8KWNKLxKA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wGAmQ/btsL2BlxJtI/lwCmuMsDEQev8KWNKLxKA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwGAmQ%2FbtsL2BlxJtI%2FlwCmuMsDEQev8KWNKLxKA1%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;1516&quot; height=&quot;758&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치하고 나면 아래와 같은 화면을 볼 수 있는데, 여기에서 [웹 UI 열기]를 클릭해주면 HAOS를 처음 시작했을 때 보았던 cli 화면이 나오게 된다. 이렇게 함으로써 cli에서 작업할 일이 있을 때 HAOS에 직접 입력하지 않고도 작업을 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;1118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ej66sB/btsL03XWnYh/erusmmSsmD825fU2quIipK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ej66sB/btsL03XWnYh/erusmmSsmD825fU2quIipK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ej66sB/btsL03XWnYh/erusmmSsmD825fU2quIipK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fej66sB%2FbtsL03XWnYh%2FerusmmSsmD825fU2quIipK%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;2080&quot; height=&quot;1118&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;1118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HACS 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cli에서 아래와 같이 입력해준다.&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;wget -O - https://get.hacs.xyz | bash -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 되면 아래와 같이 설치가 진행이 되면서 HACS 설치가 진행이 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2222&quot; data-origin-height=&quot;1444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WcQu1/btsL1z9PFgr/Abk6cEXnpYEX5jbCiZIaAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WcQu1/btsL1z9PFgr/Abk6cEXnpYEX5jbCiZIaAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WcQu1/btsL1z9PFgr/Abk6cEXnpYEX5jbCiZIaAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWcQu1%2FbtsL1z9PFgr%2FAbk6cEXnpYEX5jbCiZIaAK%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;2222&quot; height=&quot;1444&quot; data-origin-width=&quot;2222&quot; data-origin-height=&quot;1444&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되었으면 HAOS를 재부팅해주어야 하는데, 개발자도구 메뉴에서 진행할 수 있다.&lt;br /&gt;앞으로 설정을 변경하고 HAOS를 재부팅하는 경우가 자주 생기는데, 이 방법으로 계속 진행되므로 기억해두면 좋다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2748&quot; data-origin-height=&quot;1400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UCOOq/btsL1giUZUS/RWRPcrmsUm9taBydjCKabk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UCOOq/btsL1giUZUS/RWRPcrmsUm9taBydjCKabk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UCOOq/btsL1giUZUS/RWRPcrmsUm9taBydjCKabk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUCOOq%2FbtsL1giUZUS%2FRWRPcrmsUm9taBydjCKabk%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;2748&quot; height=&quot;1400&quot; data-origin-width=&quot;2748&quot; data-origin-height=&quot;1400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정에서 &quot;기기 및 서비스&quot;를 클릭해서 들어가주고,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2296&quot; data-origin-height=&quot;940&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wG0CA/btsL18c4wWU/8R8CJtOVuB2Ojww23SGks1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wG0CA/btsL18c4wWU/8R8CJtOVuB2Ojww23SGks1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wG0CA/btsL18c4wWU/8R8CJtOVuB2Ojww23SGks1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwG0CA%2FbtsL18c4wWU%2F8R8CJtOVuB2Ojww23SGks1%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;2296&quot; height=&quot;940&quot; data-origin-width=&quot;2296&quot; data-origin-height=&quot;940&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 하단 &quot;통합구성요소 추가하기&quot;를 클릭하고 haos를 검색하여 클릭해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2352&quot; data-origin-height=&quot;1486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byK7E6/btsL2IdTBVc/AsRQ2Qx7YRpjl817osYra1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byK7E6/btsL2IdTBVc/AsRQ2Qx7YRpjl817osYra1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byK7E6/btsL2IdTBVc/AsRQ2Qx7YRpjl817osYra1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyK7E6%2FbtsL2IdTBVc%2FAsRQ2Qx7YRpjl817osYra1%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;2352&quot; height=&quot;1486&quot; data-origin-width=&quot;2352&quot; data-origin-height=&quot;1486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4가지 정도 동의하는 항목이 나오고 다음을 누르면 아래와 같은 화면이 나오는데, 표시된 링크로 들어가 github 계정에 연결해준다. (github 계정 필요)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2158&quot; data-origin-height=&quot;1228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IYSYo/btsL1ZAo8o9/awXAFmhZ7Wd7rxj1LMDzsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IYSYo/btsL1ZAo8o9/awXAFmhZ7Wd7rxj1LMDzsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IYSYo/btsL1ZAo8o9/awXAFmhZ7Wd7rxj1LMDzsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIYSYo%2FbtsL1ZAo8o9%2FawXAFmhZ7Wd7rxj1LMDzsk%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;2158&quot; height=&quot;1228&quot; data-origin-width=&quot;2158&quot; data-origin-height=&quot;1228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록이 완료되고 나면 왼쪽 메뉴바에 HACS가 나타난 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2826&quot; data-origin-height=&quot;1468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKnF7R/btsL2lb9Qvw/JTUsTEWBlhSmFHJMuyQkj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKnF7R/btsL2lb9Qvw/JTUsTEWBlhSmFHJMuyQkj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKnF7R/btsL2lb9Qvw/JTUsTEWBlhSmFHJMuyQkj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKnF7R%2FbtsL2lb9Qvw%2FJTUsTEWBlhSmFHJMuyQkj0%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;2826&quot; height=&quot;1468&quot; data-origin-width=&quot;2826&quot; data-origin-height=&quot;1468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 HomeAssistant에 HAS를 설치하였고, 다음에는 HA에 집에 있던 장치를 한가지 연결하여 HA가 동작하는 것을 확인해볼 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;내용 관련하여 도움이나 조언 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>HOME ASSISTANT</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/300</guid>
      <comments>https://4802852.tistory.com/300#entry300comment</comments>
      <pubDate>Sun, 26 Jan 2025 01:16:30 +0900</pubDate>
    </item>
    <item>
      <title>[HA] 미니PC에 HAOS 설치하기</title>
      <link>https://4802852.tistory.com/299</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;미니PC에 HAOS를 설치하는 것은 윈도우를 설치하는 것과는 약간 다르게 진행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 윈도우를 설치할 때에는 다른 PC에서 윈도우를 다운받아 부팅디스크를 만들고, 이를 설치하고자 하는 PC에 연결하여 새로운 PC에 윈도우를 설치하게 된다. 하지만 HAOS는 이러한 식으로 부팅디스크를 만들어주지 않기 때문에 한 단계를 더 거쳐야하는데, 라이브 리눅스(우분투)를 이용하여 새 PC에 리눅스(우분투)를 구동시키고, 여기에서 HAOS 설치 프로그램을 동작시켜 새로운 PC의 저장장치에 HAOS를 설치하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;준비물은 우분투를 설치할 &lt;b&gt;USB메모리(8GB 이상), USB메모리를 우분투 부팅디스크로 만들어줄 PC&lt;/b&gt;이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;우분투 부팅 디스크 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 부팅디스크 만드는 과정은 윈도우 부팅디스크를 만드는 것과 별반 다르지 않다. 다만 보통 윈도우의 경우 마이크로소프트에서 받은 파일을 실행하면 USB를 부팅디스크로 만들어주지만, 우분투의 경우에는 OS파일을 플래시 해주는 별도의 프로그램이 한 단계 더 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 이미지 파일은 우분투 홈페이지(&lt;a href=&quot;https://ubuntu.com/download/desktop&quot;&gt;https://ubuntu.com/download/desktop&lt;/a&gt;)에서 받을 수 있다. 버전은 크게 주의할 것이 없어 최신버전으로 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플래시 프로그램은 많은 사람들이 이용하는 balenaEtcher(&lt;a href=&quot;https://etcher.balena.io/#download-etcher&quot;&gt;https://etcher.balena.io/#download-etcher&lt;/a&gt;)를 사용했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;installed-etcher-bookworm.jpg&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rUIC7/btsLS5N4Cro/nKq9be4kkxj6GnBaE5GUqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rUIC7/btsLS5N4Cro/nKq9be4kkxj6GnBaE5GUqK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rUIC7/btsLS5N4Cro/nKq9be4kkxj6GnBaE5GUqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrUIC7%2FbtsLS5N4Cro%2FnKq9be4kkxj6GnBaE5GUqK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;856&quot; height=&quot;429&quot; data-filename=&quot;installed-etcher-bookworm.jpg&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;balenaEtcher를 실행하면 위와 같은 화면이 나오는데, 짐작할 수 있듯, 왼쪽에는 우분투 이미지, 가운데에는 USB메모리를 선택하고 진행하면 우분투 USB 부팅메모리를 갖게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(아래에서부터는 바이오스 화면 등에서 진행하므로 스크린샷이 없음)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HAOS 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우를 설치할 때처럼 부팅 때 Del 키를 눌러 바이오스에 진입하고, USB의 부팅순위를 조절하여 USB로 부팅될 수 있도록 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 부팅디스크로 부팅하고, Try or Install Ubuntu 메뉴를 선택하면 우분투가 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적당히 언어 등을 선택하고 넘어가면 우분투를 사용만 할 것인지(Try) 설치할 것인지(Install) 묻는 창이 나오는데, 미니PC에 우분투를 설치할 것은 아니므로 여기서 Try를 선택한다. 그러면 우분투의 기본 바탕화면이 나오게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Home Assistant의 이미지 파일을 다운받아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터넷 브라우저(아마도 기본 브라우저인 Firefox)를 켜고 Home Assistant Github 페이지(&lt;a href=&quot;https://github.com/home-assistant&quot;&gt;https://github.com/home-assistant&lt;/a&gt;)로 이동하고, 살짝 스크롤하여 operating system을 찾는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdw0Bu/btsLRiBtH46/COPBHfZBE8c5wAYUfJWkH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdw0Bu/btsLRiBtH46/COPBHfZBE8c5wAYUfJWkH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdw0Bu/btsLRiBtH46/COPBHfZBE8c5wAYUfJWkH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdw0Bu%2FbtsLRiBtH46%2FCOPBHfZBE8c5wAYUfJWkH0%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;1836&quot; height=&quot;852&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭하여 들어가면 오른쪽에 Releases 칸을 찾을 수 있는데, 이곳에서 이미지 파일을 받으면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2512&quot; data-origin-height=&quot;1168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sh1Gw/btsLRG29cIw/okVKDscSOImSQbhs0I9Rtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sh1Gw/btsLRG29cIw/okVKDscSOImSQbhs0I9Rtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sh1Gw/btsLRG29cIw/okVKDscSOImSQbhs0I9Rtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsh1Gw%2FbtsLRG29cIw%2FokVKDscSOImSQbhs0I9Rtk%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;2512&quot; height=&quot;1168&quot; data-origin-width=&quot;2512&quot; data-origin-height=&quot;1168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 내 환경에 맞는 &quot;haos_generic-x86-64-14.1.img.xz&quot; 파일을 다운로드 받았다. 이 파일을 실행시키면, 미니PC의 내장 SSD를 Target으로 하여 HAOS를 설치할 수 있게 된다. 잠시간 기다리면 SSD의 파티션이 바뀌면서 HAOS 설치가 완료된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2408&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYQLdI/btsLSywzKaW/2x8FRDbNIBQh22VjSDgrtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYQLdI/btsLSywzKaW/2x8FRDbNIBQh22VjSDgrtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYQLdI/btsLSywzKaW/2x8FRDbNIBQh22VjSDgrtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYQLdI%2FbtsLSywzKaW%2F2x8FRDbNIBQh22VjSDgrtK%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;2408&quot; height=&quot;814&quot; data-origin-width=&quot;2408&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 위의 전원 버튼을 눌러 Restart를 누르면 중앙쪽에 부팅디스크를 빼고 엔터를 누르라는 문구가 뜨는데, USB를 빼고 엔터를 누르면 정상적으로 우분투는 종료되고 시스템이 재시작된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바이오스 Security Boot 비활성화, UEFI 활성화&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 시스템이 재시작되고나서 HAOS가 정상적으로 구동되지 않을 수 있다. 이는 Security Boot 옵션 때문인데, 쉽게 말하면 윈도우와 같은 인증된 OS가 아니면 구동이 되지 않도록 하는 옵션이다. 이 옵션이 켜져있으면 HAOS가 설치된 SSD를 부팅가능한 저장소로 인식하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 HAOS는 UEFI 환경에서 동작하므로, UEFI도 활성화해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재부팅될 때 Del 키를 연타하여 바이오스 설정에 들어가서 설정해주면 된다. 필자의 기가바이트 바이오스 기준으로 KVM Support를 Legacy로 바꾸어주어야 UEFI 모드를 활성화 할 수 있었다. 이렇게 설정하고 재부팅하면 HAOS가 설치된 SSD를 부팅디스크 우선순위 목록에서 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 HAOS로 부팅을 완료하면 설치가 되고 있는것과 같은 화면이 쫘르륵 뜨다가 아래와 같은 화면을 만날 수 있다. HAOS 설치가 완료된 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjSoFx/btsLTQCVJnm/RAlc7H8bmjde0eiKcrgYk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjSoFx/btsLTQCVJnm/RAlc7H8bmjde0eiKcrgYk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjSoFx/btsLTQCVJnm/RAlc7H8bmjde0eiKcrgYk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjSoFx%2FbtsLTQCVJnm%2FRAlc7H8bmjde0eiKcrgYk0%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;797&quot; height=&quot;573&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;만났던 문턱들&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HAOS를 정상적으로 설정하고, 모든 바이오스 세팅을 완료했는데도 HAOS가 부팅되지 않는 경우가 있었다. 빈 화면에 cli를 뜻하는 _ 하나만 딱 뜨는 문제였는데, 결국 원인은 못찾았지만, 이전 버전의 HAOS를 설치해서 정상적으로 부팅할 수 있었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Reference&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HomeAssistant 네이버 카페에서 고수분들로부터 많은 정보를 얻고 있으며, 설치 방법에 대한 것은 카페의 레이군님의 글을 보고 따라하였다.&lt;br /&gt;&lt;a href=&quot;https://cafe.naver.com/koreassistant/13836&quot;&gt;https://cafe.naver.com/koreassistant/13836&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;내용 관련하여 도움이나 조언 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>HOME ASSISTANT</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/299</guid>
      <comments>https://4802852.tistory.com/299#entry299comment</comments>
      <pubDate>Sun, 19 Jan 2025 20:43:39 +0900</pubDate>
    </item>
    <item>
      <title>미니PC에 Home Assistant 설치하기[시작]</title>
      <link>https://4802852.tistory.com/298</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우분투 서버에 도커 환경에서 Home Assistant를 플랫폼으로 하여 각종 IoT 기기들을 제어하고 있었다. 모종의 이유로 남는 미니PC가 생기게 되었고, 굳이 메인PC가 있는데 윈도우를 까는 것도, 그렇다고 우분투 기기를 하나 더 만드는 것도 애매하여, HAOS(Home Assistant OS)를 설치하기로 마음을 먹었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HAOS가 아닌 다른 OS에서 docker 등을 이용하여 설치하는 것은 기능상에 약간의 제한사항이 있다. (사실 미니PC를 장만해야 할 정도로 큰 요소는 아니다.) 필자의 우분투 서버에는 블루투스 기능이 없어 동글을 장착해 두었는데, 무엇인지 알 수 없는 문제가 있어 블루투스 기능이 자꾸 죽었다. 원인을 찾지는 못하고, 결국 일정 시간 주기로 블루투스 기능을 다시 로드하는 자동화를 걸어둘 수 밖에 없었다. 그러한 자잘한 찝찝함과 본의아니게 생긴 미니PC를 핑계삼아 이번에 미니PC에 HAOS를 새로 설치하고, 기존 연결했던 기기들과 자동화 설정들을 옮기면서 글로 정리해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미니PC는 기가바이트의 GB-BPCE-3455 모델로 진행하며, 음성 명령을 위해 갤럭시홈미니를 사용하기 때문에 Home Assistant와 Smartthings를 동시에 사용해서 기기들을 관리할 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;내용 관련하여 도움이나 조언 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>HOME ASSISTANT</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/298</guid>
      <comments>https://4802852.tistory.com/298#entry298comment</comments>
      <pubDate>Sun, 19 Jan 2025 03:49:11 +0900</pubDate>
    </item>
    <item>
      <title>백준 2208: 보석 줍기 (Python)</title>
      <link>https://4802852.tistory.com/297</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UUoS2/btsAwrblCk6/R7cwptKtt179Q0zTNcSRs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UUoS2/btsAwrblCk6/R7cwptKtt179Q0zTNcSRs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UUoS2/btsAwrblCk6/R7cwptKtt179Q0zTNcSRs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUUoS2%2FbtsAwrblCk6%2FR7cwptKtt179Q0zTNcSRs0%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;524&quot; height=&quot;120&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2208&quot;&gt;https://www.acmicpc.net/problem/2208&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1700317175406&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2208번: 보석 줍기&quot; data-og-description=&quot;화영이는 고대 유적을 탐사하던 도중 보석을 발견했다. 유적 속에는 N(1 &amp;le; N &amp;le; 100,000)개의 보석들이 일렬로 놓여 있었다. 각각의 보석의 가치는 다를 수 있기 때문에, 화영이는 가급적 많은 이득&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2208&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2208&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fskCi/hyUypqsIq4/kHkIVGEPuxvefKDRuHQ6m1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2208&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2208&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fskCi/hyUypqsIq4/kHkIVGEPuxvefKDRuHQ6m1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2208번: 보석 줍기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;화영이는 고대 유적을 탐사하던 도중 보석을 발견했다. 유적 속에는 N(1 &amp;le; N &amp;le; 100,000)개의 보석들이 일렬로 놓여 있었다. 각각의 보석의 가치는 다를 수 있기 때문에, 화영이는 가급적 많은 이득&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재인덱를 포함하는 누적합과, 현재 인덱스가 M번째가 되는 누적합 중 큰 값을 저장하여 문제를 해결할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sys

input = sys.stdin.readline

N, M = map(int, input().split())
arr = [0]
prefixSum = [0]
for _ in range(N):
    arr.append(int(input()))
    prefixSum.append(prefixSum[-1] + arr[-1])
dp = [0] * (N + 1)
dp[M] = prefixSum[M]

for i in range(M + 1, N + 1):
    dp[i] = max(dp[i - 1] + arr[i], prefixSum[i] - prefixSum[i - M])

print(max(dp))&lt;/code&gt;&lt;/pre&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;b&gt;코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩/백준 (Python)</category>
      <category>Python</category>
      <category>백준</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/297</guid>
      <comments>https://4802852.tistory.com/297#entry297comment</comments>
      <pubDate>Sat, 18 Nov 2023 23:19:45 +0900</pubDate>
    </item>
    <item>
      <title>백준 2228: 구간 나누기 (Python)</title>
      <link>https://4802852.tistory.com/296</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;beakjoon_logo.png&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XVt8b/btsArd45XzJ/d0eO5GdynBkdkk2a3kP1c1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XVt8b/btsArd45XzJ/d0eO5GdynBkdkk2a3kP1c1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XVt8b/btsArd45XzJ/d0eO5GdynBkdkk2a3kP1c1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXVt8b%2FbtsArd45XzJ%2Fd0eO5GdynBkdkk2a3kP1c1%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;524&quot; height=&quot;120&quot; data-filename=&quot;beakjoon_logo.png&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2228&quot;&gt;https://www.acmicpc.net/problem/2228&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1700149376158&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2228번: 구간 나누기&quot; data-og-description=&quot;N(1 &amp;le; N &amp;le; 100)개의 수로 이루어진 1차원 배열이 있다. 이 배열에서 M(1 &amp;le; M &amp;le; &amp;lceil;(N/2)&amp;rceil;)개의 구간을 선택해서, 구간에 속한 수들의 총 합이 최대가 되도록 하려 한다. 단, 다음의 조건들이 만족되&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2228&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2228&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dnzjt9/hyUu0SNtSy/X1NLE5gY4qaKpv9FwiJgBK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2228&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2228&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dnzjt9/hyUu0SNtSy/X1NLE5gY4qaKpv9FwiJgBK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2228번: 구간 나누기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N(1 &amp;le; N &amp;le; 100)개의 수로 이루어진 1차원 배열이 있다. 이 배열에서 M(1 &amp;le; M &amp;le; &amp;lceil;(N/2)&amp;rceil;)개의 구간을 선택해서, 구간에 속한 수들의 총 합이 최대가 되도록 하려 한다. 단, 다음의 조건들이 만족되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점화식을 생각해내기가 어려웠고, 구글을 통해 점화식에 대한 힌트를 얻어 문제를 해결할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n번째 원소까지의 m개 구간합을 구하고자 할 때, &lt;b&gt;max(n-2번째 원소까지의 m-1개 최대 구간합, n-1번째 원소까지의 m개 최대 구간합) + 현재값&lt;/b&gt;의 점화식을 통해 문제를 해결할 수 있다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;n-2번째 원소까지 m-1개의 구간으로 나누고 n번째 원소를 m번째 구간으로 하여 구한 합과,&lt;/li&gt;
&lt;li&gt;n-1번째 원소까지 m개의 구간으로 나누고 n번째 원소를 m번째 구간에 포함하여 구한 합을 비교하는 것이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 해결하기 위해 i번째 수를 포함하는 j개 최대 구간합을 concluded[i][j]에 저장하고, i번째 수를 포함하지 않는 j개 최대 구간합을 notConcluded[i][j]에 저장하였다. 이 두 matrix의 마지막 값 중 큰 값을 출력하여 문제를 해결할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sys

input = sys.stdin.readline

N, M = map(int, input().split())
concluded = [[0] + [float(&quot;-inf&quot;)] * M for _ in range(N + 1)]
notConcluded = [[0] + [float(&quot;-inf&quot;)] * M for _ in range(N + 1)]

for i in range(1, N + 1):
    num = int(input())
    for j in range(1, M + 1):
        notConcluded[i][j] = max(concluded[i - 1][j], notConcluded[i - 1][j])
        concluded[i][j] = max(concluded[i - 1][j], notConcluded[i - 1][j - 1]) + num

print(max(concluded[N][M], notConcluded[N][M]))&lt;/code&gt;&lt;/pre&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;b&gt;코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩/백준 (Python)</category>
      <category>Python</category>
      <category>백준</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/296</guid>
      <comments>https://4802852.tistory.com/296#entry296comment</comments>
      <pubDate>Fri, 17 Nov 2023 00:36:33 +0900</pubDate>
    </item>
    <item>
      <title>백준 2169: 로봇 조종하기 (Python)</title>
      <link>https://4802852.tistory.com/295</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1AbK6/btszH4VVBjG/GsnCWxezn6kGf9emRZ5WC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1AbK6/btszH4VVBjG/GsnCWxezn6kGf9emRZ5WC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1AbK6/btszH4VVBjG/GsnCWxezn6kGf9emRZ5WC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1AbK6%2FbtszH4VVBjG%2FGsnCWxezn6kGf9emRZ5WC0%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;524&quot; height=&quot;120&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2169&quot;&gt;https://www.acmicpc.net/problem/2169&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1699170725632&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2169번: 로봇 조종하기&quot; data-og-description=&quot;첫째 줄에 N, M(1&amp;le;N, M&amp;le;1,000)이 주어진다. 다음 N개의 줄에는 M개의 수로 배열이 주어진다. 배열의 각 수는 절댓값이 100을 넘지 않는 정수이다. 이 값은 그 지역의 가치를 나타낸다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2169&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2169&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dcJAst/hyUnSganDV/A5AVElUHuPrVLBXVUF7mO0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2169&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2169&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dcJAst/hyUnSganDV/A5AVElUHuPrVLBXVUF7mO0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2169번: 로봇 조종하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N, M(1&amp;le;N, M&amp;le;1,000)이 주어진다. 다음 N개의 줄에는 M개의 수로 배열이 주어진다. 배열의 각 수는 절댓값이 100을 넘지 않는 정수이다. 이 값은 그 지역의 가치를 나타낸다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음엔 dfs를 이용한 dp를 생각해보았지만 해결하지 못했다.&lt;br /&gt;로봇이 왼쪽, 오른쪽, 아래 방향으로만 이동할 수 있다는 점에 착안하여 i 행에서 왼쪽으로 움직일 때와 오른쪽으로 움직일 때를 각각 계산하여 최대값을 구하는 식으로 dp를 이용하여 해결할 수 있었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sys

input = sys.stdin.readline

N, M = map(int, input().split())
dp = []
for i in range(N):
    dp.append(list(map(int, input().split())))
for i in range(1, M):
    dp[0][i] += dp[0][i - 1]
for i in range(1, N):
    dplr = dp[i][:]
    dprl = dp[i][:]
    for j in range(M):
        if j == 0:
            dplr[j] += dp[i - 1][j]
            dprl[M - 1 - j] += dp[i - 1][M - 1 - j]
        else:
            dplr[j] += max(dp[i - 1][j], dplr[j - 1])
            dprl[M - 1 - j] += max(dp[i - 1][M - 1 - j], dprl[M - j])
    for j in range(M):
        dp[i][j] = max(dplr[j], dprl[j])
print(dp[-1][-1])&lt;/code&gt;&lt;/pre&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;b&gt;코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩/백준 (Python)</category>
      <category>Python</category>
      <category>백준</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/295</guid>
      <comments>https://4802852.tistory.com/295#entry295comment</comments>
      <pubDate>Sun, 5 Nov 2023 16:52:13 +0900</pubDate>
    </item>
    <item>
      <title>백준 1937: 욕심쟁이 판다 (Python)</title>
      <link>https://4802852.tistory.com/294</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GFBXr/btsyso8YOkZ/f3Etor7VRbMp8DUVmsEAs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GFBXr/btsyso8YOkZ/f3Etor7VRbMp8DUVmsEAs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GFBXr/btsyso8YOkZ/f3Etor7VRbMp8DUVmsEAs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGFBXr%2Fbtsyso8YOkZ%2Ff3Etor7VRbMp8DUVmsEAs0%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;524&quot; height=&quot;120&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1937&quot;&gt;https://www.acmicpc.net/problem/1937&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697364248316&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1937번: 욕심쟁이 판다&quot; data-og-description=&quot;n &amp;times; n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1937&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1937&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bTSWz5/hyUdZFgpWg/sBnfQwdgXte6tKMmZhHPG0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1937&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1937&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bTSWz5/hyUdZFgpWg/sBnfQwdgXte6tKMmZhHPG0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1937번: 욕심쟁이 판다&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;n &amp;times; n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 단순한 bfs, dfs 문제로 접근했더니 시간 초과로 문제를 해결할 수 없었다. 문제를 해결하기 위해서는 중복 계산을 제거하는 방법을 고안해야 하는데, 중복을 제거하는 방법에는 두 가지 정도로 접근할 수 있었다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;판다는 점점 더 높은 숫자를 향해서만 이동하기 때문에, 대나무의 양이 가장 작은 대나무의 위치부터 계산하여 점점 양이 많은 위치 순서로 탐색한다. 이렇게 탐색할 경우, 나중에 계산하는 위치가 무조건 앞에 계산했던 위치의 대나무 양보다 크기 때문에 해당 위치에서 상하좌우의 dp 값을 비교하여 가장 큰 값 + 1 로 입력하면서 계산해나가면 가장 큰 값을 구함으로써 답을 얻을 수 있다.&lt;/li&gt;
&lt;li&gt;dfs 를 진행하면서 각 위치에서 가장 긴 경로를 메모이제이션 하면서 탐색을 진행하면, 나중에 다시 해당칸에 dfs 탐색 중에 도달하더라도 저장된 값을 리턴함으로써 중복 계산을 피할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제에서는 2번 방안이 더 빠른 문제 해결을 보여주었다.&lt;/p&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;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sys
from collections import defaultdict

input = sys.stdin.readline

dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]

N = int(input())
arr = defaultdict(list)
forest = [[0] * (N + 2) for _ in range(N + 2)]
dp = [[0] * (N + 2) for _ in range(N + 2)]
for i in range(1, N + 1):
    tmp = [0] + list(map(int, input().split()))
    for j in range(1, N + 1):
        forest[i][j] = tmp[j]
        arr[tmp[j]].append((i, j))
        dp[i][j] = 1
maxVal = 1

for tree in sorted(arr.keys()):
    tmp_arr = arr[tree]
    while tmp_arr:
        r, c = tmp_arr.pop()
        for i in range(4):
            if forest[r + dr[i]][c + dc[i]] &amp;lt; forest[r][c]:
                dp[r][c] = max(dp[r + dr[i]][c + dc[i]] + 1, dp[r][c])
                maxVal = max(maxVal, dp[r][c])

print(maxVal)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번 코드&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sys

sys.setrecursionlimit(10**6)
input = sys.stdin.readline

dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]

N = int(input())
forest = [[0] * N for _ in range(N)]
dp = [[0] * N for _ in range(N)]
for i in range(0, N):
    tmp = list(map(int, input().split()))
    for j in range(0, N):
        forest[i][j] = tmp[j]
maxVal = 1


def dfs(r, c):
    global maxVal
    if dp[r][c] == 0:
        dp[r][c] = 1
        for i in range(4):
            nr = r + dr[i]
            nc = c + dc[i]
            if nr &amp;lt; 0 or N &amp;lt;= nr or nc &amp;lt; 0 or N &amp;lt;= nc:
                continue
            if forest[nr][nc] &amp;lt; forest[r][c]:
                dp[r][c] = max(dfs(nr, nc) + 1, dp[r][c])
    maxVal = max(maxVal, dp[r][c])
    return dp[r][c]


for i in range(N):
    for j in range(N):
        dfs(i, j)

print(maxVal)&lt;/code&gt;&lt;/pre&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;b&gt;코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩/백준 (Python)</category>
      <category>Python</category>
      <category>백준</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/294</guid>
      <comments>https://4802852.tistory.com/294#entry294comment</comments>
      <pubDate>Sun, 15 Oct 2023 19:03:01 +0900</pubDate>
    </item>
    <item>
      <title>백준 11048: 이동하기 (Python)</title>
      <link>https://4802852.tistory.com/293</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;beakjoon_logo.png&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beoyQn/btsxp8Tzh92/CG4p0YKunpca3HwvXEkkC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beoyQn/btsxp8Tzh92/CG4p0YKunpca3HwvXEkkC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beoyQn/btsxp8Tzh92/CG4p0YKunpca3HwvXEkkC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeoyQn%2Fbtsxp8Tzh92%2FCG4p0YKunpca3HwvXEkkC1%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;524&quot; height=&quot;120&quot; data-filename=&quot;beakjoon_logo.png&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11048&quot;&gt;https://www.acmicpc.net/problem/11048&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1696851440669&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;11048번: 이동하기&quot; data-og-description=&quot;준규는 N&amp;times;M 크기의 미로에 갇혀있다.&amp;nbsp;미로는 1&amp;times;1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다.&amp;nbsp;미로의 가장 왼쪽 윗 방은&amp;nbsp;(1, 1)이고, 가장 오른쪽 아랫 방은&amp;nbsp;(N, M)이다. 준규는 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11048&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11048&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/boK0C6/hyT9xWtPfR/MMdyilK5WkNvhb6F6NKO1K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11048&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11048&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/boK0C6/hyT9xWtPfR/MMdyilK5WkNvhb6F6NKO1K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;11048번: 이동하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;준규는 N&amp;times;M 크기의 미로에 갇혀있다.&amp;nbsp;미로는 1&amp;times;1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다.&amp;nbsp;미로의 가장 왼쪽 윗 방은&amp;nbsp;(1, 1)이고, 가장 오른쪽 아랫 방은&amp;nbsp;(N, M)이다. 준규는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼핏 dfs나 bfs 문제로 보였지만, 다이나믹 프로그래밍을 이용하여 쉽게 풀 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(r, c) 칸에서 이동할 수 있는 방향은 세방향으로, (r + 1, c), (r, c + 1), (r + 1, c + 1) 이다. 이 점을 반대로 말하면 (r, c) 칸으로 올 수 있는 바로 전 칸은 (r - 1, c), (r, c - 1), (r - 1, c - 1) 이 세 칸이다. 즉 (r, c) 위치에서 최대값을 얻기 위해서는 dp 배열의 (r - 1, c), (r, c - 1), (r - 1, c - 1) 칸 중 가장 큰 값과 (r, c) 칸의 값을 더해야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;N, M = map(int, input().split())
maze = [[0 for _ in range(M + 1)]]
for i in range(N):
    maze.append([0] + list(map(int, input().split())))
dp = [[0] * (M + 1) for _ in range(N + 1)]

for i in range(1, N + 1):
    for j in range(1, M + 1):
        dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + maze[i][j]

print(dp[-1][-1])&lt;/code&gt;&lt;/pre&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;b&gt;코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩/백준 (Python)</category>
      <category>Python</category>
      <category>백준</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/293</guid>
      <comments>https://4802852.tistory.com/293#entry293comment</comments>
      <pubDate>Mon, 9 Oct 2023 20:33:50 +0900</pubDate>
    </item>
    <item>
      <title>백준 10815: 숫자 카드 (Python)</title>
      <link>https://4802852.tistory.com/292</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJm1If/btsafraKxzB/Yu2CPvzEdoGpozAiltMkek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJm1If/btsafraKxzB/Yu2CPvzEdoGpozAiltMkek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJm1If/btsafraKxzB/Yu2CPvzEdoGpozAiltMkek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJm1If%2FbtsafraKxzB%2FYu2CPvzEdoGpozAiltMkek%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;524&quot; height=&quot;120&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10815&quot;&gt;https://www.acmicpc.net/problem/10815&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1681491391465&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;10815번: 숫자 카드&quot; data-og-description=&quot;첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 &amp;le; N &amp;le; 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는&amp;nbsp;-10,000,000보다 크거나 같고, 10,&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10815&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10815&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bSqp9W/hyShMtSeuM/CQ7MWKJpnCQNUqGQYpWZsK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10815&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10815&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bSqp9W/hyShMtSeuM/CQ7MWKJpnCQNUqGQYpWZsK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10815번: 숫자 카드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 &amp;le; N &amp;le; 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는&amp;nbsp;-10,000,000보다 크거나 같고, 10,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 파이썬의 in list 기능을 사용하면 될 것 같지만 이분탐색 알고리즘을 이용하여 문제를 해결하였다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;먼저 주어진 상근이의 숫자 카드들을 오름차순으로 정렬하였다.&lt;/li&gt;
&lt;li&gt;간단하게 탐색의 시작 index와 끝 index를 두고, 중간 지점을 기준으로 찾고자 하는 카드가 더 큰지 작은지를 비교해서 이분탐색을 진행하였다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;N = int(input())
sang = sorted(list(map(int, input().split())))
M = int(input())
check = list(map(int, input().split()))
res = [0] * M


def binarySearch(s, e, t):
    if s == e:
        return False
    mid = (s + e) // 2
    if sang[mid] == t:
        return True
    elif t &amp;lt; sang[mid]:
        return binarySearch(s, mid, t)
    else:
        return binarySearch(mid + 1, e, t)


for i in range(M):
    if binarySearch(0, N, check[i]):
        res[i] = 1
    else:
        res[i] = 0

print(*res)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;더 생각해 볼 것?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니나 다를까 그냥 in 으로 탐색했더니 훨씬 빠른 속도로 결과를 얻을 수 있었다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩/백준 (Python)</category>
      <category>Python</category>
      <category>백준</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/292</guid>
      <comments>https://4802852.tistory.com/292#entry292comment</comments>
      <pubDate>Sat, 15 Apr 2023 01:56:41 +0900</pubDate>
    </item>
    <item>
      <title>백준 2193: 이친수 (Python)</title>
      <link>https://4802852.tistory.com/291</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sQugg/btsajegMI5m/wT1GdRo0f4L3TxlIVLKS11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sQugg/btsajegMI5m/wT1GdRo0f4L3TxlIVLKS11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sQugg/btsajegMI5m/wT1GdRo0f4L3TxlIVLKS11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsQugg%2FbtsajegMI5m%2FwT1GdRo0f4L3TxlIVLKS11%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;524&quot; height=&quot;120&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2193&quot;&gt;https://www.acmicpc.net/problem/2193&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1681484482723&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2193번: 이친수&quot; data-og-description=&quot;0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2193&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2193&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cFKX4E/hySgi85uRI/AM1z1skNJ2zLoT4hre9UZk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2193&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2193&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cFKX4E/hySgi85uRI/AM1z1skNJ2zLoT4hre9UZk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2193번: 이친수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이친수란 0과 1로만 이루어진 숫자 중 문제에서 주어진 조건들을 만족하는 수이다. N자리 이친수의 개수를 구하기 위해서는 1~N 까지 i자리 이친수의 개수를 구하는 부분 문제들을 풀어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이친수를 0으로 끝나는 수와 1로 끝나는 수 두가지로 구분하여 개수를 갱신한다.&lt;br /&gt;0으로 끝나는 i자리 이친수의 경우, i - 1자리 이친수에 아무 조건 없이 0을 추가로 붙여 i자리 이친수를 만들 수 있다.&lt;br /&gt;1로 끝나는 i자리 이친수의 경우, i - 1자리 이친수 중 0으로 끝나는 이친수에만 추가로 1을 붙여 i자리 이친수를 만들 수 있다.&lt;br /&gt;(i - 1자리 이친수 중 1로 끝나는 이친수에 1을 추가로 붙이면 연속해서 1이 나오게 되어 2번 조건에 위배된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 조건에 유의하여 갱신하고, 마지막에 0으로 끝나는 N자리 이친수, 1로 끝나는 N자리 이친수를 합하면 답을 구할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;N = int(input())
DP = [[0 for _ in range(2)] for __ in range(N + 1)]
DP[1][0] = 0
DP[1][1] = 1
for i in range(2, N + 1):
    DP[i][0] = DP[i - 1][0] + DP[i - 1][1]
    DP[i][1] = DP[i - 1][0]
print(DP[N][0] + DP[N][1])&lt;/code&gt;&lt;/pre&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;b&gt;코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩/백준 (Python)</category>
      <category>Python</category>
      <category>백준</category>
      <author>파랑ㅇ</author>
      <guid isPermaLink="true">https://4802852.tistory.com/291</guid>
      <comments>https://4802852.tistory.com/291#entry291comment</comments>
      <pubDate>Sat, 15 Apr 2023 00:01:30 +0900</pubDate>
    </item>
  </channel>
</rss>