<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>snoopybox</title>
    <link>https://snpbox.tistory.com/</link>
    <description>컴퓨터, 윈도우, 리눅스, 프로그래밍, 알고리즘, 파이썬, 프로그램, 동영상</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 12:46:35 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>snoopybox</managingEditor>
    <image>
      <title>snoopybox</title>
      <url>https://t1.daumcdn.net/cfile/tistory/1962E94A5073568F15</url>
      <link>https://snpbox.tistory.com</link>
    </image>
    <item>
      <title>2024 후기 성대경시 초등 4학년 30번 문제</title>
      <link>https://snpbox.tistory.com/2073</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dei17M/btsJWV17PDH/1PUs77Jm9itkSzS5cn9EsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dei17M/btsJWV17PDH/1PUs77Jm9itkSzS5cn9EsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dei17M/btsJWV17PDH/1PUs77Jm9itkSzS5cn9EsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdei17M%2FbtsJWV17PDH%2F1PUs77Jm9itkSzS5cn9EsK%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;719&quot; height=&quot;159&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;159&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;초등학교 4학년이 어떻게 이 문제를 연필로 풀 수 있을지 모르겠네요. 저도 연필로 해결할 자신은 없어서... 대신 Python 코드로 풀어보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'가'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'가'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'나'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'나'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'다'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'다'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'라'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'라'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; [[], [], [], []]&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ans&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;' '&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;sorted&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;])&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ans&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ans&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'X'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ori&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ori&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'X'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ori&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;pop&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ans&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/기타</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2073</guid>
      <comments>https://snpbox.tistory.com/2073#entry2073comment</comments>
      <pubDate>Tue, 8 Oct 2024 01:15:56 +0900</pubDate>
    </item>
    <item>
      <title>Hyper-V Nested Virtualization Enable</title>
      <link>https://snpbox.tistory.com/2072</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mxTVw/btrnu8PCg4K/C5TNXrVcCT4LMTCmIV3HW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mxTVw/btrnu8PCg4K/C5TNXrVcCT4LMTCmIV3HW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mxTVw/btrnu8PCg4K/C5TNXrVcCT4LMTCmIV3HW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmxTVw%2Fbtrnu8PCg4K%2FC5TNXrVcCT4LMTCmIV3HW0%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;1152&quot; height=&quot;864&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집 PC에서 Proxmox VE 설치해서 테스트 해보려고 Hyper-V로 VM 생성해서 설치를 시도했는데, KVM 가상화 지원하지 않는다는 문구가 떴다. 그래서 해당 VM에 Hyper-V 설정으로 Nested Virtualization을 활성화 해서 해결하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;Set-VMProcessor&amp;nbsp;-VMName&amp;nbsp;&amp;lt;VMName&amp;gt;&amp;nbsp;-ExposeVirtualizationExtensions&amp;nbsp;$true&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UO0H9/btrnuWaORbc/aioaWpwvQOJLfervtlZ3NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UO0H9/btrnuWaORbc/aioaWpwvQOJLfervtlZ3NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UO0H9/btrnuWaORbc/aioaWpwvQOJLfervtlZ3NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUO0H9%2FbtrnuWaORbc%2FaioaWpwvQOJLfervtlZ3NK%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;740&quot; height=&quot;407&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 변경 후 KVM 경고 없이 잘 넘어갔다.&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;1152&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbdWYT/btrnuWhyBRl/EwADNo7Sv4Se5Vf6DoLSX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbdWYT/btrnuWhyBRl/EwADNo7Sv4Se5Vf6DoLSX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbdWYT/btrnuWhyBRl/EwADNo7Sv4Se5Vf6DoLSX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbdWYT%2FbtrnuWhyBRl%2FEwADNo7Sv4Se5Vf6DoLSX1%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;1152&quot; height=&quot;864&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;864&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;&lt;a href=&quot;https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/nested-virtualization&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/nested-virtualization&lt;/a&gt;&lt;/p&gt;</description>
      <category>가상화 &amp;amp; 클라우드</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2072</guid>
      <comments>https://snpbox.tistory.com/2072#entry2072comment</comments>
      <pubDate>Fri, 10 Dec 2021 00:45:51 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 10 빠른 시작 끄기</title>
      <link>https://snpbox.tistory.com/2071</link>
      <description>&lt;p&gt;윈도우 10에서 분명 시스템 종료를 눌렀는데도, 마치 최대 절전 모드처럼 종료되지 않는 경우&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;현재 내 PC가 그런 상황이다. 컴퓨터 작동 시간을 보면 일주일 전에 켜서 지금까지 작동하고 있는 것처럼 보인다. 분명 방금 컴퓨터를 켰는데도 말이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7SXoI/btq0PcNAtjL/EFxyoQVK0gFydlAWcNacGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7SXoI/btq0PcNAtjL/EFxyoQVK0gFydlAWcNacGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7SXoI/btq0PcNAtjL/EFxyoQVK0gFydlAWcNacGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7SXoI%2Fbtq0PcNAtjL%2FEFxyoQVK0gFydlAWcNacGk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해결 방법은 빠른 시작 기능을 끄면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;제어판 -&amp;gt; 시스템 및 보안 -&amp;gt; 전원 옵션 으로 들어간 다음&lt;/p&gt;
&lt;p&gt;왼쪽의 &lt;u&gt;&lt;b&gt;전원 단추 작동 설정&lt;/b&gt;&lt;/u&gt; 버튼을 누른다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap1.png&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UF9X5/btq0VpScWKH/KLbchFObqE4GkNN4CQuImk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UF9X5/btq0VpScWKH/KLbchFObqE4GkNN4CQuImk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UF9X5/btq0VpScWKH/KLbchFObqE4GkNN4CQuImk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUF9X5%2Fbtq0VpScWKH%2FKLbchFObqE4GkNN4CQuImk%2Fimg.png&quot; data-filename=&quot;Snap1.png&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하단 종료 설정 부분에 빠른 시작 켜기 부분이 체크되어 있는데, 잠겨있어서 수정할 수 없다.&lt;/p&gt;
&lt;p&gt;우선 &lt;u&gt;&lt;b&gt;현재 사용할 수 없는 설정 변경&lt;/b&gt;&lt;/u&gt; 버튼을 누른다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap6.png&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0yPYO/btq0SGf4X7Y/VBwLxpW8w5vIgOonGfe0F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0yPYO/btq0SGf4X7Y/VBwLxpW8w5vIgOonGfe0F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0yPYO/btq0SGf4X7Y/VBwLxpW8w5vIgOonGfe0F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0yPYO%2Fbtq0SGf4X7Y%2FVBwLxpW8w5vIgOonGfe0F1%2Fimg.png&quot; data-filename=&quot;Snap6.png&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런 후 아래와 같이 설정을 풀어주면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap7.png&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oExS4/btq0OkE7ktP/L5abAcFHkdeUPu9ON2XtkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oExS4/btq0OkE7ktP/L5abAcFHkdeUPu9ON2XtkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oExS4/btq0OkE7ktP/L5abAcFHkdeUPu9ON2XtkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoExS4%2Fbtq0OkE7ktP%2FL5abAcFHkdeUPu9ON2XtkK%2Fimg.png&quot; data-filename=&quot;Snap7.png&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;583&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 설정을 일일이 마우스 클릭해서 찾아가기 힘들다면 아래 레지스트리 수정을 통해 해결할 수도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;REG ADD &quot;HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power&quot; /V HiberbootEnabled /T REG_DWORD /D 0 /F&lt;/p&gt;</description>
      <category>Windows 10</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2071</guid>
      <comments>https://snpbox.tistory.com/2071#entry2071comment</comments>
      <pubDate>Wed, 24 Mar 2021 00:16:55 +0900</pubDate>
    </item>
    <item>
      <title>DNS TXT Record spf1 include ip4 추출</title>
      <link>https://snpbox.tistory.com/2070</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 GCP Compute Engine IP 주소 범위 알아내려고 bash 스크립트 짰던 게 있는데 PowerShell 버전으로 다시 표현해 보았다. 사실 GCP의 경우 지금은 아래 API를 제공하고 있어서 불필요하긴 한데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.gstatic.com/ipranges/goog.json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.gstatic.com/ipranges/goog.json&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;내가 작성한 PowerShell&lt;span&gt; 함수는 아래와 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;get_include_record&lt;/span&gt;&lt;span&gt;&amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span&gt;$domain&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$txt&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span&gt;Resolve-DnsName&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;-Name&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$domain&lt;/span&gt;&lt;span&gt;&amp;nbsp;txt).Strings&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span&gt;$line&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span&gt;$txt&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;-split&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;\s+&quot;&lt;/span&gt;&lt;span&gt;))&amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span&gt;$line&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;-match&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;include:&quot;&lt;/span&gt;&lt;span&gt;)&amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&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;&lt;/span&gt;&lt;span&gt;get_include_record&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;-domain&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span&gt;$line&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;-split&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;:&quot;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span&gt;elseif&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span&gt;$line&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;-match&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;ip4:&quot;&lt;/span&gt;&lt;span&gt;)&amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&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;(&lt;/span&gt;&lt;span&gt;$line&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;-split&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&quot;:&quot;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GCP의 경우 &lt;span&gt;_cloud-netblocks.googleusercontent.com 도메인을 질의하면 된다.&lt;/span&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-origin-width=&quot;805&quot; data-origin-height=&quot;747&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbIX1B/btq0y0mRiAP/QcR1oMplUDsS0zIOQcC0vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbIX1B/btq0y0mRiAP/QcR1oMplUDsS0zIOQcC0vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbIX1B/btq0y0mRiAP/QcR1oMplUDsS0zIOQcC0vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbIX1B%2Fbtq0y0mRiAP%2FQcR1oMplUDsS0zIOQcC0vK%2Fimg.png&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;747&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 DNS TXT의 SPF (Sender Policy Framework) 레코드는 발송하는 메일서버가 &lt;span style=&quot;color: #333333;&quot;&gt;스팸으로 걸러지지 않기 위해&lt;span&gt; &lt;/span&gt;&lt;/span&gt;IP를 DNS에 등록하는 용도이다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;664&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mijnz/btq0BDjaHnI/YMOWIRVrOyunE4NvrVmwek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mijnz/btq0BDjaHnI/YMOWIRVrOyunE4NvrVmwek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mijnz/btq0BDjaHnI/YMOWIRVrOyunE4NvrVmwek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMijnz%2Fbtq0BDjaHnI%2FYMOWIRVrOyunE4NvrVmwek%2Fimg.png&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;664&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 DNS TXT 레코드가 한 줄에 255 자라는 제한이 있기 때문에 발송하는 메일서버가 많으면 SPF는 include 방식으로 처리하는데, KISA RBL은 &lt;span&gt;include를 지원하지 않는다. &lt;/span&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;span&gt;PowerShell 몇 줄로도 처리 가능한 간단한 recursion인데 KISA에서 왜 지원하지 않는지 모르겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://spam.kisa.or.kr/white/sub3.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;spam.kisa.or.kr/white/sub3.do&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1616201961165&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SPF 작성도우미  &amp;lt; White Domain / SPF : 불법스팸대응센터&quot; data-og-description=&quot;SPF 작성 도우미 SPF Record를 손쉽고 간편하게 작성할 수 있도록 도와드립니다 . 이 곳에서는 SPF Record를 작성하는 것만 지원해 드릴 뿐, 실제로 귀사(하)의 DNS 에 SPF Record가 출판되는 것은 아닙니다.&quot; data-og-host=&quot;spam.kisa.or.kr&quot; data-og-source-url=&quot;https://spam.kisa.or.kr/white/sub3.do&quot; data-og-url=&quot;https://spam.kisa.or.kr/white/sub3.do&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://spam.kisa.or.kr/white/sub3.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://spam.kisa.or.kr/white/sub3.do&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;SPF 작성도우미 &amp;lt; White Domain / SPF : 불법스팸대응센터&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SPF 작성 도우미 SPF Record를 손쉽고 간편하게 작성할 수 있도록 도와드립니다 . 이 곳에서는 SPF Record를 작성하는 것만 지원해 드릴 뿐, 실제로 귀사(하)의 DNS 에 SPF Record가 출판되는 것은 아닙니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;spam.kisa.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 리눅스 Bash 버전도 올려둔다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;dfs(){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dig&amp;nbsp;+short&amp;nbsp;$1&amp;nbsp;txt&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-oP&amp;nbsp;'(include|ip4):\S+'&amp;nbsp;|&amp;nbsp;while&amp;nbsp;read&amp;nbsp;line;&amp;nbsp;do &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;[&amp;nbsp;&quot;${line:0:3}&quot;&amp;nbsp;==&amp;nbsp;&quot;ip4&quot;&amp;nbsp;];&amp;nbsp;then &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;echo&amp;nbsp;${line:4} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &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;dfs&amp;nbsp;${line:8} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;done &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dfs&amp;nbsp;$1&amp;nbsp;|&amp;nbsp;sort&amp;nbsp;-V&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;</description>
      <category>PowerShell</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2070</guid>
      <comments>https://snpbox.tistory.com/2070#entry2070comment</comments>
      <pubDate>Sat, 20 Mar 2021 10:14:02 +0900</pubDate>
    </item>
    <item>
      <title>Install-PackageProvider : 'NuGet' 공급자에 대해 지정된 검색 조건에 일치하는 항목을 찾을 수 없습니다.</title>
      <link>https://snpbox.tistory.com/2069</link>
      <description>&lt;p&gt;윈도우 서버 2016을 (좀 오래되었지만) ISO/DVD로 처음 설치한 상태에서 NuGet 패키지 관리자를 설치하려면 오류가 발생하는데, 결론부터 말하자면 TLS 1.2 이상으로 연결을 해줘야 하기 때문이다.&lt;br /&gt;&lt;br /&gt;이 문제를 겪게 된 상황은 아래와 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 윈도우 서버 2016을 설치했고, 윈도우 업데이트 관리를 위해 PSWindowsUpdate 모듈을 설치하려 하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;Install-Module&amp;nbsp;-Name&amp;nbsp;PSWindowsUpdate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;그랬더니 아래와 같이 빨간 글씨의 에러가 발생하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRfsSW/btq0ulwwJtB/1499VOAeaLLzfhNDSKWIt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRfsSW/btq0ulwwJtB/1499VOAeaLLzfhNDSKWIt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRfsSW/btq0ulwwJtB/1499VOAeaLLzfhNDSKWIt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRfsSW%2Fbtq0ulwwJtB%2F1499VOAeaLLzfhNDSKWIt1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;일단 에러가 발생하는 사유는 NuGet 패키지 관리자가 없기 때문이었다. 따라서 NuGet을 먼저 설치하려 해 보았다. (사실 위 화면에 이미 자동 시도되어 있다)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;Install-PackageProvider&amp;nbsp;-Name&amp;nbsp;NuGet&amp;nbsp;-Force&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;위 화면과 동일하게 빨간색 에러가 뜬다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM7KS7/btq0td6QoWl/BUEwlTpgXM09Um0vKhmYzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM7KS7/btq0td6QoWl/BUEwlTpgXM09Um0vKhmYzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM7KS7/btq0td6QoWl/BUEwlTpgXM09Um0vKhmYzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM7KS7%2Fbtq0td6QoWl%2FBUEwlTpgXM09Um0vKhmYzk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;언뜻 보면 인터넷 연결이 안되어 있는 것으로 보이지만, 인터넷 연결은 잘 되어 있다. 이게 바로 TLS 1.2 이상 사용을 안 해서 발생하는 오류인데, 문구만 봐서는 확인이 힘들다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;TLS 1.2 이상을 기본 사용하게 하는 방법은 아래와 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;Set-ItemProperty&amp;nbsp;-Path&amp;nbsp;&quot;HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727&quot;&amp;nbsp;-Name&amp;nbsp;SystemDefaultTlsVersions&amp;nbsp;-Type&amp;nbsp;Dword&amp;nbsp;-Value&amp;nbsp;1&amp;nbsp;-Force &lt;br /&gt;Set-ItemProperty&amp;nbsp;-Path&amp;nbsp;&quot;HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727&quot;&amp;nbsp;-Name&amp;nbsp;SchUseStrongCrypto&amp;nbsp;-Type&amp;nbsp;Dword&amp;nbsp;-Value&amp;nbsp;1&amp;nbsp;-Force &lt;br /&gt;Set-ItemProperty&amp;nbsp;-Path&amp;nbsp;&quot;HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319&quot;&amp;nbsp;-Name&amp;nbsp;SystemDefaultTlsVersions&amp;nbsp;-Type&amp;nbsp;Dword&amp;nbsp;-Value&amp;nbsp;1&amp;nbsp;-Force &lt;br /&gt;Set-ItemProperty&amp;nbsp;-Path&amp;nbsp;&quot;HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319&quot;&amp;nbsp;-Name&amp;nbsp;SchUseStrongCrypto&amp;nbsp;-Type&amp;nbsp;Dword&amp;nbsp;-Value&amp;nbsp;1&amp;nbsp;-Force&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/mem/configmgr/core/plan-design/security/enable-tls-1-2-client&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docs.microsoft.com/ko-kr/mem/configmgr/core/plan-design/security/enable-tls-1-2-client&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1616081759271&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;클라이언트에서의 TLS(전송 계층 보안) 1.2 사용 설정 방법 - Configuration Manager&quot; data-og-description=&quot;Configuration Manager 클라이언트에 대해 TLS 1.2를 사용하도록 설정하는 방법에 대한 정보입니다.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/mem/configmgr/core/plan-design/security/enable-tls-1-2-client&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/mem/configmgr/core/plan-design/security/enable-tls-1-2-client&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d8U6sj/hyJBj2guGN/XIdM4HecU14fwfiuPyjky1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/Kepc2/hyJBg5yQzS/nOg0Faep2ON1yrh3EDKq00/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/mem/configmgr/core/plan-design/security/enable-tls-1-2-client&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/mem/configmgr/core/plan-design/security/enable-tls-1-2-client&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d8U6sj/hyJBj2guGN/XIdM4HecU14fwfiuPyjky1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/Kepc2/hyJBg5yQzS/nOg0Faep2ON1yrh3EDKq00/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;클라이언트에서의 TLS(전송 계층 보안) 1.2 사용 설정 방법 - Configuration Manager&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Configuration Manager 클라이언트에 대해 TLS 1.2를 사용하도록 설정하는 방법에 대한 정보입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;이렇게 레지스트리를 설정하고 나면 NuGet 패키지 관리자가 잘 설치된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D8bDC/btq0tXvXrdy/ZVRl8qrD10PwwExhkOzcfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D8bDC/btq0tXvXrdy/ZVRl8qrD10PwwExhkOzcfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D8bDC/btq0tXvXrdy/ZVRl8qrD10PwwExhkOzcfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD8bDC%2Fbtq0tXvXrdy%2FZVRl8qrD10PwwExhkOzcfk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;물론 따라서 &lt;span style=&quot;color: #333333;&quot;&gt;PSWindowsUpdate&lt;span&gt; 모듈도 잘 설치되었다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buzpAN/btq0um95X6N/cprcnuukbF9PGv3eWkacY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buzpAN/btq0um95X6N/cprcnuukbF9PGv3eWkacY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buzpAN/btq0um95X6N/cprcnuukbF9PGv3eWkacY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuzpAN%2Fbtq0um95X6N%2FcprcnuukbF9PGv3eWkacY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고로 레지스트리로 .NET 설정을 변경하지 않고 일회성으로 파워쉘 세션에만 적용하려면 아래와 같이 처리하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;[Net.ServicePointManager]::SecurityProtocol&amp;nbsp;=&amp;nbsp;[Net.SecurityProtocolType]::Tls12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2O38D/btq0tekp817/ZVp6ud5x1bIepYWxYPZHJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2O38D/btq0tekp817/ZVp6ud5x1bIepYWxYPZHJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2O38D/btq0tekp817/ZVp6ud5x1bIepYWxYPZHJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2O38D%2Fbtq0tekp817%2FZVp6ud5x1bIepYWxYPZHJ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>PowerShell</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2069</guid>
      <comments>https://snpbox.tistory.com/2069#entry2069comment</comments>
      <pubDate>Fri, 19 Mar 2021 00:55:19 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 10 VHD Native Boot</title>
      <link>https://snpbox.tistory.com/2068</link>
      <description>&lt;p&gt;윈도우 10이라고 윈도우 7 VHD Native Boot 대비 설정상 다르게 해줘야 할 부분은 없어 보이는데, MBR이 아닌 UEFI 기준으로 파티션 생성하는 내용을 포함해서 한번 정리해보고자 한다.&lt;br /&gt;&lt;br /&gt;이 글의 내용은 윈도우 10 OS의 Hyper-V VM에서 테스트 진행되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 윈도우 10 ISO, DVD 또는 USB 등을 이용해 설치 화면으로 진입한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0qkeH/btq0pwECBdY/L7V3iXJuGAyP1Bnk9Zmc6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0qkeH/btq0pwECBdY/L7V3iXJuGAyP1Bnk9Zmc6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0qkeH/btq0pwECBdY/L7V3iXJuGAyP1Bnk9Zmc6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0qkeH%2Fbtq0pwECBdY%2FL7V3iXJuGAyP1Bnk9Zmc6K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 Shift + F10 누르면 cmd.exe 창이 뜬다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDQP5J/btq0mywFydG/de0VZhUU5tf9Fhh8OYMuM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDQP5J/btq0mywFydG/de0VZhUU5tf9Fhh8OYMuM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDQP5J/btq0mywFydG/de0VZhUU5tf9Fhh8OYMuM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDQP5J%2Fbtq0mywFydG%2Fde0VZhUU5tf9Fhh8OYMuM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서부터 diskpart로 disk 초기화, GPT 변환, EFI 파티션 생성, VHDX 생성 등의 작업을 진행할 것이다.&lt;/p&gt;
&lt;p&gt;아래는 Disk를 완전히 초기화시키고 작업을 진행하는 예제이기 때문에, 실제 환경에서는 &lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;절대로 그대로 따라 하지 않기를&lt;/b&gt;&lt;/span&gt;&lt;/u&gt; 바란다. 이미 EFI 부팅용으로 구성된 Disk라면 굳이 초기화, 변환 등의 작업을 할 필요 없이 VHDX 파일 생성부터 진행하면 된다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;diskpart&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;##&amp;nbsp;어떤&amp;nbsp;Disk가&amp;nbsp;있는지&amp;nbsp;확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;&amp;nbsp;disk&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;## Disk 초기화, GPT로 변환, EFI 파티션 생성할 Disk 선택&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;select&lt;/span&gt;&lt;span&gt;&amp;nbsp;disk&amp;nbsp;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;## Disk 초기화&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;clean&lt;/span&gt;&lt;span&gt;&amp;nbsp;disk&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;##&amp;nbsp;GPT로&amp;nbsp;변환&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;convert&lt;/span&gt;&lt;span&gt;&amp;nbsp;gpt&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;##&amp;nbsp;EFI&amp;nbsp;부팅용&amp;nbsp;System&amp;nbsp;파티션&amp;nbsp;100MB&amp;nbsp;생성,&amp;nbsp;FAT32로&amp;nbsp;포맷&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;&amp;nbsp;partition&amp;nbsp;efi&amp;nbsp;&lt;/span&gt;&lt;span&gt;size=&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;&amp;nbsp;quick&amp;nbsp;&lt;/span&gt;&lt;span&gt;fs=fat32&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;## 나머지 남은 공간은 통 파티션으로 생성하는 예제&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;&amp;nbsp;partition&amp;nbsp;primary&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;&amp;nbsp;quick&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;assign&lt;/span&gt;&lt;span&gt;&amp;nbsp;letter&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;##&amp;nbsp;윈도우&amp;nbsp;10을&amp;nbsp;설치할&amp;nbsp;VHDX&amp;nbsp;파일을&amp;nbsp;생성한다.&amp;nbsp;반드시&amp;nbsp;GPT로&amp;nbsp;변환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;##&amp;nbsp;예제에서는&amp;nbsp;동적&amp;nbsp;확장&amp;nbsp;Disk로&amp;nbsp;64GB&amp;nbsp;사이즈&amp;nbsp;생성함&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;&amp;nbsp;vdisk&amp;nbsp;file=C:\win10.vhdx&amp;nbsp;&lt;/span&gt;&lt;span&gt;type=expandable&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;maximum=&lt;/span&gt;&lt;span&gt;65536&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;attach&lt;/span&gt;&lt;span&gt;&amp;nbsp;vdisk&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;convert&lt;/span&gt;&lt;span&gt;&amp;nbsp;gpt&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;&amp;nbsp;partiton&amp;nbsp;primary&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;&amp;nbsp;quick&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap1.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6BREY/btq0iWkJnkc/LsLjkSfafW6HKNv3fKKKj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6BREY/btq0iWkJnkc/LsLjkSfafW6HKNv3fKKKj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6BREY/btq0iWkJnkc/LsLjkSfafW6HKNv3fKKKj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6BREY%2Fbtq0iWkJnkc%2FLsLjkSfafW6HKNv3fKKKj0%2Fimg.png&quot; data-filename=&quot;Snap1.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap2.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;427&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tyfgv/btq0iBHTjFM/ObVKaoP0u9IP9KcPdpLAOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tyfgv/btq0iBHTjFM/ObVKaoP0u9IP9KcPdpLAOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tyfgv/btq0iBHTjFM/ObVKaoP0u9IP9KcPdpLAOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTyfgv%2Fbtq0iBHTjFM%2FObVKaoP0u9IP9KcPdpLAOk%2Fimg.png&quot; data-filename=&quot;Snap2.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;427&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap3.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kufmi/btq0iXKFpbn/bTM5Tv8ErmkyeqKIwkz7d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kufmi/btq0iXKFpbn/bTM5Tv8ErmkyeqKIwkz7d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kufmi/btq0iXKFpbn/bTM5Tv8ErmkyeqKIwkz7d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKufmi%2Fbtq0iXKFpbn%2FbTM5Tv8ErmkyeqKIwkz7d0%2Fimg.png&quot; data-filename=&quot;Snap3.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기까지 진행해놓고 설치 화면에서 다음, 다음 넘어가다 보면 방금 붙인 VHDX Disk 64GB가 보인다. 여기에 윈도우 10을 설치하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap4.png&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1EXdN/btq0jNupfNy/qaQ31RE8XoybfYLjN01jk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1EXdN/btq0jNupfNy/qaQ31RE8XoybfYLjN01jk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1EXdN/btq0jNupfNy/qaQ31RE8XoybfYLjN01jk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1EXdN%2Fbtq0jNupfNy%2FqaQ31RE8XoybfYLjN01jk1%2Fimg.png&quot; data-filename=&quot;Snap4.png&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래는 윈도우 10 설치 완료 후 디스크 관리자와 탐색기에서 확인한 모습이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Snap5.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;680&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bppGB4/btq0kDE2VmX/kABM4FPhFJAhKEXLLopcu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bppGB4/btq0kDE2VmX/kABM4FPhFJAhKEXLLopcu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bppGB4/btq0kDE2VmX/kABM4FPhFJAhKEXLLopcu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbppGB4%2Fbtq0kDE2VmX%2FkABM4FPhFJAhKEXLLopcu0%2Fimg.png&quot; data-filename=&quot;Snap5.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;680&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;※ 기타 참고할만한 글&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1615998554440&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;UEFI/GPT-based hard drive partitions&quot; data-og-description=&quot;UEFI/GPT-based hard drive partitions In this article --&amp;gt; Create custom partition layouts for your hard disk drives (HDDs), solid-state drives (SSDs), and other drives when deploying Windows to Unified Extensible Firmware Interface (UEFI)&amp;ndash;based devices. N&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions&quot; data-og-url=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWDQZg/hyJz6vT7gO/MrkCoMVtk3OKkIUvaTufnk/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWDQZg/hyJz6vT7gO/MrkCoMVtk3OKkIUvaTufnk/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;UEFI/GPT-based hard drive partitions&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;UEFI/GPT-based hard drive partitions In this article --&amp;gt; Create custom partition layouts for your hard disk drives (HDDs), solid-state drives (SSDs), and other drives when deploying Windows to Unified Extensible Firmware Interface (UEFI)&amp;ndash;based devices. N&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/boot-to-vhd--native-boot--add-a-virtual-hard-disk-to-the-boot-menu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/boot-to-vhd--native-boot--add-a-virtual-hard-disk-to-the-boot-menu&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1615998561713&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Boot to a virtual hard disk: Add a VHDX or VHD to the boot menu&quot; data-og-description=&quot;In this article --&amp;gt; Native Boot allows you to create a virtual hard disk (VHDX), install Windows to it, and then boot it up, either on your PC side-by-side with your existing installation, or on a new device. A native-boot VHDX can be used as the running o&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/boot-to-vhd--native-boot--add-a-virtual-hard-disk-to-the-boot-menu&quot; data-og-url=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/boot-to-vhd--native-boot--add-a-virtual-hard-disk-to-the-boot-menu&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/boot-to-vhd--native-boot--add-a-virtual-hard-disk-to-the-boot-menu&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/boot-to-vhd--native-boot--add-a-virtual-hard-disk-to-the-boot-menu&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Boot to a virtual hard disk: Add a VHDX or VHD to the boot menu&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;In this article --&amp;gt; Native Boot allows you to create a virtual hard disk (VHDX), install Windows to it, and then boot it up, either on your PC side-by-side with your existing installation, or on a new device. A native-boot VHDX can be used as the running o&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Windows 10</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2068</guid>
      <comments>https://snpbox.tistory.com/2068#entry2068comment</comments>
      <pubDate>Thu, 18 Mar 2021 01:27:31 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 10 UEFI 컴퓨터 설치용 USB 만들기</title>
      <link>https://snpbox.tistory.com/2067</link>
      <description>&lt;p&gt;오늘 10년 만에 새로운 컴퓨터를 조립했는데, UEFI 모드에서 부팅할 수 있는 USB를 미리 만들어 놓지 않아서 윈도우 10 설치 시 고생을 좀 했다. 그래서 간단히 내용을 정리해둔다.&lt;br /&gt;&lt;br /&gt;UEFI 모드에서 USB로 부팅을 하려면 둘중 하나 이상을 만족해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;FAT32 파티션으로 포맷하거나&lt;/li&gt;
&lt;li&gt;GPT 디스크로 변환하거나&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런데 FAT32는 단일 파일 사이즈 4GB라는 제한이 있다. 현재 윈도우 10 20H2 ISO 파일에 들어있는 Install.wim 파일의 크기는 4GB를 넘기 때문에 FAT32에 담을 수 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5li7D/btqZ2bAOKvz/EpLPWSyxoTlRXewocF5jk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5li7D/btqZ2bAOKvz/EpLPWSyxoTlRXewocF5jk0/img.png&quot; data-alt=&quot;크기가 4GB를 넘는다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5li7D/btqZ2bAOKvz/EpLPWSyxoTlRXewocF5jk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5li7D%2FbtqZ2bAOKvz%2FEpLPWSyxoTlRXewocF5jk0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;크기가 4GB를 넘는다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 GPT 디스크로 변환하고 NTFS로 포맷하는 것을 추천한다.&lt;/p&gt;
&lt;p&gt;아래는 Diskpart로 16GB USB 스틱을 초기화, GPT로 변환, NTFS로 포맷하는 과정이다.&lt;br /&gt;USB를 초기화 하고 포맷하기 때문에 안에 들어있는 파일은 삭제되니, 중요한 파일은 미리 다른 곳에 백업해두고 작업을 진행하기 바란다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZtRDq/btqZZyRw7Uc/GCLedZQ0Sd38UtFUR1kdL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZtRDq/btqZZyRw7Uc/GCLedZQ0Sd38UtFUR1kdL1/img.png&quot; data-alt=&quot;diskpart는 netsh처럼 줄인 명령어를 많이 허용해준다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZtRDq/btqZZyRw7Uc/GCLedZQ0Sd38UtFUR1kdL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZtRDq%2FbtqZZyRw7Uc%2FGCLedZQ0Sd38UtFUR1kdL1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;diskpart는 netsh처럼 줄인 명령어를 많이 허용해준다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래는 예제 커맨드이다. (마지막 assign 안 해도 자동으로 드라이브 문자 할당되는 경우 있음)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;diskpart &lt;br /&gt;list&amp;nbsp;disk &lt;br /&gt;select&amp;nbsp;disk&amp;nbsp;번호 &lt;br /&gt;clean &lt;br /&gt;convert&amp;nbsp;gpt &lt;br /&gt;create&amp;nbsp;partition&amp;nbsp;primary &lt;br /&gt;format&amp;nbsp;quick&amp;nbsp;fs=ntfs &lt;br /&gt;assign&amp;nbsp;letter=U&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 GPT 디스크로 만들고 NTFS로 포맷한 다음에 윈도우 10 ISO 파일 내용물을 USB에 전부 복사하면 끝이다. 물론 불필요한 파일이 포함되어 있지만 굳이 제외하려 노력할 이유가 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u5WUv/btqZYk66953/uydrInFbRu1qWp2sNgC7H1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u5WUv/btqZYk66953/uydrInFbRu1qWp2sNgC7H1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u5WUv/btqZYk66953/uydrInFbRu1qWp2sNgC7H1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu5WUv%2FbtqZYk66953%2FuydrInFbRu1qWp2sNgC7H1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwwFA/btqZYmjxBIC/duzkPCaVIVZXwsnNHBV6Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwwFA/btqZYmjxBIC/duzkPCaVIVZXwsnNHBV6Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwwFA/btqZYmjxBIC/duzkPCaVIVZXwsnNHBV6Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwwFA%2FbtqZYmjxBIC%2FduzkPCaVIVZXwsnNHBV6Ik%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;윈도우 10 ISO 파일을 다운로드하려면 아래 글을 참조하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snoopybox.co.kr/1775&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2018.06.03 - [Windows 10] - 윈도우 10 ISO 파일 다운로드 방법&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 GPT로 만든 USB 디스크로는 UEFI 부팅이 잘 되어서 정상적으로 윈도우 10을 잘 설치할 수 있었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고로 위 테스트는 윈도우 10 20H2 버전과 ASRock B460M PRO4 메인보드 환경에서 진행되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20210313_023627236.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beE4gD/btqZ0sDfVI4/QYlrwnrCdTwQMwzvKl4RU1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beE4gD/btqZ0sDfVI4/QYlrwnrCdTwQMwzvKl4RU1/img.jpg&quot; data-alt=&quot;조립 전 촬영&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beE4gD/btqZ0sDfVI4/QYlrwnrCdTwQMwzvKl4RU1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeE4gD%2FbtqZ0sDfVI4%2FQYlrwnrCdTwQMwzvKl4RU1%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20210313_023627236.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;조립 전 촬영&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;menu.jpg&quot; data-origin-width=&quot;3270&quot; data-origin-height=&quot;2453&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc2YlH/btqZ1Ki9qgp/u6stEcuKrokRsup7P9ZlLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc2YlH/btqZ1Ki9qgp/u6stEcuKrokRsup7P9ZlLk/img.jpg&quot; data-alt=&quot;POST 화면에서 F11 키를 누르면 부팅 메뉴가 뜬다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc2YlH/btqZ1Ki9qgp/u6stEcuKrokRsup7P9ZlLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc2YlH%2FbtqZ1Ki9qgp%2Fu6stEcuKrokRsup7P9ZlLk%2Fimg.jpg&quot; data-filename=&quot;menu.jpg&quot; data-origin-width=&quot;3270&quot; data-origin-height=&quot;2453&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;POST 화면에서 F11 키를 누르면 부팅 메뉴가 뜬다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Windows 10</category>
      <category>FAT32</category>
      <category>GPT</category>
      <category>ISO</category>
      <category>NTFS</category>
      <category>UEFI</category>
      <category>USB</category>
      <category>부팅</category>
      <category>설치</category>
      <category>윈도우10</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2067</guid>
      <comments>https://snpbox.tistory.com/2067#entry2067comment</comments>
      <pubDate>Sat, 13 Mar 2021 02:52:19 +0900</pubDate>
    </item>
    <item>
      <title>mp4 동영상 FPS (Frame rate) 수정하기</title>
      <link>https://snpbox.tistory.com/2066</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IwTXS/btqYAtEDQuQ/ujZIjJDxfyGVhIKEXwMQ41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IwTXS/btqYAtEDQuQ/ujZIjJDxfyGVhIKEXwMQ41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IwTXS/btqYAtEDQuQ/ujZIjJDxfyGVhIKEXwMQ41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIwTXS%2FbtqYAtEDQuQ%2FujZIjJDxfyGVhIKEXwMQ41%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;최근에 MP4 동영상 하나가 정상적으로 재생이 되지 않아서 (버벅임) 보니 Frame rate가 비정상으로 인식되고 있음을 알 수 있었다. 원래 해당 파일은 59.94 FPS에 50분 정도 동영상인데, MediaInfo로 정보를 보면 0.198 FPS에 러닝타임 254 시간으로 비정상적인 수치를 보이고 있었고, 실제로 팟플레이어에서도 254시간으로 표시되고 있었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;FPS만 바로 수정할 수 있는 툴이 있는지 모르겠으나, 예전에 MP4 파일을 Split 할 때 사용했던 Yamb가 떠올라 해당 툴로 Remux 하면 되지 않을까 싶어 시도해 보았고, 결과적으로 내가 의도했던대로 작업이 잘 되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Yamb 홈페이지&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://yamb.unite-video.com/download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;yamb.unite-video.com/download.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;십여년 이상 지난 기억을 떠올려 Yamb를 검색해보았는데 해당 툴도 2009년 이후로 더 이상 개발이 진행되지 않은 듯하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;혹시 홈페이지를 닫을까 봐 파일을 첨부해둔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/Gyuhi/btqYAsTeD8Q/iuP7hKluhVLy6NkDkBl89K/Yamb-2.1.0.0_beta2_setup.exe?attach=1&amp;amp;knm=tfile.exe&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Yamb-2.1.0.0_beta2_setup.exe&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;6.84MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;설치하다 중간에 언어 파일 때문에 오류 뜨는 게 있던데 무시하고 다음으로 넘어가면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;작업은 2가지 단계로 나뉜다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MP4 파일을 Video와 (보통 H264) Audio로 (보통 AAC) 나눈다.&lt;/li&gt;
&lt;li&gt;그 둘을 다시 합치면서 Video의 FPS를 정상 수치로 수정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Yamb를 실행하고 Editing 들어가서 &lt;b&gt;Click to extract streams from AVI/MP4/MOV/TS files를&lt;/b&gt; 누르면 Video와 Audio를 분리할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;01.PNG&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;489&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m2c4q/btqYB6PX1aW/ZuTVsSVlqeFtfFYkuH5An1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m2c4q/btqYB6PX1aW/ZuTVsSVlqeFtfFYkuH5An1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m2c4q/btqYB6PX1aW/ZuTVsSVlqeFtfFYkuH5An1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm2c4q%2FbtqYB6PX1aW%2FZuTVsSVlqeFtfFYkuH5An1%2Fimg.png&quot; data-filename=&quot;01.PNG&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;489&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;문제의 파일을 선택하고 &lt;b&gt;Extract All Streams to Raw Format&lt;/b&gt; 선택하면 포함된 Video와 Audio를 추출해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;02.PNG&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;488&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6ttEk/btqYE7nhNUy/Oa2uo8cTyClYjv2X09gKP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6ttEk/btqYE7nhNUy/Oa2uo8cTyClYjv2X09gKP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6ttEk/btqYE7nhNUy/Oa2uo8cTyClYjv2X09gKP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6ttEk%2FbtqYE7nhNUy%2FOa2uo8cTyClYjv2X09gKP0%2Fimg.png&quot; data-filename=&quot;02.PNG&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;488&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래와 같이 추출은 금방 끝났다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmtoGJ/btqYLzDi24d/Scn5eIu0MD8Wfl2cfjKLg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmtoGJ/btqYLzDi24d/Scn5eIu0MD8Wfl2cfjKLg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmtoGJ/btqYLzDi24d/Scn5eIu0MD8Wfl2cfjKLg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmtoGJ%2FbtqYLzDi24d%2FScn5eIu0MD8Wfl2cfjKLg0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음은 추출된 파일을 다시 조립할 차례이다.&lt;/p&gt;
&lt;p&gt;Yamb를 실행하고 첫 메뉴인 Creation에 &lt;b&gt;Click to create an MP4 file with multiple audio, video, subtitle and chapters streams&lt;/b&gt;를 선택한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;03.PNG&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;485&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chkOQf/btqYE78EAZD/5iUH7giWK1thvg7gtEwisk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chkOQf/btqYE78EAZD/5iUH7giWK1thvg7gtEwisk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chkOQf/btqYE78EAZD/5iUH7giWK1thvg7gtEwisk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchkOQf%2FbtqYE78EAZD%2F5iUH7giWK1thvg7gtEwisk%2Fimg.png&quot; data-filename=&quot;03.PNG&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;485&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Add 버튼을 눌러서 아까 전에 추출했던 Video, Audio 파일을 추가한 다음에&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buPupV/btqYQxZe5uZ/K7waS0o1BICgXbFka3jPB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buPupV/btqYQxZe5uZ/K7waS0o1BICgXbFka3jPB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buPupV/btqYQxZe5uZ/K7waS0o1BICgXbFka3jPB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuPupV%2FbtqYQxZe5uZ%2FK7waS0o1BICgXbFka3jPB1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Video 파일이 선택된 상태에서 Properties 버튼을 누르고 원하는 정보를 수정해주면 된다. 일반적으로 많이 보는 동영상들은 NTSC 29.97 FPS 이거나 영화의 경우 23.976 FPS인 경우가 많다. 하지만 내가 작업하는 동영상은 59.94 FPS이기 때문에 아래와 같이 입력하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;04.PNG&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;636&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xd814/btqYDjO16WC/TLq3IkOChJrDpvroGtuefK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xd814/btqYDjO16WC/TLq3IkOChJrDpvroGtuefK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xd814/btqYDjO16WC/TLq3IkOChJrDpvroGtuefK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxd814%2FbtqYDjO16WC%2FTLq3IkOChJrDpvroGtuefK%2Fimg.png&quot; data-filename=&quot;04.PNG&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;636&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 합쳐진 새로운 파일은 정상적으로 재생되었고, &lt;span style=&quot;color: #333333;&quot;&gt;MediaInfo로 보면 원래 정상적인 러닝타임인 50분대와 59.94 FPS로 잘 표시됨을 확인할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;05.PNG&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;505&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XzNop/btqYJ9SoQ9X/zQI3025dPrjhmr7cOqgfqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XzNop/btqYJ9SoQ9X/zQI3025dPrjhmr7cOqgfqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XzNop/btqYJ9SoQ9X/zQI3025dPrjhmr7cOqgfqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXzNop%2FbtqYJ9SoQ9X%2FzQI3025dPrjhmr7cOqgfqK%2Fimg.png&quot; data-filename=&quot;05.PNG&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;505&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>동영상 이야기</category>
      <category>23.976</category>
      <category>29.97</category>
      <category>59.94</category>
      <category>FPS</category>
      <category>Frame rate</category>
      <category>mediainfo</category>
      <category>mp4</category>
      <category>yamb</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2066</guid>
      <comments>https://snpbox.tistory.com/2066#entry2066comment</comments>
      <pubDate>Sun, 28 Feb 2021 02:02:19 +0900</pubDate>
    </item>
    <item>
      <title>[마감][채용][경력] 펄어비스 시스템 엔지니어 모집</title>
      <link>https://snpbox.tistory.com/2065</link>
      <description>&lt;p&gt;&lt;u&gt;&lt;b&gt;현재 채용 마감되었습니다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;펄어비스에서 시스템 엔지니어를 모집하고 있습니다.&lt;/p&gt;
&lt;p&gt;우수한 인재들의 많은 관심과 지원 부탁드립니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;채용 바로가기&lt;/h3&gt;
&lt;p&gt;&lt;a class=&quot;tx-link&quot; href=&quot;https://pearlabyss-recruit.saramin.co.kr/apply_site/recruit/view/24735&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pearlabyss-recruit.saramin.co.kr/apply_site/recruit/view/24735&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;펄어비스 홈페이지&lt;/h3&gt;
&lt;p&gt;&lt;a class=&quot;tx-link&quot; href=&quot;https://www.pearlabyss.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.pearlabyss.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;펄어비스 복지&lt;/h3&gt;
&lt;p&gt;&lt;a class=&quot;tx-link&quot; href=&quot;https://www.pearlabyss.com/ko-KR/Company/Brand/Welfare&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.pearlabyss.com/ko-KR/Company/Brand/Welfare&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;</description>
      <category>잡담</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2065</guid>
      <comments>https://snpbox.tistory.com/2065#entry2065comment</comments>
      <pubDate>Thu, 29 Oct 2020 12:22:18 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 crontab date +% 포맷 작동하지 않는 경우</title>
      <link>https://snpbox.tistory.com/2064</link>
      <description>&lt;p&gt;리눅스 crontab에 걸어둔 파일이 작동하지 않는 경우 일반적인 원인은 환경변수이다. crontab은 nologin shell로 실행되기 때문에 PATH 등 /etc/profile에 걸어둔 내용들이 적용되지 않는다. 따라서 특정 위치에 있는 명령어를 절대경로로 적어두지 않은 경우 crontab이 PATH에서 해당 명령어를 찾지 못해 실패하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이를 해결하기 위한 방법으로 아래 4가지 정도가 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;1. 명령어를 절대경로로 사용한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- ex) java 대신 /app/jdk/bin/java&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;2. bash 스크립트 최상단에 #!/bin/bash 뒤에 -l 을 붙인다. (로그인)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- ex) #!/bin/bash 대신 #!/bin/bash -l&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;3. bash 스크립트 내부에서 /etc/profile을 한번 불러들인다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- ex) source /etc/profile 또는 . /etc/profile&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;4. crontab에 등록할때 bash -lc를 활용한다. (로그인)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- ex) * * * * * bash -lc /tmp/hello.py&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그런데 위 4가지 방법으로도 해결되지 않는 문제가 있다. 즉 환경변수와 무관한 문제인데 바로 crontab 내부에서 % 문자열을 사용했을 경우이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래와 같이 오늘 날짜를 파일명으로 해서 log로 남기고 싶은데&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 580px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9914CA405E78873F18&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9914CA405E78873F18&quot; width=&quot;580&quot; height=&quot;36&quot; filename=&quot;Snap1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;해보면 알겠지만 동작하지 않는다.&lt;/p&gt;
&lt;p&gt;혹시나 싶어&amp;nbsp;double or single quotation을 붙여봐도 역시나 작동하지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 580px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D57C3C5E78875F0D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D57C3C5E78875F0D&quot; width=&quot;580&quot; height=&quot;36&quot; filename=&quot;Snap2.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 580px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99465E3C5E78875F18&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99465E3C5E78875F18&quot; width=&quot;580&quot; height=&quot;36&quot; filename=&quot;Snap3.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;혹시나 싶어 $(command) 대신 `command` 방식으로 명령어를 입력해도 안되는건 동일하다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 580px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993AF8485E78880524&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993AF8485E78880524&quot; width=&quot;580&quot; height=&quot;36&quot; filename=&quot;Snap4.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;원인은 바로 % 문자가 crontab 내부에서 newline으로 해석되기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;The &quot;sixth&quot; field (the rest of the line) specifies the command&lt;/p&gt;
&lt;p&gt;to be run.&amp;nbsp; The entire command portion of the line,&amp;nbsp; up&amp;nbsp; to&amp;nbsp; a&lt;/p&gt;
&lt;p&gt;newline&amp;nbsp; or a &quot;%&quot; character, will be executed by /bin/sh or by&lt;/p&gt;
&lt;p&gt;the shell specified in the SHELL variable of the cronfile.&amp;nbsp; &amp;nbsp;A&lt;/p&gt;
&lt;p&gt;&quot;%&quot;&amp;nbsp; character in the command, unless escaped with a backslash&lt;/p&gt;
&lt;p&gt;(\), will be changed into newline&amp;nbsp; characters,&amp;nbsp; and&amp;nbsp; all&amp;nbsp; data&lt;/p&gt;
&lt;p&gt;after&amp;nbsp; the&amp;nbsp; first&amp;nbsp; %&amp;nbsp; will&amp;nbsp; be sent to the command as standard&lt;/p&gt;
&lt;p&gt;input.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;따라서 아래와 같이 %를 \ (backslash)로 escape 시켜주면 해결된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 580px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993D1E4C5E78896813&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993D1E4C5E78896813&quot; width=&quot;580&quot; height=&quot;36&quot; filename=&quot;Snap5.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>리눅스</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2064</guid>
      <comments>https://snpbox.tistory.com/2064#entry2064comment</comments>
      <pubDate>Mon, 23 Mar 2020 19:03:49 +0900</pubDate>
    </item>
    <item>
      <title>CentOS7에서 Google Chrome + Python3 + selenium으로 웹 크롤링 기초</title>
      <link>https://snpbox.tistory.com/2063</link>
      <description>&lt;p&gt;그동안 웹 크롤링을 한번도 안해봤는데, 이번에 한번 연습해보면서 과정을 정리해둔다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;1. Python3 + selenium 설치&lt;/h2&gt;&lt;p&gt;나는 예전부터 CentOS에 Python3는 Source Compile 해서 설치해왔다. 그런데 2019년 하반기에 드디어 CentOS7 base repository에 Python3가 등록된 것 같다. 그래서 본 글에서는 rpm (yum) 설치로 진행하겠다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;yum -y install python3&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;설치 후 필수는 아니지만 pip 버전도 업그레이드를 해준다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;pip3 install -U pip&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그리고 나서&amp;nbsp;selenium도 설치해준다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;pip3 install&amp;nbsp;selenium&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;2. Google Chrome 설치&lt;/h2&gt;&lt;p&gt;브라우저는 Chrome 뿐 아니라 Firefox나 다른 것들도 있겠지만, 나는 Chrome을 주로 사용하니 이 글에서는 Chrome 기준으로 진행하겠다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;우선 Linux용 Chrome은 아래 Chrome 공식 사이트에서 Fedora/openSUSE용 rpm 버전으로 받으면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.google.com/intl/ko/chrome/?platform=linux&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.google.com/intl/ko/chrome/?platform=linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995B98475E747C9516&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995B98475E747C9516&quot; width=&quot;640&quot; height=&quot;611&quot; filename=&quot;01.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나는 GUI 없이 시커먼 ssh 터미널 환경에서 진행하고 있기 때문에 직접 다운로드 링크가 필요하다. 위 링크에서 다운로드 받는 최신 Stable 버전의 직접 다운로드 링크는 아래와 같다.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;wget으로 받아서 yum 또는 rpm 명령어로 설치해도 되고, 직접 yum 명령어로 주소를 바로 입력해도 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;yum -y install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;3. Chrome Driver 설치&lt;/h2&gt;&lt;p&gt;selenium으로 Chrome 브라우저를 제어하려면 Driver가 필요하다. Chrome Driver는 아래 사이트에서 다운로드 받을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sites.google.com/a/chromium.org/chromedriver/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://sites.google.com/a/chromium.org/chromedriver/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;현재 기준으로&amp;nbsp;ChromeDriver 80.0.3987.106이 최신 Stable 버전인데 위에서 다운로드 받은 Chrome 최신 Stable 버전과 거의 동일하다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 586px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CA34455E747ED11C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CA34455E747ED11C&quot; width=&quot;586&quot; height=&quot;364&quot; filename=&quot;02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;참고로 위에서 설치했던 크롬 버전은 아래와 같이 확인해볼 수 있다.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;google-chrome --version&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 442px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EB7B3C5E747FD421&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EB7B3C5E747FD421&quot; width=&quot;442&quot; height=&quot;43&quot; filename=&quot;03.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;다운로드 받은 Chrome Driver는 그냥 압축 풀고 바로 사용할 수 있는 Binary 파일이다. 나는 /usr/bin 디렉터리 아래로 이동해서 사용하겠다. (어디가 되었든 PATH 걸려있는 위치에 두면 편하니)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;wget https://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_linux64.zip&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;unzip chromedriver_linux64.zip&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;mv chromedriver /usr/bin/&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;4.&amp;nbsp;selenium으로 크롤링 실습&lt;/h2&gt;&lt;p&gt;이제&amp;nbsp;selenium으로 실제 크롤링을 실습해보자.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;python3 쉘에서 아래와 같이 연습해보자.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;selenium&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;webdriver&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;selenium.webdriver.chrome.options&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;Options&lt;/div&gt;&lt;br /&gt;&lt;div&gt;chrome_options&amp;nbsp;=&amp;nbsp;Options()&lt;/div&gt;&lt;div&gt;chrome_options.add_argument(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;--headless&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;chrome_options.add_argument(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;--no-sandbox&quot;&lt;/span&gt;)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;driver&amp;nbsp;=&amp;nbsp;webdriver.Chrome(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;chrome_options&lt;/span&gt;=chrome_options)&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;여기까지 에러가 없으면 Chrome 구동이 된 것이다.&lt;/p&gt;
&lt;p&gt;그럼 이제 웹 사이트를 열어서 얻고싶은 정보를 얻으면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래는 실거래닷컴 사이트를 열어서&amp;nbsp;경기도 용인시 신고가를 가져와 한줄씩 text만 출력해보는 예제이다. 결국 각 사이트별로 개발자도구로 보면서 Element id나 name을 확인해서 크롤링 해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;driver.get(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;https://silgeorae.com&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;table&amp;nbsp;=&amp;nbsp;driver.find_element_by_id(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;newHighPriceBottomArea0&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;tr&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;table.find_elements_by_tag_name(&lt;span style=&quot;color: #ce9178;&quot;&gt;'tr'&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;(tr.text)&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;실제로 로그인이나 검색처럼 복잡한 조작을 하려면 find_element_by_id, send_keys, click 등의 method를 적절히 잘 활용하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나도 오늘 처음 설치하면서 실습해본거라 기초는 여기까지 하고, 더 복잡한 스킬은 추후 사용해보면서 필요시 추가 포스팅하도록 하겠다.&lt;/p&gt;</description>
      <category>리눅스</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2063</guid>
      <comments>https://snpbox.tistory.com/2063#entry2063comment</comments>
      <pubDate>Fri, 20 Mar 2020 18:41:58 +0900</pubDate>
    </item>
    <item>
      <title>Windows Server 평가판 KMS 정품인증 (에디션 변경)</title>
      <link>https://snpbox.tistory.com/2062</link>
      <description>&lt;p&gt;회사 내부에 KMS 서버를 구축해두고 Client들은 KMS 정품인증을 받고 있는데, 오늘 평가판으로 설치된 장비를 정품인증 해달라고 해서 처리하면서 확인된 내용이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;윈도우 서버 평가판은 아래 사이트에서 받을 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/ko-kr/evalcenter/evaluate-windows-server&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.microsoft.com/ko-kr/evalcenter/evaluate-windows-server&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;평가판으로 설치된 서버에 일반 KMS Client 키를 입력하면 입력되지 않는다. 에디션이 맞지 않기 때문이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;KMS Client 키는 아래 사이트에서 확인할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/windows-server/get-started/kmsclientkeys&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://docs.microsoft.com/ko-kr/windows-server/get-started/kmsclientkeys&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래는 윈도우 서버 2016 Standard 180일&amp;nbsp;평가판 기준으로 작성된 것이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 550px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CE17475E6B55CD26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CE17475E6B55CD26&quot; width=&quot;550&quot; height=&quot;458&quot; filename=&quot;00.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;윈도우 서버 2016 Standard의 KMS Client 키를 평가판에 입력하면 아래와 같이 오류가 발생한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;slmgr /ipk WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 592px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E5A64D5E6B561B22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E5A64D5E6B561B22&quot; width=&quot;592&quot; height=&quot;329&quot; filename=&quot;01.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;왜냐하면 위 키는 윈도우 서버 2016 Standard 에디션 용도이지 평가판 용도가 아니기 때문이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;따라서 평가판을 일반으로 에디션 변경이 필요하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 명령어로 현재 에디션을 확인할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;DISM /Online /Get-CurrentEdition&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CADA435E6B56DB2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CADA435E6B56DB2C&quot; width=&quot;640&quot; height=&quot;340&quot; filename=&quot;02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ServerStandardEval 이라고 끝에 Eval[uation]&amp;nbsp;평가판이라 표시되어 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그렇다면 평가판에서 어떤 에디션으로 변경이 가능할까?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 명령어로 확인해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;DISM /Online /Get-TargetEditions&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CC684F5E6B57941F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CC684F5E6B57941F&quot; width=&quot;640&quot; height=&quot;350&quot; filename=&quot;03.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Standard와 Datacenter 모두로 전환이 가능해 보인다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 명령어로 Standard 평가판을 Standard 일반으로 전환해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;DISM /Online /Set-Edition:&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;ServerStandard&lt;/span&gt; /ProductKey:&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY&lt;/span&gt; /AcceptEula&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;빨간색으로 표시한 부분은 Standard 에디션을 지정했기 때문에 Standard 에디션용 KMS Client 키를 입력한 것이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AD4C3F5E6B59A525&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AD4C3F5E6B59A525&quot; width=&quot;640&quot; height=&quot;271&quot; filename=&quot;04.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;작업이 끝나면 Y 눌러서 리부팅을 한번 해줘야 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;리부팅 후에는 아래와 같이 평가판이 아닌 일반 Standard로 바뀐게 보인다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 552px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996B133E5E6B5A2214&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996B133E5E6B5A2214&quot; width=&quot;552&quot; height=&quot;133&quot; filename=&quot;05.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 내부에 있는&amp;nbsp;KMS 정품인증 서버를 지정해주고 정품인증을 받으면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;slmgr /skms KMS서버주소:포트&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;slmgr /ato&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99241E455E6B5BAE30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99241E455E6B5BAE30&quot; width=&quot;640&quot; height=&quot;376&quot; filename=&quot;06.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>서버 2012 이상</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2062</guid>
      <comments>https://snpbox.tistory.com/2062#entry2062comment</comments>
      <pubDate>Fri, 13 Mar 2020 19:11:47 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 로컬 계정 패스워드 초기화 (응급 복구)</title>
      <link>https://snpbox.tistory.com/2061</link>
      <description>&lt;p&gt;오늘 윈도우 서버 로컬 Administrator 계정 패스워드를 몰라서 강제 초기화 해야할 일이 생겼는데, 기존에 소개해드렸던 몇가지 프로그램 말고 윈도우 자체 기능을 이용해서 일종의 트릭으로 해결하는 방법을 소개해드리겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;트릭의 주인공은 바로 접근성 센터를 띄워주는 Utilman.exe 파일입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;로그온 화면 하단 구석에 보시면 아래와 같은 버튼이 있죠? 그걸 누르면 접근성 센터가 뜹니다.&lt;/p&gt;
&lt;p&gt;윈도우 7~10, 서버 2008~2019 모두 동일하게 활용 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B25A445E58C1660D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B25A445E58C1660D&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;09.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EAE4445E58C1660B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EAE4445E58C1660B&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;08.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;만약 저 화면에서 접근성 센터 대신에 CMD 창을 관리자 권한으로 띄울 수 있다면 어떻게 될까요? net user 명령어로 패스워드를 변경할 수 있지 않을까요?&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;바로 그 점을 활용해서 Utilman.exe 대신 cmd.exe가 뜨도록 처리해주면 패스워드를 초기화 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;파일 변경은 당연히 다른 OS나 PE(Preinstallation Environment), 윈도우 설치 DVD, USB 등으로 부팅을 해서 진행하면 되겠죠?&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래 예제는 윈도우 서버 2019에서 ISO 이미지로 부팅해서 복구하는 모습입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;1. ISO로 부팅&lt;/h2&gt;&lt;p&gt;윈도우 설치 이미지 ISO로 부팅하면 아래와 같은 화면에 진입하게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993996405E58C2800B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993996405E58C2800B&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;2. Shift + F10 입력&lt;/h2&gt;&lt;p&gt;Shift + F10 입력하면 아래와 같이 CMD 창이 뜹니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9917023F5E58C2FC09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9917023F5E58C2FC09&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;03.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;3. 파일 백업 및 교체&lt;/h2&gt;&lt;p&gt;아래와 같이 C:\Windows\System32 디렉터리로 이동하여 Utilman.exe 파일을 백업해두고 cmd.exe를 Utilman.exe로 복사합니다. 물론 패스워드 복구해야할 윈도우 OS가 C 드라이브에 설치되어 있다고 가정한 예제입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;C:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;cd C:\Windows\System32&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;move Utilman.exe Utilman.exe.bak&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;copy cmd.exe Utilman.exe&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B94E385E58C34B37&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B94E385E58C34B37&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;04.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;4. 리부팅 후 접근성 센터 띄우기&lt;/h2&gt;&lt;p&gt;아래와 같이 리부팅 후 접근성 센터를 누르면 교체된 cmd.exe 창이 뜹니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A8B1505E58C47413&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A8B1505E58C47413&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;01.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A863505E58C47414&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A863505E58C47414&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;05.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;5. net user 명령어로 패스워드 변경하기&lt;/h2&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;net user 계정명 신규패스워드&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;net user Administrator qwer1234!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;만약 기존 계정 이름조차 모른다면 그냥 net user 라고 입력하면 계정 리스트가 보일겁니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9906DD435E58C4D817&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9906DD435E58C4D817&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;06.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;6. 변경된 패스워드로 로그인&lt;/h2&gt;&lt;p&gt;방금 net user 명령어로 변경한 패스워드로 로그인 해보시면 잘 될겁니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D426465E58C50C15&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D426465E58C50C15&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;07.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;7. Utilman.exe 파일 원복&lt;/h2&gt;&lt;p&gt;로그온 되셨나요? 이대로 사용하면 로그온 화면에서 cmd.exe 창을 띄울 수 있는 취약한 상태로 운영되니 그대로 두면 안되겠죠? 다시 가짜 Utilman.exe 파일은 지우고 백업해뒀던 Utilman.exe.bak 파일을 복사해서 Utilman.exe 파일을 만들어두면 됩니다. 이건 굳이 그림으로 설명 안드려도 충분히 하실 수 있을겁니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;8. 패스워드 원복&lt;/h2&gt;&lt;p&gt;아까 net user 명령어로 원래 사용하던 패스워드로 변경했다면 상관없겠지만, 본 글의 예제를 그대로 따라한다고 qwer1234! 로 변경했다면 다시 다른 것으로 변경해주는게 좋겠죠? 동일하게 CMD 창을 띄우고 net user 명령어로 원하는 패스워드로 변경해두시는게 좋겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이상으로 윈도우 로컬 계정 패스워드 초기화 (응급 복구) 소개를 마치겠습니다.&lt;/p&gt;</description>
      <category>윈도우 일반</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2061</guid>
      <comments>https://snpbox.tistory.com/2061#entry2061comment</comments>
      <pubDate>Fri, 28 Feb 2020 16:54:47 +0900</pubDate>
    </item>
    <item>
      <title>아파트 실거래가 조회 실거래닷컴</title>
      <link>https://snpbox.tistory.com/2060</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99794D435E4175C621&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99794D435E4175C621&quot; width=&quot;640&quot; height=&quot;398&quot; filename=&quot;Snap1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;며칠동안 연습삼아 웹사이트를 하나 만들어 보았습니다. 바로&amp;nbsp;아파트 실거래가를 조회할 수 있는 실거래닷컴입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://silgeorae.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://silgeorae.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;저는 개발자가 아니고 인프라 시스템 엔지니어입니다. 따라서 전문 개발자에 비해 품질이 떨어지는 점은 양해 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;실거래닷컴은 아래와 같이 구성되어 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;1. 실거래가 원본 :&amp;nbsp;&lt;a href=&quot;https://www.data.go.kr/dataset/3050988/openapi.do&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;공공데이터포털(data.go.kr) - 국토교통부 실거래가 정보&lt;/a&gt; - 아파트매매 실거래 상세 자료&lt;/p&gt;
&lt;p&gt;2. 서버 : &lt;a href=&quot;https://azure.microsoft.com/ko-kr/free/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Microsoft Azure 12개월 무&lt;/a&gt;&lt;a href=&quot;https://azure.microsoft.com/ko-kr/free/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;료체험 VM&lt;/a&gt; - 표준 B1s(1개 vcpu, 1GiB 메모리) - CentOS 7&lt;/p&gt;
&lt;p&gt;3. WEB : &lt;a href=&quot;https://httpd.apache.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Apache HTTP Server&lt;/a&gt; + &lt;a href=&quot;https://modwsgi.readthedocs.io/en/develop/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;mod_wsgi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Backend : &lt;a href=&quot;https://www.python.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Python3.7&lt;/a&gt; + &lt;a href=&quot;https://palletsprojects.com/p/flask/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Flask&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. 도메인 : &lt;a href=&quot;https://www.hosting.kr/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;호스팅케이알&lt;/a&gt;에서 .com 도메인 1년 구매 (A레코드, CNAME 추가 가능)&lt;/p&gt;
&lt;p&gt;6. SSL/TLS 인증서 : &lt;a href=&quot;https://letsencrypt.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Let's Encrypt&lt;/a&gt;에서 무료 발급&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;보시다시피 도메인 구입비만 1만원 조금 넘게 들었고 나머지는 전부 무료입니다. 따라서 서버 성능이 매우 낮은 점 감안해주세요. 그래도 낮은 성능에 비해 결과를 빠르게 출력할 수 있도록 잘 만들었다고 스스로 생각하고 있습니다 ㅎㅎ&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;사실 이걸 왜 만들었냐면... 국토부 실거래가 공개시스템에서 검색을 하려고 하니 시도, 시군구를 먼저 선택해야 검색이 되더라구요. 그냥 한번에 다 검색되면 편할텐데 싶어서...&amp;nbsp;목 마른 사람이 우물을 판다고 제가 답답해서 저 편하게 쓰려고 프로그래밍 연습도 할겸 만들어 봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;※ 변경 사항&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;2020-09-20:&amp;nbsp;Microsoft Azure에서 &lt;a href=&quot;https://aws.amazon.com/ko/free/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;AWS&lt;/a&gt;로 서버를 이사했습니다.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍/기타</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2060</guid>
      <comments>https://snpbox.tistory.com/2060#entry2060comment</comments>
      <pubDate>Tue, 11 Feb 2020 01:11:13 +0900</pubDate>
    </item>
    <item>
      <title>UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)</title>
      <link>https://snpbox.tistory.com/2059</link>
      <description>&lt;p&gt;리눅스 터미널에서 파이썬 2.x 버전을 사용할 때 자주 만나는 상황이다. 주로 출력을 파이프로 넘겨 grep을 수행하거나 &amp;gt; 로 리다이렉트 시켜서 파일에 저장하려 할 때 발생한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이유는 파이썬 2.x 버전은 기본 인코딩이 ascii인데 유니코드 문자열은 UTF-8 등으로 인코딩 해줘야 파이프나 리다이렉트에서&amp;nbsp;처리할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;~]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;python2&amp;nbsp;-c&amp;nbsp;&amp;nbsp;'import&amp;nbsp;sys;print(sys.getdefaultencoding())'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ascii&lt;/div&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;~]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;python3&amp;nbsp;-c&amp;nbsp;&amp;nbsp;'import&amp;nbsp;sys;print(sys.getdefaultencoding())'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;utf-8&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;파이썬 3.x 버전은 기본 UTF-8을 사용하기 때문에 그런 문제가 발생하지 않는다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;해결책은 shell 환경변수에&amp;nbsp;PYTHONIOENCODING을 UTF-8로 선언해주는 것이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;변경 전:&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;data]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;cat&amp;nbsp;region_code.json&amp;nbsp;|&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;json.tool&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;서귀포&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Traceback&amp;nbsp;(most&amp;nbsp;recent&amp;nbsp;call&amp;nbsp;last):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;File&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;/usr/lib64/python2.7/runpy.py&quot;&lt;/span&gt;,&amp;nbsp;line&amp;nbsp;162,&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&amp;nbsp;_run_module_as_main&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;,&amp;nbsp;fname,&amp;nbsp;loader,&amp;nbsp;pkg_name)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;File&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;/usr/lib64/python2.7/runpy.py&quot;&lt;/span&gt;,&amp;nbsp;line&amp;nbsp;72,&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&amp;nbsp;_run_code&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;exec&lt;/span&gt;&amp;nbsp;code&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&amp;nbsp;run_globals&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;File&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;/usr/lib64/python2.7/json/tool.py&quot;&lt;/span&gt;,&amp;nbsp;line&amp;nbsp;40,&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&amp;lt;module&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;File&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;/usr/lib64/python2.7/json/tool.py&quot;&lt;/span&gt;,&amp;nbsp;line&amp;nbsp;35,&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&amp;nbsp;main&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indent=4,&amp;nbsp;separators=(&lt;span style=&quot;color: #ce9178;&quot;&gt;','&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;':&amp;nbsp;'&lt;/span&gt;),&amp;nbsp;ensure_ascii=False)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;File&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;/usr/lib64/python2.7/json/__init__.py&quot;&lt;/span&gt;,&amp;nbsp;line&amp;nbsp;190,&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;in&lt;/span&gt;&amp;nbsp;dump&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fp.write(chunk)&lt;/div&gt;&lt;div&gt;UnicodeEncodeError:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'ascii'&lt;/span&gt;&amp;nbsp;codec&amp;nbsp;can&lt;span style=&quot;color: #ce9178;&quot;&gt;'t&amp;nbsp;encode&amp;nbsp;characters&amp;nbsp;in&amp;nbsp;position&amp;nbsp;1-5:&amp;nbsp;ordinal&amp;nbsp;not&amp;nbsp;in&amp;nbsp;range(128)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;변경 후:&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;data]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;export&amp;nbsp;PYTHONIOENCODING=UTF-8&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;data]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;cat&amp;nbsp;region_code.json&amp;nbsp;|&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;json.tool&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;서귀포&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;50130&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;제주특별자치도&amp;nbsp;서귀포시&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;참고로 파이썬 파일 내에서 기본 인코딩을 변경하는 방법은 아래와 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;sys&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reload&lt;/span&gt;(sys)&lt;/div&gt;&lt;div&gt;sys.setdefaultencoding(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;</description>
      <category>리눅스</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2059</guid>
      <comments>https://snpbox.tistory.com/2059#entry2059comment</comments>
      <pubDate>Thu, 6 Feb 2020 13:50:09 +0900</pubDate>
    </item>
    <item>
      <title>python -m json.tool 유니코드 한글 깨짐</title>
      <link>https://snpbox.tistory.com/2058</link>
      <description>&lt;p&gt;리눅스 터미널에서 json 파일을 출력해볼 때 python -m json.tool 명령어를 자주 이용한다. indent 4칸 넣고 적절히 보기 좋게 출력해주기 때문이다. 그런데 한글이 포함된 json 파일은 출력이 깨진다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;예를 들어 아래와 같은 json 자료가 있다고 가정해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;이름&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;홍길동&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;생년월일&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;1982-01-01&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;010-0000-0000&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;python -m json.tool로 출력하면 아래와 같이 유니코드로 출력된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;~]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;cat&amp;nbsp;kor1.json&amp;nbsp;|&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;json.tool&lt;/span&gt;&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;\uc0dd\ub144\uc6d4\uc77c&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;1982-01-01&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;\uc774\ub984&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;\ud64d\uae38\ub3d9&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;\uc804\ud654\ubc88\ud638&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;010-0000-0000&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이걸 한글로 보이게 출력하려면&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;첫째로 printf 함수를 이용하는 방법이 있다. CentOS 7에서는 기본 bash의 함수도 가능하고, CentOS 6에서는&amp;nbsp;coreutils에 포함된&amp;nbsp;/usr/bin/printf를 이용하면 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아무튼 아래와 같이 printf로 출력하면 한글이 정상적으로 표시된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;~]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;printf&amp;nbsp;&quot;$(cat&amp;nbsp;kor1.json&amp;nbsp;|&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;json.tool)&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;생년월일&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;1982-01-01&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;이름&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;홍길동&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;010-0000-0000&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그런데 이게 너무 불편하다... 원래 json.dumps에 ensure_ascii=False 옵션을 주면 한글 그대로 출력이 되는데 json.tool에는 해당 옵션이 들어가 있지 않다. 이를 확인해보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;OS 버전이랑 환경에 따라 다른데 CentOS 7에서는 내장 Python 2.7의 json.tool 위치가 아래와 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;~]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;python&amp;nbsp;-c&amp;nbsp;'import&amp;nbsp;json.tool;print(json.tool)'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;module&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'json.tool'&lt;/span&gt;&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'/usr/lib64/python2.7/json/tool.pyc'&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;/usr/lib64/python2.7/json/tool.py 파일을 열어보면 아래와 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;Command-line&amp;nbsp;tool&amp;nbsp;to&amp;nbsp;validate&amp;nbsp;and&amp;nbsp;pretty-print&amp;nbsp;JSON&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;Usage::&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$&amp;nbsp;echo&amp;nbsp;'{&quot;json&quot;:&quot;obj&quot;}'&amp;nbsp;|&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;json.tool&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;json&quot;:&amp;nbsp;&quot;obj&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$&amp;nbsp;echo&amp;nbsp;'{&amp;nbsp;1.2:3.4}'&amp;nbsp;|&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;json.tool&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Expecting&amp;nbsp;property&amp;nbsp;name&amp;nbsp;enclosed&amp;nbsp;in&amp;nbsp;double&amp;nbsp;quotes:&amp;nbsp;line&amp;nbsp;1&amp;nbsp;column&amp;nbsp;3&amp;nbsp;(char&amp;nbsp;2)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;sys&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;json&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;():&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(sys.argv)&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;infile&amp;nbsp;=&amp;nbsp;sys.stdin&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outfile&amp;nbsp;=&amp;nbsp;sys.stdout&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(sys.argv)&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;infile&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;open&lt;/span&gt;(sys.argv[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rb'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outfile&amp;nbsp;=&amp;nbsp;sys.stdout&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(sys.argv)&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;infile&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;open&lt;/span&gt;(sys.argv[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rb'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outfile&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;open&lt;/span&gt;(sys.argv[&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;],&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'wb'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;raise&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;SystemExit&lt;/span&gt;(sys.argv[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;&amp;nbsp;[infile&amp;nbsp;[outfile]]&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;with&lt;/span&gt;&amp;nbsp;infile:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&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;obj&amp;nbsp;=&amp;nbsp;json.load(infile)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;ValueError&lt;/span&gt;,&amp;nbsp;e:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;raise&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;SystemExit&lt;/span&gt;(e)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;with&lt;/span&gt;&amp;nbsp;outfile:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;json.dump(obj,&amp;nbsp;outfile,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;sort_keys&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;,&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;indent&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;separators&lt;/span&gt;=(&lt;span style=&quot;color: #ce9178;&quot;&gt;','&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;':&amp;nbsp;'&lt;/span&gt;))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outfile.write(&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt;&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'__main__'&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;main()&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 파일을 수정해서 json.dump에 ensure_ascii=False 옵션을 넣어주면 어떨까? 당연히 넣어주면 잘 동작한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;with&lt;/span&gt;&amp;nbsp;outfile:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;json.dump(obj,&amp;nbsp;outfile,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;sort_keys&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;,&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;indent&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;separators&lt;/span&gt;=(&lt;span style=&quot;color: #ce9178;&quot;&gt;','&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;':&amp;nbsp;'&lt;/span&gt;),&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;ensure_ascii&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outfile.write(&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #d7ba7d;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14px; line-height: 19px; white-space: pre;&quot;&gt;&lt;div&gt;[root@centos7-01&amp;nbsp;~]&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;cat&amp;nbsp;kor1.json&amp;nbsp;|&amp;nbsp;python&amp;nbsp;-m&amp;nbsp;json.tool&lt;/span&gt;&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;생년월일&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;1982-01-01&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;이름&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;홍길동&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;전화번호&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;010-0000-0000&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;OS 내장 Python 2.7이라서&amp;nbsp;python-libs 패키지가 업데이트 되면 원복 될 것 같기는 하지만... 아무튼 이렇게 쓰는 방법도 있다는걸 공유해본다.&lt;/p&gt;</description>
      <category>리눅스</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2058</guid>
      <comments>https://snpbox.tistory.com/2058#entry2058comment</comments>
      <pubDate>Thu, 6 Feb 2020 11:21:53 +0900</pubDate>
    </item>
    <item>
      <title>Windows Server 2012 R2 WSUS 윈도우 업데이트 무한 탐색 현상</title>
      <link>https://snpbox.tistory.com/2057</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9916B8345E14984728&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9916B8345E14984728&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;loop.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;회사에서 윈도우 서버 업데이트를 위해 WSUS (Windows Server Update Services) 서버를 구성해서 운영하고 있는데, 최근 일부 Windows Server 2012 R2 서버에서 윈도우 업데이트 무한 탐색 현상이 나타나서 고생을 했다. 결론부터 말하자면 버그이기는 한데&amp;nbsp;Windows Update Agent 버전을 업데이트 해야 해결이 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래와 같은 상황에서 발생하였다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;1. Client는 인터넷에 연결되어 있지 않고 GPO를 통해 내부 WSUS 서버를 바라보고 있음&lt;/p&gt;
&lt;p&gt;2. Visual Studio Subscriptions (구 MSDN) 사이트에서 2014년 출시된 ISO 파일을 받아 설치함&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Windows Server 2012 R2 VL with Update (x64) - DVD (Korean)&lt;/p&gt;
&lt;p&gt;ko_windows_server_2012_r2_vl_with_update_x64_dvd_6052806.iso&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;참고로 2014년 ISO 버전으로 인터넷을 통한 윈도우 업데이트를 진행하면 문제가 없었다. 내부 WSUS 서버를 통해서 진행할 때만 문제가 발생하였다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아마도 해당 문제가 해결된 Windows Update Agent가 2016년 정도에 출시된 것으로 추정된다. 따라서 수동으로 해당 업데이트 또는 그것이 포함된 최신 월별 품질 롤업을 설치해주면 그 이후로는 WSUS 문제가 해결될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;우선 최신 월별 품질 롤업을 설치하려면 서비스 스택 업데이트를 먼저 설치해야 한다. 윈도우 업데이트 파일은 아래 Microsoft®Update 카탈로그 사이트에서 검색하도록 하자.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://www.catalog.update.microsoft.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.catalog.update.microsoft.com/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;먼저&amp;nbsp;&lt;b&gt;&lt;u&gt;Windows Server 2012 R2 서비스 스택&lt;/u&gt;&lt;/b&gt; 이라고 검색해보자. 현재 기준으로 아래와 같이 4개가 검색되는데 최신 파일을 (현재는&amp;nbsp;KB4524445) 설치하면 될 것이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B2CE345E149A7325&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B2CE345E149A7325&quot; width=&quot;640&quot; height=&quot;421&quot; filename=&quot;Snap2.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;해당 파일을 설치한 후 그 다음으로는 최신 월별 롤업을 설치해보자.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Windows Server 2012 R2 보안 월별 품질 롤업&lt;/u&gt;&lt;/b&gt; 이라고 검색하면 현재 38개가 나오는데 마찬가지로 최신 버전을 (현재는 KB4530702) 설치해보라.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E07E395E149B6E30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E07E395E149B6E30&quot; width=&quot;640&quot; height=&quot;488&quot; filename=&quot;Snap3.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;위와 같이 서비스 스택 업데이트 후 최신 월별 품질 롤업을 설치해주면 WSUS&amp;nbsp;윈도우 업데이트 무한 탐색 현상은 해결될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그런데 혹시 다운로드 받은 MSU 파일이 GUI로 설치되지 않고 마찬가지로 무한 탐색 현상이 발생한다면 DISM 커맨드로 설치해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;DISM 커맨드로 MSU 파일이 설치되지 않으면 CAB 파일로 풀어서 설치해야 한다.&lt;/p&gt;
&lt;p&gt;expand 명령어로 풀 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래는 해당 MSU 파일을 2개 모아두고 실행한 예제이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;expand -F:* *.msu .&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;현재 디렉터리에 있는 모든 MSU 파일에 대하여 현재 디렉터리에 압축을 풀겠다는 뜻이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993F2C3E5E149F1732&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993F2C3E5E149F1732&quot; width=&quot;640&quot; height=&quot;475&quot; filename=&quot;Snap4.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;파일을 풀면 각각 4개씩 나오는데 실제 업데이트 CAB 파일 하나만 있으면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래와 같이 DISM 명령어로 설치해주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;dism /online /add-package /packagepath:&quot;CAB파일경로&quot;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DAFE495E14A1AB35&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DAFE495E14A1AB35&quot; width=&quot;640&quot; height=&quot;540&quot; filename=&quot;Snap8.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;사실 MS에서 2016년 이후로 패치된 Windows Update Agent가&amp;nbsp;포함된&amp;nbsp;Windows Server 2012 R2 ISO 이미지를 릴리스 해주면 제일 깔끔한데...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;VM의 경우 업데이트를 적용해놓고 Sysprep /generalize 돌려서 골든 이미지 템플릿을 만들어두면 되고&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;ISO 파일의 경우 WIM 파일을 마운트해서 DISM으로 업데이트를 통합해두면 편리할 것이다.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>서버 2012 이상</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2057</guid>
      <comments>https://snpbox.tistory.com/2057#entry2057comment</comments>
      <pubDate>Wed, 8 Jan 2020 00:26:29 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스][Python3] 단어 변환</title>
      <link>https://snpbox.tistory.com/2056</link>
      <description>&lt;p&gt;문제 :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/43163&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/43163&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나의 풀이 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&amp;nbsp;collections&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&amp;nbsp;deque&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;solution&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;begin&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;target&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;words&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;is_only_one_diff&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;a&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;b&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remain&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(a)):&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;a[i]&amp;nbsp;!=&amp;nbsp;b[i]:&lt;/div&gt;&lt;div&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;remain&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;remain&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;remain&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;queue&amp;nbsp;=&amp;nbsp;deque([(begin,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)])&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visited&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;queue:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;curr,&amp;nbsp;depth&amp;nbsp;=&amp;nbsp;queue.popleft()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;curr&amp;nbsp;==&amp;nbsp;target:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;depth&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visited.add(curr)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;word&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;words:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;is_only_one_diff(curr,&amp;nbsp;word)&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&amp;nbsp;word&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;visited:&lt;/div&gt;&lt;div&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;queue.append((word,&amp;nbsp;depth+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나의 풀이2 :&lt;/p&gt;
&lt;p&gt;deque를 사용하지 않는 버전&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;solution&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;begin&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;target&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;words&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;is_only_one_diff&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;a&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;b&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remain&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(a)):&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;a[i]&amp;nbsp;!=&amp;nbsp;b[i]:&lt;/div&gt;&lt;div&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;remain&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;remain&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;remain&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;queue&amp;nbsp;=&amp;nbsp;[begin]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;depth&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visited&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;queue:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;next_queue&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;curr&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;queue:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;curr&amp;nbsp;==&amp;nbsp;target:&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;depth&lt;/div&gt;&lt;div&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;visited.add(curr)&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;word&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;words:&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;word&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;visited&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&amp;nbsp;is_only_one_diff(curr,&amp;nbsp;word):&lt;/div&gt;&lt;div&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;next_queue.add(word)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;queue&amp;nbsp;=&amp;nbsp;next_queue&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;depth&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/기타</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2056</guid>
      <comments>https://snpbox.tistory.com/2056#entry2056comment</comments>
      <pubDate>Fri, 22 Nov 2019 01:31:19 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스][Python3] 타겟 넘버</title>
      <link>https://snpbox.tistory.com/2055</link>
      <description>&lt;p&gt;문제 :&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/43165&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/43165&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;나의 풀이 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;solution&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;numbers&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;target&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;target&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;remain&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;visit&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;end&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;abs&lt;/span&gt;(target)&amp;nbsp;&amp;lt;=&amp;nbsp;remain:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;visit&amp;nbsp;==&amp;nbsp;end:&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;abs&lt;/span&gt;(target)&amp;nbsp;==&amp;nbsp;remain:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #569cd6;&quot;&gt;nonlocal&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;div&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;ans&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&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;num&amp;nbsp;=&amp;nbsp;numbers[visit]&lt;/div&gt;&lt;div&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;dfs(target+num,&amp;nbsp;remain-num,&amp;nbsp;visit+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;end)&lt;/div&gt;&lt;div&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;dfs(target-num,&amp;nbsp;remain-num,&amp;nbsp;visit+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;end)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;numbers&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;sorted&lt;/span&gt;(numbers,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;reverse&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dfs(target,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;sum&lt;/span&gt;(numbers),&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(numbers)-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;한마디 :&lt;/p&gt;&lt;p&gt;모든 경우의 수를 탐색하기에 앞서 가지치기를 위해 역순 정렬을 먼저 해두었다. 큰 수부터 먼저 처리를 해야 나머지 경로를 추가 탐색할 가치가 있는지 빠르게 판단할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍/기타</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2055</guid>
      <comments>https://snpbox.tistory.com/2055#entry2055comment</comments>
      <pubDate>Mon, 11 Nov 2019 00:26:06 +0900</pubDate>
    </item>
    <item>
      <title>[Python3][2020카카오공채] 가사 검색</title>
      <link>https://snpbox.tistory.com/2054</link>
      <description>&lt;p&gt;문제 :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.welcomekakao.com/learn/courses/30/lessons/60060&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.welcomekakao.com/learn/courses/30/lessons/60060&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나의 풀이 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;solution&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;words&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;queries&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trie_by_length&amp;nbsp;=&amp;nbsp;[({},&amp;nbsp;{})&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;_&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;10001&lt;/span&gt;)]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;word&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;words:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;length&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(word)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t&amp;nbsp;=&amp;nbsp;trie_by_length[length][&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;word:&lt;/div&gt;&lt;div&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;t[&lt;span style=&quot;color: #ce9178;&quot;&gt;'count'&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;t.get(&lt;span style=&quot;color: #ce9178;&quot;&gt;'count'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;t.setdefault(c,&amp;nbsp;{})&lt;/div&gt;&lt;div&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;t&amp;nbsp;=&amp;nbsp;t[c]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t&amp;nbsp;=&amp;nbsp;trie_by_length[length][&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;word[::-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]:&lt;/div&gt;&lt;div&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;t[&lt;span style=&quot;color: #ce9178;&quot;&gt;'count'&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;t.get(&lt;span style=&quot;color: #ce9178;&quot;&gt;'count'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;t.setdefault(c,&amp;nbsp;{})&lt;/div&gt;&lt;div&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;t&amp;nbsp;=&amp;nbsp;t[c]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;[]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;query&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;queries:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;length&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(query)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;query[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'?'&lt;/span&gt;:&lt;/div&gt;&lt;div&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;t&amp;nbsp;=&amp;nbsp;trie_by_length[length][&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&lt;/div&gt;&lt;div&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;query&amp;nbsp;=&amp;nbsp;query[::-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&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;t&amp;nbsp;=&amp;nbsp;trie_by_length[length][&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;query:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;c&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'?'&lt;/span&gt;:&lt;/div&gt;&lt;div&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;ans.append(t.get(&lt;span style=&quot;color: #ce9178;&quot;&gt;'count'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;))&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;t:&lt;/div&gt;&lt;div&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;ans.append(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;&lt;/div&gt;&lt;div&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;t&amp;nbsp;=&amp;nbsp;t[c]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;한마디 :&lt;/p&gt;
&lt;p&gt;정확성 테스트는 아무렇게나 풀어도 쉽게 통과 가능하지만, 효율성 테스트는 Trie를 활용하지 않으면 2개 TC에서 Timeout 발생한다.&lt;/p&gt;</description>
      <category>프로그래밍/기타</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2054</guid>
      <comments>https://snpbox.tistory.com/2054#entry2054comment</comments>
      <pubDate>Mon, 7 Oct 2019 01:02:03 +0900</pubDate>
    </item>
    <item>
      <title>[Python3][2020카카오공채] 괄호 변환</title>
      <link>https://snpbox.tistory.com/2053</link>
      <description>&lt;p&gt;문제 :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.welcomekakao.com/learn/courses/30/lessons/60058&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.welcomekakao.com/learn/courses/30/lessons/60058&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나의 풀이 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;solution&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;p&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trans&amp;nbsp;=&amp;nbsp;{&lt;span style=&quot;color: #ce9178;&quot;&gt;'('&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;')'&lt;/span&gt;:&amp;nbsp;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'('&lt;/span&gt;,&amp;nbsp;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;')'&lt;/span&gt;}&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;split&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;trans[s[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;e&amp;nbsp;!=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(s):&lt;/div&gt;&lt;div&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;e&amp;nbsp;+=&amp;nbsp;trans[s[i]]&lt;/div&gt;&lt;div&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;i&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;(s[:i],&amp;nbsp;s[i:])&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;is_correct&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;s:&lt;/div&gt;&lt;div&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;e&amp;nbsp;+=&amp;nbsp;trans[c]&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;e&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;make_correct&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;u&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;v&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ce9178;&quot;&gt;'(&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;)'&lt;/span&gt;&amp;nbsp;%&amp;nbsp;recursion(v)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;u[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]:&lt;/div&gt;&lt;div&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;ret&amp;nbsp;+=&amp;nbsp;trans[-trans[c]]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ret&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;recursion&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&amp;nbsp;s:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;s&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u,&amp;nbsp;v&amp;nbsp;=&amp;nbsp;split(s)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;is_correct(u):&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;u&amp;nbsp;+&amp;nbsp;recursion(v)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;make_correct(u,&amp;nbsp;v)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;recursion(p)&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/기타</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2053</guid>
      <comments>https://snpbox.tistory.com/2053#entry2053comment</comments>
      <pubDate>Fri, 4 Oct 2019 07:47:21 +0900</pubDate>
    </item>
    <item>
      <title>[Python3][2020카카오공채] 문자열 압축</title>
      <link>https://snpbox.tistory.com/2052</link>
      <description>&lt;p&gt;문제 :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.welcomekakao.com/learn/courses/30/lessons/60057&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.welcomekakao.com/learn/courses/30/lessons/60057&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;나의 풀이 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;solution&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;compress&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;size&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;before,&amp;nbsp;count&amp;nbsp;=&amp;nbsp;s[:size],&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(size,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(s),&amp;nbsp;size):&lt;/div&gt;&lt;div&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;word&amp;nbsp;=&amp;nbsp;s[i:i+size]&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;word&amp;nbsp;==&amp;nbsp;before:&lt;/div&gt;&lt;div&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;count&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&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;ret&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;(count))&lt;/div&gt;&lt;div&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;ret&amp;nbsp;+=&amp;nbsp;size&lt;/div&gt;&lt;div&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;before,&amp;nbsp;count&amp;nbsp;=&amp;nbsp;word,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&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;ret&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;(count))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(before)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ret&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(s)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;size&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;ans+&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;//&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;min&lt;/span&gt;(ans,&amp;nbsp;compress(size))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/기타</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2052</guid>
      <comments>https://snpbox.tistory.com/2052#entry2052comment</comments>
      <pubDate>Thu, 3 Oct 2019 01:07:33 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 337. House Robber III</title>
      <link>https://snpbox.tistory.com/2051</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/house-robber-iii/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/house-robber-iii/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;Definition&amp;nbsp;for&amp;nbsp;a&amp;nbsp;binary&amp;nbsp;tree&amp;nbsp;node.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;class&amp;nbsp;TreeNode:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;x):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.val&amp;nbsp;=&amp;nbsp;x&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.left&amp;nbsp;=&amp;nbsp;None&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.right&amp;nbsp;=&amp;nbsp;None&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;rob&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;root&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;find&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;node&lt;/span&gt;):&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;node:&lt;/div&gt;&lt;div&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;left&amp;nbsp;=&amp;nbsp;find(node.left)&lt;/div&gt;&lt;div&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;right&amp;nbsp;=&amp;nbsp;find(node.right)&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(left)&amp;nbsp;+&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(right),&lt;/div&gt;&lt;div&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;node.val&amp;nbsp;+&amp;nbsp;left[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&amp;nbsp;+&amp;nbsp;right[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;])&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;max&lt;/span&gt;(find(root))&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2051</guid>
      <comments>https://snpbox.tistory.com/2051#entry2051comment</comments>
      <pubDate>Wed, 2 Oct 2019 01:42:35 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 142. Linked List Cycle II</title>
      <link>https://snpbox.tistory.com/2050</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/linked-list-cycle-ii/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/linked-list-cycle-ii/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;Definition&amp;nbsp;for&amp;nbsp;singly-linked&amp;nbsp;list.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;class&amp;nbsp;ListNode:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;x):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.val&amp;nbsp;=&amp;nbsp;x&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.next&amp;nbsp;=&amp;nbsp;None&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;detectCycle&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;head&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p1&amp;nbsp;=&amp;nbsp;p2&amp;nbsp;=&amp;nbsp;head&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&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;p1&amp;nbsp;=&amp;nbsp;p1.next&lt;/div&gt;&lt;div&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;p2&amp;nbsp;=&amp;nbsp;p2.next.next&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt;:&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;p1&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt;&amp;nbsp;p2:&lt;/div&gt;&lt;div&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;p2&amp;nbsp;=&amp;nbsp;head&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;p1&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&amp;nbsp;p2:&lt;/div&gt;&lt;div&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;p1&amp;nbsp;=&amp;nbsp;p1.next&lt;/div&gt;&lt;div&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;p2&amp;nbsp;=&amp;nbsp;p2.next&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;p1&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Comment :&lt;/p&gt;
&lt;p&gt;예전에 풀었던 문제와 같은 원리로 접근하였다. 토끼와 거북이 알고리즘.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cycle_detection&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://en.wikipedia.org/wiki/Cycle_detection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snoopybox.co.kr/1953&quot; target=&quot;_blank&quot;&gt;2019/01/25 - [프로그래밍/LeetCode] - [LeetCode][Python3] 287. Find the Duplicate Number&lt;/a&gt;&lt;/p&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2050</guid>
      <comments>https://snpbox.tistory.com/2050#entry2050comment</comments>
      <pubDate>Tue, 1 Oct 2019 01:15:49 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 647. Palindromic Substrings</title>
      <link>https://snpbox.tistory.com/2049</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/palindromic-substrings/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/palindromic-substrings/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;countSubstrings&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;count_palindrome&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;left&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;right&lt;/span&gt;):&lt;/div&gt;&lt;div&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;count&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&amp;lt;=&amp;nbsp;left&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&amp;nbsp;right&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(s)&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&amp;nbsp;s[left]&amp;nbsp;==&amp;nbsp;s[right]:&lt;/div&gt;&lt;div&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;count&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;left&amp;nbsp;-=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;right&amp;nbsp;+=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;count&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(s)):&lt;/div&gt;&lt;div&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;ans&amp;nbsp;+=&amp;nbsp;count_palindrome(s,&amp;nbsp;i,&amp;nbsp;i)&lt;/div&gt;&lt;div&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;ans&amp;nbsp;+=&amp;nbsp;count_palindrome(s,&amp;nbsp;i,&amp;nbsp;i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2049</guid>
      <comments>https://snpbox.tistory.com/2049#entry2049comment</comments>
      <pubDate>Wed, 25 Sep 2019 00:37:16 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 338. Counting Bits</title>
      <link>https://snpbox.tistory.com/2048</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/counting-bits/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/counting-bits/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;countBits&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;num&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]*(num+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(size):&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&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;ans[i+size]&amp;nbsp;=&amp;nbsp;ans[i]+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&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;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt;:&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;div&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;size&amp;nbsp;*=&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2048</guid>
      <comments>https://snpbox.tistory.com/2048#entry2048comment</comments>
      <pubDate>Tue, 24 Sep 2019 01:03:40 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 406. Queue Reconstruction by Height</title>
      <link>https://snpbox.tistory.com/2047</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/queue-reconstruction-by-height/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/queue-reconstruction-by-height/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;reconstructQueue&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;people&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;people.sort(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;key&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;lambda&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;x&lt;/span&gt;:&amp;nbsp;(-x[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;],&amp;nbsp;x[&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;[]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;h,&amp;nbsp;k&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;people:&lt;/div&gt;&lt;div&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;ans.insert(k,&amp;nbsp;(h,&amp;nbsp;k))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2047</guid>
      <comments>https://snpbox.tistory.com/2047#entry2047comment</comments>
      <pubDate>Mon, 23 Sep 2019 23:43:43 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 90. Subsets II</title>
      <link>https://snpbox.tistory.com/2046</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/subsets-ii/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/subsets-ii/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;subsetsWithDup&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;nums&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nums.sort()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;[[]]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(nums)):&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;i&amp;nbsp;==&amp;nbsp;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt;&amp;nbsp;nums[i-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&amp;nbsp;!=&amp;nbsp;nums[i]:&lt;/div&gt;&lt;div&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;size&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(ans)&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;j&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(ans)-size,&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(ans)):&lt;/div&gt;&lt;div&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;ans.append(ans[j]+[nums[i]])&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2046</guid>
      <comments>https://snpbox.tistory.com/2046#entry2046comment</comments>
      <pubDate>Tue, 17 Sep 2019 23:10:27 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 IP 주소 정렬</title>
      <link>https://snpbox.tistory.com/2045</link>
      <description>&lt;p&gt;리눅스에서 정렬할때 sort 명령어를 자주 사용한다. 그런데 IPv4 주소의 경우 sort로 그냥 정렬하면 원하는 결과가 나오지 않는다. 예를 들어 아래와 같은 IP 주소가 있다고 할 때&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;20.2.2.2&lt;/p&gt;
&lt;p&gt;3.4.3.3&lt;/p&gt;
&lt;p&gt;100.1.1.1&lt;/p&gt;
&lt;p&gt;3.30.3.3&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;우리가 원하는 결과는 아래와 같다.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;div&gt;&lt;div&gt;3.4.3.3&lt;/div&gt;&lt;div&gt;3.30.3.3&lt;/div&gt;&lt;div&gt;20.2.2.2&lt;/div&gt;&lt;div&gt;100.1.1.1&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;하지만 그냥 sort를 하면 아래와 같이 나오고&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;div&gt;100.1.1.1&lt;/div&gt;&lt;div&gt;20.2.2.2&lt;/div&gt;&lt;div&gt;3.30.3.3&lt;/div&gt;&lt;div&gt;3.4.3.3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sort -n 옵션을 주어도 아래와 같이 나온다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;div&gt;3.30.3.3&lt;/div&gt;&lt;div&gt;3.4.3.3&lt;/div&gt;&lt;div&gt;20.2.2.2&lt;/div&gt;&lt;div&gt;100.1.1.1&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3.30.3.3보다 3.4.3.3이 먼저 나와야 하는데 -n은 그것까지 고려하지 못한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;해결책은 약간의 트릭이기는 하지만 -V 옵션을 사용하는 것이다. -V는 버전넘버로 정렬인데 IPv4 주소가 딱 거기에 걸리는 형식이다. sort -V 옵션을 사용하면 아래와 같이 원하는 결과가 나온다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;div&gt;3.4.3.3&lt;/div&gt;&lt;div&gt;3.30.3.3&lt;/div&gt;&lt;div&gt;20.2.2.2&lt;/div&gt;&lt;div&gt;100.1.1.1&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;참고로 MySQL의 경우 ORDER BY INET_ATON(column)을 사용하면 되고, Python의 경우 socket.inet_aton을 사용하면 된다.&lt;/div&gt;</description>
      <category>리눅스</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2045</guid>
      <comments>https://snpbox.tistory.com/2045#entry2045comment</comments>
      <pubDate>Mon, 16 Sep 2019 17:07:59 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 739. Daily Temperatures</title>
      <link>https://snpbox.tistory.com/2044</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/daily-temperatures/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/daily-temperatures/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dailyTemperatures&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;T&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]*&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(T)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INF&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;float&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'INF'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;min_idx_t&amp;nbsp;=&amp;nbsp;[INF]*&lt;span style=&quot;color: #b5cea8;&quot;&gt;102&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(T)-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;,&amp;nbsp;-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;&lt;div&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;t&amp;nbsp;=&amp;nbsp;T[i]&lt;/div&gt;&lt;div&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;min_idx_t[t]&amp;nbsp;=&amp;nbsp;i&lt;/div&gt;&lt;div&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;min_idx&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;min&lt;/span&gt;(min_idx_t[t+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:])&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt;&amp;nbsp;min_idx&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt;&amp;nbsp;INF:&lt;/div&gt;&lt;div&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;ans[i]&amp;nbsp;=&amp;nbsp;min_idx-i&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;My Solution2 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;dailyTemperatures&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;T&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ans&amp;nbsp;=&amp;nbsp;[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]*&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(T)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stack&amp;nbsp;=&amp;nbsp;[]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt;&amp;nbsp;i,&amp;nbsp;t&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;enumerate&lt;/span&gt;(T):&lt;/div&gt;&lt;div&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;&lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt;&amp;nbsp;stack&amp;nbsp;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&amp;nbsp;T[stack[-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]]&amp;nbsp;&amp;lt;&amp;nbsp;t:&lt;/div&gt;&lt;div&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;idx&amp;nbsp;=&amp;nbsp;stack.pop()&lt;/div&gt;&lt;div&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;ans[idx]&amp;nbsp;=&amp;nbsp;i&amp;nbsp;-&amp;nbsp;idx&lt;/div&gt;&lt;div&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;stack.append(i)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&amp;nbsp;ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2044</guid>
      <comments>https://snpbox.tistory.com/2044#entry2044comment</comments>
      <pubDate>Thu, 12 Sep 2019 00:57:44 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 401. Binary Watch</title>
      <link>https://snpbox.tistory.com/2043</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/binary-watch/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/binary-watch/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;readBinaryWatch&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;num&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; num == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; [&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;0:00&quot;&lt;/span&gt;]&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;convert_to_time&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;path&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            hour = minute = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; path:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; i &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;4&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    hour += &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;**(&lt;span style=&quot;color: #b5cea8;&quot;&gt;3&lt;/span&gt;-i)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    minute += &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;**(&lt;span style=&quot;color: #b5cea8;&quot;&gt;9&lt;/span&gt;-i)&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; hour &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;12&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; minute &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;60&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;%02d&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt; % (hour, minute)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;path&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;remain&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; remain == &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                t = convert_to_time(path+[i])&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; t:&lt;/div&gt;&lt;div&gt;                    ans.append(t)&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt; remain &amp;lt;= &lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;-i:&lt;/div&gt;&lt;div&gt;                path.append(i)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; j &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;                    dfs(path, j, remain-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                path.pop()&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        ans = []&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            dfs([], i, num)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2043</guid>
      <comments>https://snpbox.tistory.com/2043#entry2043comment</comments>
      <pubDate>Thu, 5 Sep 2019 00:02:05 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 692. Top K Frequent Words</title>
      <link>https://snpbox.tistory.com/2042</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/top-k-frequent-words/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/top-k-frequent-words/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;topKFrequent&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;words&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        counter = {}&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; word &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; words:&lt;/div&gt;&lt;div&gt;            counter[word] = counter.get(word, &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;) + &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        bucket = [[] &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; _ &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(words)+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)]&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; word, count &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; counter.items():&lt;/div&gt;&lt;div&gt;            bucket[count].append(word)&lt;/div&gt;&lt;div&gt;        ans = []&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; word_list &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; bucket[::-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; word_list:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; word &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;sorted&lt;/span&gt;(word_list):&lt;/div&gt;&lt;div&gt;                    ans.append(word)&lt;/div&gt;&lt;div&gt;                    k -= &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; k == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Comment :&lt;/p&gt;
&lt;p&gt;지난번과 거의 비슷한 문제라 비슷한 방식으로 접근하였다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snoopybox.co.kr/1945&quot; target=&quot;_blank&quot;&gt;2019/01/05 - [프로그래밍/LeetCode] - [LeetCode][Python3] 347. Top K Frequent Elements&lt;/a&gt;&lt;/p&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2042</guid>
      <comments>https://snpbox.tistory.com/2042#entry2042comment</comments>
      <pubDate>Tue, 3 Sep 2019 00:45:32 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 89. Gray Code</title>
      <link>https://snpbox.tistory.com/2041</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/gray-code/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/gray-code/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;grayCode&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;():&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(path) == &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;**n:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; path[:]&lt;/div&gt;&lt;div&gt;            num = path[-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;            visited[num] = &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(n):&lt;/div&gt;&lt;div&gt;                cand = num ^ &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt; &amp;lt;&amp;lt; i&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; visited[cand]:&lt;/div&gt;&lt;div&gt;                    path.append(cand)&lt;/div&gt;&lt;div&gt;                    ret = dfs()&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; ret:&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ret&lt;/div&gt;&lt;div&gt;                    path.pop()&lt;/div&gt;&lt;div&gt;            visited[num] = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        path = [&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;        visited = [&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]*(&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;**n)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; dfs()&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2041</guid>
      <comments>https://snpbox.tistory.com/2041#entry2041comment</comments>
      <pubDate>Tue, 3 Sep 2019 00:08:29 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 357. Count Numbers with Unique Digits</title>
      <link>https://snpbox.tistory.com/2040</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/count-numbers-with-unique-digits/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/count-numbers-with-unique-digits/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;countNumbersWithUniqueDigits&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; x &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, n+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            part = &lt;span style=&quot;color: #b5cea8;&quot;&gt;9&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt; x &amp;gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                part *= (&lt;span style=&quot;color: #b5cea8;&quot;&gt;11&lt;/span&gt;-x)&lt;/div&gt;&lt;div&gt;                x -= &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            ans += part&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Comment :&lt;/p&gt;
&lt;p&gt;단순 경우의 수 문제이다. 각 자리수 별로 아래와 같이 구해서 다 더하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;1                       n==0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;9                       n==1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;9 * 9                   n==2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;9 * 9 * 8               n==3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;9 * 9 * 8 * 7           n==4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2040</guid>
      <comments>https://snpbox.tistory.com/2040#entry2040comment</comments>
      <pubDate>Thu, 29 Aug 2019 00:05:03 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 996. Number of Squareful Arrays</title>
      <link>https://snpbox.tistory.com/2039</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/number-of-squareful-arrays/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/number-of-squareful-arrays/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;numSquarefulPerms&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;A&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;is_squareful&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;(n**&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.5&lt;/span&gt;)**&lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt; == n&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;remain&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; remain == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; num &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; counter:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; counter[num]:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; last == -&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt; is_squareful(last + num):&lt;/div&gt;&lt;div&gt;                        counter[num] -= &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                        dfs(num, remain-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                        counter[num] += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        counter = {}&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; num &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; A:&lt;/div&gt;&lt;div&gt;            counter[num] = counter.get(num, &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;) + &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        dfs(-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(A))&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Comment :&lt;/p&gt;
&lt;p&gt;비슷한 유형을 반복해서 풀다 보니 비슷한 풀이를 떠올리게 된다.&lt;/p&gt;
&lt;p&gt;중복 원소가 존재하는 순열 문제&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snoopybox.co.kr/2030&quot; target=&quot;_blank&quot;&gt;2019/08/18 - [프로그래밍/LeetCode] - [LeetCode][Python3] 47. Permutations II&lt;/a&gt;&lt;/p&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2039</guid>
      <comments>https://snpbox.tistory.com/2039#entry2039comment</comments>
      <pubDate>Wed, 28 Aug 2019 01:21:02 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 174. Dungeon Game</title>
      <link>https://snpbox.tistory.com/2038</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/dungeon-game/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/dungeon-game/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;calculateMinimumHP&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;dungeon&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        M, N = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(dungeon), &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(dungeon[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;])&lt;/div&gt;&lt;div&gt;        HP = [[&lt;span style=&quot;color: #4ec9b0;&quot;&gt;float&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'INF'&lt;/span&gt;)]*(N+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;) &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; _ &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(M+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)]&lt;/div&gt;&lt;div&gt;        HP[M][N-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;] = HP[M-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;][N] = &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; r &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(M-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, -&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, -&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; c &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(N-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, -&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, -&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;                need = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;min&lt;/span&gt;(HP[r+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;][c], HP[r][c+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]) - dungeon[r][c]&lt;/div&gt;&lt;div&gt;                HP[r][c] = need &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; need &amp;gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; HP[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Comment :&lt;/p&gt;&lt;p&gt;도착점부터 거꾸로 시작점까지 올라가며 계산하는 DP 문제&lt;/p&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2038</guid>
      <comments>https://snpbox.tistory.com/2038#entry2038comment</comments>
      <pubDate>Wed, 28 Aug 2019 00:06:36 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 77. Combinations</title>
      <link>https://snpbox.tistory.com/2037</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/combinations/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/combinations/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;combine&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;comb&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; (n, k) &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; memo:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; memo[(n, k)]&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; n &amp;lt; k:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; []&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; k == &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                memo[(n, k)] = [[x] &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; x &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, n+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)]&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; memo[(n, k)]&lt;/div&gt;&lt;div&gt;            part1 = comb(n-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, k-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;            part2 = comb(n-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, k)&lt;/div&gt;&lt;div&gt;            res = []&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; part &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; part1:&lt;/div&gt;&lt;div&gt;                res.append(part + [n])&lt;/div&gt;&lt;div&gt;            res.extend(part2)&lt;/div&gt;&lt;div&gt;            memo[(n, k)] = res&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; memo[(n, k)]&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        memo = &lt;span style=&quot;color: #4ec9b0;&quot;&gt;dict&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; comb(n, k)&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Comment :&lt;/p&gt;
&lt;p&gt;nCr = n-1Cr-1 + n-1Cr 임을 활용하였으며, 중복 계산을 피하기 위해 memoization을 활용하였다.&lt;/p&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2037</guid>
      <comments>https://snpbox.tistory.com/2037#entry2037comment</comments>
      <pubDate>Sun, 25 Aug 2019 00:45:44 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 39. Combination Sum</title>
      <link>https://snpbox.tistory.com/2036</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/combination-sum/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/combination-sum/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;combinationSum&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;candidates&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;target&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;path&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;remain&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; remain == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                ans.append(path[:])&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; i &amp;lt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(candidates) &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; candidates[i] &amp;lt;= remain:&lt;/div&gt;&lt;div&gt;                dfs(path + [candidates[i]], remain-candidates[i], i)&lt;/div&gt;&lt;div&gt;                dfs(path, remain, i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        candidates.sort()&lt;/div&gt;&lt;div&gt;        ans = []&lt;/div&gt;&lt;div&gt;        dfs([], target, &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2036</guid>
      <comments>https://snpbox.tistory.com/2036#entry2036comment</comments>
      <pubDate>Fri, 23 Aug 2019 23:19:14 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 216. Combination Sum III</title>
      <link>https://snpbox.tistory.com/2035</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/combination-sum-iii/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/combination-sum-iii/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;combinationSum3&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;k&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;path&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;num&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; k == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt; n &amp;lt; num &lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;9&lt;/span&gt; &amp;lt; num:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; k == n == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    ans.append(path[:])&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            dfs(k-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, n-num, path+[num], num+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;            dfs(k, n, path, num+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        ans = []&lt;/div&gt;&lt;div&gt;        dfs(k, n, [], &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2035</guid>
      <comments>https://snpbox.tistory.com/2035#entry2035comment</comments>
      <pubDate>Fri, 23 Aug 2019 21:25:45 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 52. N-Queens II</title>
      <link>https://snpbox.tistory.com/2034</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/n-queens-ii/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/n-queens-ii/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;totalNQueens&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;n&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;r&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; r == n:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; c &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; column:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; r+c &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; up_right &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; r-c &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; up_left:&lt;/div&gt;&lt;div&gt;                    column.remove(c)&lt;/div&gt;&lt;div&gt;                    up_right.add(r+c)&lt;/div&gt;&lt;div&gt;                    up_left.add(r-c)&lt;/div&gt;&lt;div&gt;                    dfs(r+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                    column.add(c)&lt;/div&gt;&lt;div&gt;                    up_right.remove(r+c)&lt;/div&gt;&lt;div&gt;                    up_left.remove(r-c)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        up_left, up_right, column = &lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;(), &lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;(), &lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(n))&lt;/div&gt;&lt;div&gt;        dfs(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Comment :&lt;/p&gt;
&lt;p&gt;일단 체스의 퀸이 어떻게 움직일 수 있는지 알아야 한다. 가로, 세로, 대각선 모두 움직일 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 269px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B32E4F5D5EC03611&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B32E4F5D5EC03611&quot; width=&quot;269&quot; height=&quot;290&quot; filename=&quot;queen.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;출처 :&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Queen_(chess)&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://en.wikipedia.org/wiki/Queen_(chess)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;좌상-우하 대각선은 x, y 좌표 값의 차가 같은 점들이고&lt;/p&gt;
&lt;p&gt;우상-좌하 대각선은 x, y 좌표 값의 합이 같은 점들이다.&lt;/p&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2034</guid>
      <comments>https://snpbox.tistory.com/2034#entry2034comment</comments>
      <pubDate>Fri, 23 Aug 2019 01:21:30 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 526. Beautiful Arrangement</title>
      <link>https://snpbox.tistory.com/2033</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/beautiful-arrangement/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/beautiful-arrangement/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;countArrangement&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;N&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;():&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; nums:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            i = &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt; + N - &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(nums)&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; n &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; nums:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; i % n == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt; n % i == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    nums.remove(n)&lt;/div&gt;&lt;div&gt;                    dfs()&lt;/div&gt;&lt;div&gt;                    nums.add(n)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        nums = &lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, N+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;))&lt;/div&gt;&lt;div&gt;        dfs()&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution 2 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;countArrangement&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;N&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;i&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; i == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; j &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, N+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; visited[j] &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; (j % i == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt; i % j == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;                    visited[j] = &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                    dfs(i-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                    visited[j] = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        visited = [&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]*(N+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        dfs(N)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2033</guid>
      <comments>https://snpbox.tistory.com/2033#entry2033comment</comments>
      <pubDate>Wed, 21 Aug 2019 01:56:20 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 784. Letter Case Permutation</title>
      <link>https://snpbox.tistory.com/2032</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/letter-case-permutation/&quot;&gt;https://leetcode.com/problems/letter-case-permutation/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;letterCasePermutation&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;S&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;path&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(path) == &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(S):&lt;/div&gt;&lt;div&gt;                ans.append(path)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            c = S[&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(path)]&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; c.isupper():&lt;/div&gt;&lt;div&gt;                dfs(path + c.lower())&lt;/div&gt;&lt;div&gt;            dfs(path + c)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        S = S.upper()&lt;/div&gt;&lt;div&gt;        ans = []&lt;/div&gt;&lt;div&gt;        dfs(&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution 2 :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;letterCasePermutation&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;S&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        S = S.upper()&lt;/div&gt;&lt;div&gt;        ans = [&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; c &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; S:&lt;/div&gt;&lt;div&gt;            tmp = []&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; prefix &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; ans:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; c.isupper():&lt;/div&gt;&lt;div&gt;                    tmp.append(prefix + c.lower())&lt;/div&gt;&lt;div&gt;                tmp.append(prefix + c)&lt;/div&gt;&lt;div&gt;            ans = tmp&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2032</guid>
      <comments>https://snpbox.tistory.com/2032#entry2032comment</comments>
      <pubDate>Tue, 20 Aug 2019 00:50:16 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 980. Unique Paths III</title>
      <link>https://snpbox.tistory.com/2031</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/unique-paths-iii/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/unique-paths-iii/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;uniquePathsIII&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;grid&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;c&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;remain&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; grid[r][c] == &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; remain == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            grid[r][c] = -&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; y, x &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; ((r+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, c), (r-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, c), (r, c+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;), (r, c-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)):&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt; &amp;lt;= y &amp;lt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(grid) &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt; &amp;lt;= x &amp;lt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(grid[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]) &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                        grid[y][x] &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; (&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;)):&lt;/div&gt;&lt;div&gt;                    dfs(y, x, remain-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;            grid[r][c] = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        remain = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; r &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(grid)):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; c &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(grid[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;])):&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; grid[r][c] &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; (&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;                    remain += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; grid[r][c] == &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        R, C = r, c&lt;/div&gt;&lt;div&gt;        dfs(R, C, remain)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2031</guid>
      <comments>https://snpbox.tistory.com/2031#entry2031comment</comments>
      <pubDate>Tue, 20 Aug 2019 00:01:58 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 47. Permutations II</title>
      <link>https://snpbox.tistory.com/2030</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/permutations-ii/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/permutations-ii/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;permuteUnique&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;nums&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;backtrack&lt;/span&gt;():&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(path) == &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(nums):&lt;/div&gt;&lt;div&gt;                ret.append(path[:])&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; n &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; counter:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; counter[n]:&lt;/div&gt;&lt;div&gt;                        path.append(n)&lt;/div&gt;&lt;div&gt;                        counter[n] -= &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                        backtrack()&lt;/div&gt;&lt;div&gt;                        path.pop()&lt;/div&gt;&lt;div&gt;                        counter[n] += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        counter = {}&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; n &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; nums:&lt;/div&gt;&lt;div&gt;            counter[n] = counter.get(n, &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;) + &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        path, ret = [], []&lt;/div&gt;&lt;div&gt;        backtrack()&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ret&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2030</guid>
      <comments>https://snpbox.tistory.com/2030#entry2030comment</comments>
      <pubDate>Sun, 18 Aug 2019 23:08:24 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 1079. Letter Tile Possibilities</title>
      <link>https://snpbox.tistory.com/2029</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/letter-tile-possibilities/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/letter-tile-possibilities/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;numTilePossibilities&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;tiles&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;dfs&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;prefix&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;remain&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; prefix &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; ans:&lt;/div&gt;&lt;div&gt;                ans.add(prefix)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(remain)):&lt;/div&gt;&lt;div&gt;                    dfs(prefix + remain[i], remain[:i] + remain[i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:])&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        ans = &lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;        dfs(&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;, tiles)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(ans)-&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2029</guid>
      <comments>https://snpbox.tistory.com/2029#entry2029comment</comments>
      <pubDate>Fri, 16 Aug 2019 00:54:20 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 765. Couples Holding Hands</title>
      <link>https://snpbox.tistory.com/2028</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/couples-holding-hands/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/couples-holding-hands/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;minSwapsCouples&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;row&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        pos = {n: i &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i, n &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;enumerate&lt;/span&gt;(row)}&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(row), &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;            left, right = row[i], row[i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; left % &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt; == &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                pair = left + &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                pair = left - &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; right != pair:&lt;/div&gt;&lt;div&gt;                j = pos[pair]&lt;/div&gt;&lt;div&gt;                row[i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;], row[j] = row[j], row[i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;]&lt;/div&gt;&lt;div&gt;                ans += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                pos[right] = j&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2028</guid>
      <comments>https://snpbox.tistory.com/2028#entry2028comment</comments>
      <pubDate>Thu, 15 Aug 2019 23:48:16 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Python3] 854. K-Similar Strings</title>
      <link>https://snpbox.tistory.com/2027</link>
      <description>&lt;p&gt;Problem :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.com/problems/k-similar-strings/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://leetcode.com/problems/k-similar-strings/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;My Solution :&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Solution&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;kSimilarity&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;A&lt;/span&gt;: &lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;B&lt;/span&gt;: &lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;) -&amp;gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;int&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; A == B:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        checked = &lt;span style=&quot;color: #4ec9b0;&quot;&gt;set&lt;/span&gt;([A])&lt;/div&gt;&lt;div&gt;        queue = [A]&lt;/div&gt;&lt;div&gt;        ans = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;while&lt;/span&gt; queue:&lt;/div&gt;&lt;div&gt;            next_queue = []&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; S &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; queue:&lt;/div&gt;&lt;div&gt;                S = &lt;span style=&quot;color: #4ec9b0;&quot;&gt;list&lt;/span&gt;(S)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(S)):&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; S[i] != B[i]:&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;break&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; j &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(i+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(S)):&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; S[j] == B[i] &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; S[j] != S[i]:&lt;/div&gt;&lt;div&gt;                        S[i], S[j] = S[j], S[i]&lt;/div&gt;&lt;div&gt;                        candidate = &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;.join(S)&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; candidate &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; checked:&lt;/div&gt;&lt;div&gt;                            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; candidate == B:&lt;/div&gt;&lt;div&gt;                                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ans + &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                            checked.add(candidate)&lt;/div&gt;&lt;div&gt;                            next_queue.append(candidate)&lt;/div&gt;&lt;div&gt;                        S[i], S[j] = S[j], S[i]&lt;/div&gt;&lt;div&gt;            queue = next_queue&lt;/div&gt;&lt;div&gt;            ans += &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <category>프로그래밍/LeetCode</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2027</guid>
      <comments>https://snpbox.tistory.com/2027#entry2027comment</comments>
      <pubDate>Thu, 15 Aug 2019 02:52:45 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 ipconfig 이더넷 어댑터 출력 순서 변경</title>
      <link>https://snpbox.tistory.com/2026</link>
      <description>&lt;p&gt;오늘 회사에서 윈도우 서버 2012 R2 버전으로 서버 1대를 OS 설치하였는데, 백업 솔루션 라이선스 관련 ipconfig 명령어를 입력했을 때 첫번째 순서에 메인 IP가 오도록 변경해달라는 요구를 받았다. 예를 들면 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C3B9395D527A9121&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C3B9395D527A9121&quot; width=&quot;640&quot; height=&quot;420&quot; filename=&quot;ipconfig1.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;위와 같이 3개의 IP가 존재한다고 가정할 때, 192.168.100.100 IP가 ipconfig 명령을 입력했을 때 제일 위에 표시되어야 한다는 요구였다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;처음에는 이더넷 어댑터 이름으로 정렬되는게 아닌가 싶었는데, 예시를 보면 이더넷 3, 이더넷 2, 이더넷 순서로 표시되고 있다. 그래서 이름 역순으로 정렬되는건가 싶어서 이름을 변경해보기도 했는데, 이름과 순서는 아무런 상관이 없었다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;검색해보니 바인딩 순서를 편집할 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아래와 같이 네트워크 어댑터 설정 변경 화면으로 가서 (ncpa.cpl), ALT 키를 누르면 메뉴가 등장하는데 고급 - 고급 설정으로 들어간다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B020415D527B9A28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B020415D527B9A28&quot; width=&quot;640&quot; height=&quot;345&quot; filename=&quot;ncpa.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;어댑터 및 바인딩 탭에서 이더넷 순서를 변경할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 485px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E54A385D527BB831&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E54A385D527BB831&quot; width=&quot;485&quot; height=&quot;533&quot; filename=&quot;binding.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;변경 후 아래와 같이 요구사항대로 192.168.100.100 IP가 가장 먼저 출력되게 되었다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993FC8375D527BF123&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993FC8375D527BF123&quot; width=&quot;640&quot; height=&quot;420&quot; filename=&quot;ipconfig2.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>윈도우 일반</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2026</guid>
      <comments>https://snpbox.tistory.com/2026#entry2026comment</comments>
      <pubDate>Tue, 13 Aug 2019 18:02:19 +0900</pubDate>
    </item>
    <item>
      <title>BlueStacks 4 vdi 파일 용량 축소</title>
      <link>https://snpbox.tistory.com/2025</link>
      <description>&lt;p&gt;이 글은 직전 포스팅과 관련이 있어 많은 설명이 생략되어 있다. 직전 포스팅도 함께 읽어보길 바란다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snoopybox.co.kr/2024&quot; target=&quot;_blank&quot;&gt;2019/07/09 - [리눅스] - BlueStacks 4 Disk 용량 증설&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이 글의 목적은 diffencing vdi 파일의 용량이 많이 커졌을 경우 zerofill 후 vdi 사이즈를 줄이는 방법에 관한 것이다. 예전에 포스팅했던 아래 글과 비슷한 맥락이다.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snoopybox.co.kr/1294&quot; target=&quot;_blank&quot;&gt;2010/05/21 - [Windows 7/VHD 이야기] - Expandable VHD 용량 최적화 하기&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;현재 BlueStacks 내부 저장 공간은 36.6GB를 사용하고 있는 것으로 표시되지만, 실제 Data_0.vdi 파일의 사이즈는 67.8GB에 육박하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9936D8465D2DD6E82A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9936D8465D2DD6E82A&quot; width=&quot;640&quot; height=&quot;668&quot; filename=&quot;01.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;따라서 Data_0.vdi 파일의 크기를 36.6GB에 가깝게 줄여보는 것이 이 글의 목적이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;우선 리눅스 머신에 해당 vdi를 붙인 다음 zerofill을 해야 한다. dd로 /dev/zero 를 disk full 까지 write 하는 방법도 있다고는 하나, 여기서는 zerofree 라는 툴을 활용해서 설명하겠다. CentOS 7 기준으로 EPEL에 있는 패키지이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;yum -y install epel-release&lt;/p&gt;
&lt;p&gt;yum -y install zerofree&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;저렇게 설치하고 나서 아래와 같이 /dev/sdb1 파티션을 zerofree 시켜주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;zerofree -v /dev/sdb1&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9993C83F5D2DD8F723&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9993C83F5D2DD8F723&quot; width=&quot;640&quot; height=&quot;538&quot; filename=&quot;02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;다음은 VirtualBox에 있는 VBoxManage.exe 파일을 이용해 vdi 파일을 compact 시켜주면 끝이다. 해당 파일은 VirtualBox 설치 경로에 있는데 일반적으로 아래 경로에 있을 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;C:\Program Files\Oracle\VirtualBox&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;해당 디렉터리로 이동 후 아래와 같이 입력하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;cd C:\Program Files\Oracle\VirtualBox&lt;/p&gt;
&lt;p&gt;VBoxManage.exe modifymedium disk&amp;nbsp;&quot;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;D:\BlueStacks\Engine\Android\Data_0.vdi&lt;/span&gt;&lt;/b&gt;&quot; --compact&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;실제 vdi 파일의 경로는 각자 환경에 따라 다를 것이니 파란색 부분은 수정해서 사용하기 바란다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EB173B5D2DD9CF28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EB173B5D2DD9CF28&quot; width=&quot;640&quot; height=&quot;335&quot; filename=&quot;03.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이렇게 compact 작업을 하고 나니 67.8GB였던 파일이 42.9GB로 많이 줄어들었다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BEEA3C5D2DDA5719&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BEEA3C5D2DDA5719&quot; width=&quot;640&quot; height=&quot;544&quot; filename=&quot;04.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;※ 2019-07-17 내용 추가&lt;/h3&gt;&lt;p&gt;포스팅 하고나서&amp;nbsp;BlueStacks를 살펴보니 내가 지금까지 헛수고를 한 것 같다. 굳이 리눅스에 붙여서 zerofree 시키고 VirtualBox의 VBoxManage.exe를 사용하지 않더라도,&amp;nbsp; BlueStacks 자체에 디스크 정리 기능이 있다. 진행상황을 보니 내가 수작업으로 했던 2가지 일을 알아서 처리해주는 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99907C4A5D2DF35510&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99907C4A5D2DF35510&quot; width=&quot;640&quot; height=&quot;535&quot; filename=&quot;05.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>리눅스</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2025</guid>
      <comments>https://snpbox.tistory.com/2025#entry2025comment</comments>
      <pubDate>Tue, 16 Jul 2019 23:11:50 +0900</pubDate>
    </item>
    <item>
      <title>BlueStacks 4 Disk 용량 증설</title>
      <link>https://snpbox.tistory.com/2024</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C5064D5D2404551D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C5064D5D2404551D&quot; width=&quot;640&quot; height=&quot;399&quot; filename=&quot;Snap1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;BlueStacks 4의 Disk는 기본 64GB인데 이걸 증설하는 방법에 관한 내용이다. 이 글은 리눅스 커맨드와 버추얼박스, 가상 디스크에 대해 어느 정도 지식이 있어야 하므로 초보자에게 적합하지 않다. 또한 초보자를 대상으로 자세한 방법을 설명하지 않을 것이다. 그냥 전체적인 흐름만 보여주겠다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;우선 테스트한&amp;nbsp;BlueStacks 버전은 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993B5B4C5D24047721&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993B5B4C5D24047721&quot; width=&quot;640&quot; height=&quot;450&quot; filename=&quot;Snap2.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;그리고 테스트한 버추얼 박스 버전은 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9918EB425D2404C22A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9918EB425D2404C22A&quot; width=&quot;640&quot; height=&quot;505&quot; filename=&quot;Snap6.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;파티션 확장과 파일시스템 확장에 사용한 리눅스는 CentOS 7 이고 해당 버전 기준으로 설명을 하겠다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;우선 버추얼 박스의 가상 미디어 관리자에 Data.vdi 파일과 Data_0.vdi 파일을 추가한다. 해당 파일은 가상 디스크 부모와 자식 관계이다. 그리고 부모와 자식 둘다 속성에서 크기를 원하는 크기로 확장해줘야 한다. 아래 그림은 128GB로 설정한 것이다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9951CC425D24051C29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9951CC425D24051C29&quot; width=&quot;640&quot; height=&quot;380&quot; filename=&quot;Snap3.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;참고로 vdi 파일들은&amp;nbsp;C:\ProgramData\BlueStacks\Engine\Android 경로에 있다. 필자는 설치시 경로를 수정했기 때문에 위와 같이 표시된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;아 그리고 작업이 잘못될 수 있으니 vdi 파일들은 복사본을 생성해두길 바란다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;다음 과정은 해당 Data_0.vdi 파일을 미리 설치해둔 CentOS 7 머신에 추가 디스크로 붙이는 것이다. 이렇게 붙이면 OS 영역이 /dev/sda 이고 추가 디스크는 /dev/sdb 로 붙게 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99285E4F5D2406062B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99285E4F5D2406062B&quot; width=&quot;640&quot; height=&quot;409&quot; filename=&quot;Snap4.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;CentOS 7 머신을 부팅한 후 /dev/sdb1 파티션의 크기를 확장해주고 파일시스템의 크기도 확장해줘야 한다. 파티션 확장은 fdisk로 파티션을 삭제하고 다시 생성해도 되고, CentOS 7의 경우&amp;nbsp;cloud-utils-growpart 패키지를 설치하면 좀 더 편리하다. CentOS 6은 EPEL에 있고 CentOS 7은 Base에 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;yum install cloud-utils-growpart&lt;/p&gt;
&lt;p&gt;growpart /dev/sdb 1&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이렇게 하면 파티션 크기가 확장되고&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;fsadm resize /dev/sdb1&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이렇게 하면 파일시스템 크기가 확장된다.&lt;/p&gt;
&lt;p&gt;(resize2fs를 사용해도 된다)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;혹시 e2fsck -f /dev/sdb1 하라고 에러가 나면 한번 해주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F87F355D2406D830&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F87F355D2406D830&quot; width=&quot;640&quot; height=&quot;533&quot; filename=&quot;Snap5.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이제 CentOS 7을 끄고 Disk를 분리한 다음 BlueStacks를 구동해보면&amp;nbsp;Disk 용량이 증설되어 있을 것이다.&lt;/p&gt;</description>
      <category>리눅스</category>
      <author>snoopybox</author>
      <guid isPermaLink="true">https://snpbox.tistory.com/2024</guid>
      <comments>https://snpbox.tistory.com/2024#entry2024comment</comments>
      <pubDate>Tue, 9 Jul 2019 12:19:56 +0900</pubDate>
    </item>
  </channel>
</rss>