<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Apes Together Strong.</title>
    <link>https://artofcom77.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 18 Jun 2026 12:35:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>자전거통학</managingEditor>
    <item>
      <title>[1-DP][Medium] 213. House Robber II</title>
      <link>https://artofcom77.tistory.com/494</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/house-robber-ii/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/house-robber-ii/description/&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;주어진 정수 배열을 각 집과 그 집에서 rob 할수 있는 value라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 도둑은 인접해 있는 집은 털수가 없다. 또한 집들이 원형으로 연결되어 있다고 가정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 마지막 집과 첫 집은 연결되어 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도둑이 훔칠 수 있는 최대값을 찾아라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;522&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWuTFD/btsIWwvPwpb/PnoJMhSXL3lbW7kyQuJJLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWuTFD/btsIWwvPwpb/PnoJMhSXL3lbW7kyQuJJLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWuTFD/btsIWwvPwpb/PnoJMhSXL3lbW7kyQuJJLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWuTFD%2FbtsIWwvPwpb%2FPnoJMhSXL3lbW7kyQuJJLk%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;432&quot; height=&quot;329&quot; data-origin-width=&quot;522&quot; data-origin-height=&quot;398&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;House Robber I 문제의 변형이다.&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;특정 위치에서 idx+2 혹은 idx+3에 접근 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 0에서 시작했으면 size()-1 까지만 접근 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 캐시 버퍼를 만들때 이 경우를 고려한다. 따라서 size() x 2의 캐시 사이즈가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 시작 시, 첫 집에서 시작 할 수 있고, 이때는 마지막 집은 접근 할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째, 혹은 세번째 집에서 시작 할 수 있고 이때는 마지막 집은 접근 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 기본으로 로직을 만든다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1723081931968&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int doRobDP(int idx, vector&amp;lt;int&amp;gt;&amp;amp; vCache, const vector&amp;lt;int&amp;gt;&amp;amp; nums, int n)
{
    if(idx &amp;gt;= n)
        return 0;

    int idxCache = n==nums.size()-1 ? idx : nums.size() + idx;
    if(vCache[idxCache] &amp;gt;= 0)
        return vCache[idxCache];

    vCache[idxCache] = nums[idx] + max(doRobDP(idx+2, vCache, nums, n), doRobDP(idx+3, vCache, nums, n));
    return vCache[idxCache];
}

int rob(vector&amp;lt;int&amp;gt;&amp;amp; nums) 
{
    if(nums.size()==1)
        return nums[0];

    vector&amp;lt;int&amp;gt; vCache;
    vCache.resize(nums.size()*2, -1);

    int cost = max(doRobDP(0, vCache, nums, nums.size()-1), doRobDP(1, vCache, nums, nums.size()));
    cost = max(cost, doRobDP(2, vCache, nums, nums.size()));
    return cost;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignLeft&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK1ZSE/btsIX8mRNWa/ejqFvvjJne6PZDJ7SR24Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK1ZSE/btsIX8mRNWa/ejqFvvjJne6PZDJ7SR24Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK1ZSE/btsIX8mRNWa/ejqFvvjJne6PZDJ7SR24Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK1ZSE%2FbtsIX8mRNWa%2FejqFvvjJne6PZDJ7SR24Zk%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;411&quot; height=&quot;404&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/494</guid>
      <comments>https://artofcom77.tistory.com/494#entry494comment</comments>
      <pubDate>Thu, 8 Aug 2024 10:54:42 +0900</pubDate>
    </item>
    <item>
      <title>[1D DP][Medium] 198. House Robber</title>
      <link>https://artofcom77.tistory.com/493</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/house-robber/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/house-robber/description/&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도둑은 인접한 집은 방문할 수 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 집을 털었을 때, 기대할 수 있는 최대 값을 찾아라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6rUX8/btsITt0ggJm/dQTiRIIKbRVEBzwoKUcml0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6rUX8/btsITt0ggJm/dQTiRIIKbRVEBzwoKUcml0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6rUX8/btsITt0ggJm/dQTiRIIKbRVEBzwoKUcml0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6rUX8%2FbtsITt0ggJm%2FdQTiRIIKbRVEBzwoKUcml0%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;469&quot; height=&quot;432&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;432&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://leetcode.com/problems/min-cost-climbing-stairs/description/&quot;&gt;https://leetcode.com/problems/min-cost-climbing-stairs/description/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인접해서 방문 할 수 없으므로,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 위치에서 기대 할수 있는 최대 값은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nums[idx] + max(idx+1 이동, idx+2 이동)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1722859484698&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; int minCostDP(vector&amp;lt;int&amp;gt;&amp;amp; vCache, int idx, vector&amp;lt;int&amp;gt;&amp;amp; cost)
{
    if(idx &amp;gt;= cost.size())
        return 0;

    if(vCache[idx] &amp;gt;= 0)
        return vCache[idx];

    vCache[idx] = cost[idx] + min(minCostDP(vCache, idx+1, cost), minCostDP(vCache, idx+2, cost));
    return vCache[idx];
}

int minCostClimbingStairs(vector&amp;lt;int&amp;gt;&amp;amp; cost) 
{
    vector&amp;lt;int&amp;gt; vCache;
    vCache.resize(cost.size(), -1);
    return min(minCostDP(vCache, 0, cost), minCostDP(vCache, 1, cost));
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rCxEg/btsIUyGykFG/qTA2WxrFzLDmEnC3unvt11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rCxEg/btsIUyGykFG/qTA2WxrFzLDmEnC3unvt11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rCxEg/btsIUyGykFG/qTA2WxrFzLDmEnC3unvt11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrCxEg%2FbtsIUyGykFG%2FqTA2WxrFzLDmEnC3unvt11%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;355&quot; height=&quot;383&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/493</guid>
      <comments>https://artofcom77.tistory.com/493#entry493comment</comments>
      <pubDate>Mon, 5 Aug 2024 21:04:56 +0900</pubDate>
    </item>
    <item>
      <title>[1D DP][Easy] 746. Min Cost Climbing Stairs</title>
      <link>https://artofcom77.tistory.com/492</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/min-cost-climbing-stairs/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/min-cost-climbing-stairs/description/&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;정수배열 cost는 각 계단을 밟는 비용을 의미한다.&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;시작은 0이나 1 위치에서 시작 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, 최고 높은 계단에 도달하기 위한 최소 비용을 구하라.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecxuTm/btsITTxCOpk/yJXyRkkPBbKK60Wyhy7BaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecxuTm/btsITTxCOpk/yJXyRkkPBbKK60Wyhy7BaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecxuTm/btsITTxCOpk/yJXyRkkPBbKK60Wyhy7BaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FecxuTm%2FbtsITTxCOpk%2FyJXyRkkPBbKK60Wyhy7BaK%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;475&quot; height=&quot;375&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 위치에서 비용은&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cost[idx] + min(1단계, 2단계)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위를 기준으로 코드를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1722858764974&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int minCostDP(vector&amp;lt;int&amp;gt;&amp;amp; vCache, int idx, vector&amp;lt;int&amp;gt;&amp;amp; cost)
{
    if(idx &amp;gt;= cost.size())
        return 0;

    if(vCache[idx] &amp;gt;= 0)
        return vCache[idx];

    vCache[idx] = cost[idx] + min(minCostDP(vCache, idx+1, cost), minCostDP(vCache, idx+2, cost));
    return vCache[idx];
}


int minCostClimbingStairs(vector&amp;lt;int&amp;gt;&amp;amp; cost) 
{
    vector&amp;lt;int&amp;gt; vCache;
    vCache.resize(cost.size(), -1);
    return min(minCostDP(vCache, 0, cost), minCostDP(vCache, 1, cost));
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nDMwy/btsIUsl3HIm/S7mTc213ZwjvTyVkOnF2Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nDMwy/btsIUsl3HIm/S7mTc213ZwjvTyVkOnF2Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nDMwy/btsIUsl3HIm/S7mTc213ZwjvTyVkOnF2Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnDMwy%2FbtsIUsl3HIm%2FS7mTc213ZwjvTyVkOnF2Q0%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;381&quot; height=&quot;415&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/492</guid>
      <comments>https://artofcom77.tistory.com/492#entry492comment</comments>
      <pubDate>Mon, 5 Aug 2024 20:53:01 +0900</pubDate>
    </item>
    <item>
      <title>[1D DP][Easy] 70. Climbing Stairs</title>
      <link>https://artofcom77.tistory.com/491</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/climbing-stairs/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/climbing-stairs/description/&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;한번에 1개 혹은 2개의 계단을 밟을 수 있다고 할 때, 계단을 다 오를 모든 경우의 수를 찾아라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AFmWl/btsIScxuffJ/CAw5IRVH7TMKLUiVKBmFhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AFmWl/btsIScxuffJ/CAw5IRVH7TMKLUiVKBmFhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AFmWl/btsIScxuffJ/CAw5IRVH7TMKLUiVKBmFhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAFmWl%2FbtsIScxuffJ%2FCAw5IRVH7TMKLUiVKBmFhK%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;515&quot; height=&quot;459&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리마인드 하듯이 문제를 풀어 본다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DP 문제는 복합적인 듯한 문제를 단일 단계로 해석하는 것이 중요하다.&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;한 단계에서 1개 혹은 2개만 올라 갈 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 끝까지 오르면 그만 둔다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 특정 단계에서 오른 횟수를 구한다면, 그 값을 재활용 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(마지막 계단 바로 앞에서는 1회 두 번, 2회 한번의 두 가지 경우가 존재하고, 이것은 이 전에 무엇을 했던 동일하다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1722694493512&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int climb(vector&amp;lt;int&amp;gt;&amp;amp; vCache, int idx, int n)
{
    if(idx &amp;gt;= n)
        return 1;

    if(vCache[idx] &amp;gt;= 0)
        return vCache[idx];

    int ret = climb(vCache, idx + 1, n);
    ret += climb(vCache, idx + 2, n);
    vCache[idx] = ret;
    return ret;
}

int climbStairs(int n) 
{
    vector&amp;lt;int&amp;gt; vCache;
    vCache.resize(n, -1);
    return climb(vCache, 1, n);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cox6gh/btsIULrceLr/HRd8jZKasmm7KKuvTza6gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cox6gh/btsIULrceLr/HRd8jZKasmm7KKuvTza6gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cox6gh/btsIULrceLr/HRd8jZKasmm7KKuvTza6gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcox6gh%2FbtsIULrceLr%2FHRd8jZKasmm7KKuvTza6gK%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;437&quot; height=&quot;334&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/491</guid>
      <comments>https://artofcom77.tistory.com/491#entry491comment</comments>
      <pubDate>Sat, 3 Aug 2024 23:16:36 +0900</pubDate>
    </item>
    <item>
      <title>[BackTrack][Hard] 51. N-Queens</title>
      <link>https://artofcom77.tistory.com/490</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/n-queens/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/n-queens/description/&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;아래와 같은 N-Queens 를 만든다고 할때, n 이 주어지면 이에 가능한 N-Queens를 모두 찾아라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ZO9n/btsIR2tV1u7/mZatBCUhGsWLOOOMOsIzcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ZO9n/btsIR2tV1u7/mZatBCUhGsWLOOOMOsIzcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ZO9n/btsIR2tV1u7/mZatBCUhGsWLOOOMOsIzcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ZO9n%2FbtsIR2tV1u7%2FmZatBCUhGsWLOOOMOsIzcK%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;482&quot; height=&quot;624&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 자체는 쉽다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매 칸당 Queen을 놓을 수 있다면, 놓거나 아니면 놓지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1722437489610&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool CanPlace(int idx, const vector&amp;lt;string&amp;gt;&amp;amp; vCur, int n)
{
    int y = idx / n;
    int x = idx % n;

    // check H
    for(int h = 0; h &amp;lt; n; ++h)
    {
        if(h!=x &amp;amp;&amp;amp; vCur[y][h]=='Q')
            return false;
    }

    // check V
    for(int v = 0; v &amp;lt; n; ++v)
    {
        if(v!=y &amp;amp;&amp;amp; vCur[v][x]=='Q')
            return false;
    }

    // check to RT
    int xx = x+1;
    int yy = y-1;
    while(xx&amp;lt;n &amp;amp;&amp;amp; yy&amp;gt;=0)
    {
        if(vCur[yy--][xx++] == 'Q')
            return false;
    }

    // check to LB
    xx = x-1;
    yy = y+1;
    while(xx&amp;gt;=0 &amp;amp;&amp;amp; yy&amp;lt;n)
    {
        if(vCur[yy++][xx--] == 'Q')
            return false;
    }

    // check to RB
    xx = x+1;
    yy = y+1;
    while(xx&amp;lt;n &amp;amp;&amp;amp; yy&amp;lt;n)
    {
        if(vCur[yy++][xx++] == 'Q')
            return false;
    }

    // check to LT
    xx = x-1;
    yy = y-1;
    while(xx&amp;gt;=0 &amp;amp;&amp;amp; yy&amp;gt;=0)
    {
        if(vCur[yy--][xx--] == 'Q')
            return false;
    }

    return true;
}

void solveNQueensBT(int idx, vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt;&amp;amp; vRet, vector&amp;lt;string&amp;gt;&amp;amp; vCur, int n)
{
    if(idx &amp;gt;= n*n)
    {
        int cnt = 0;
        for(int q = 0; q &amp;lt; n*n; ++q)
        {
            if(vCur[q/n][q%n]=='Q')
                ++cnt;
        }
        // cout &amp;lt;&amp;lt; cnt &amp;lt;&amp;lt; endl;
        if(cnt == n)
            vRet.push_back(vCur);
        return;
    }

    // Put 'Q' on the position if possible.
    if(CanPlace(idx, vCur, n))
    {
        int yy = idx / n;
        int xx = idx % n;

        vCur[yy][xx] = 'Q';
        solveNQueensBT(idx+1, vRet, vCur, n);
        vCur[yy][xx] = '.';
    }

    // Skip putting 'Q'.
    solveNQueensBT(idx+1, vRet, vCur, n);
}

vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt; solveNQueens(int n) 
{
    vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt; vRet;
    vector&amp;lt;string&amp;gt; vCur;
    for(int y = 0; y &amp;lt; n; ++y)
    {
        string line = &quot;&quot;;
        for(int x = 0; x &amp;lt; n; ++x)
            line += &quot;.&quot;;
        vCur.push_back(line);
    }
    solveNQueensBT(0, vRet, vCur, n);

    return vRet;    
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3JGrU/btsIQHxrLNR/P9zrUpChvvtRi3aoOnXDI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3JGrU/btsIQHxrLNR/P9zrUpChvvtRi3aoOnXDI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3JGrU/btsIQHxrLNR/P9zrUpChvvtRi3aoOnXDI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3JGrU%2FbtsIQHxrLNR%2FP9zrUpChvvtRi3aoOnXDI0%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;560&quot; height=&quot;380&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 답은 찾아 지지만, 느리다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 최적화 해 보자.&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;N-Queens 조건 상, 하나의 x 축에 두개의 값이 올 수 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면, x 축에 놓는 값을 하나씩 이동하면서 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 x 축으로 놓는 방식을 y 만큼 한다. (문제에서 모두 n)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1722437642383&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void NQueens_BT(vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt;&amp;amp; vRet, string&amp;amp; strCur, int n, int ix, int iy)
{
    if (iy &amp;gt;= n)
    {
        vector&amp;lt;string&amp;gt; vBuff;
        for (int q = 0; q &amp;lt; n; ++q)
        {
            string strTemp = strCur;
            strTemp = strTemp.substr(n * q, n);
            vBuff.push_back(strTemp);
        }
        vRet.push_back(vBuff);
        return;
    }

    for(int x = 0 ; x &amp;lt; n; ++x)
    {
        int curIdx = iy*n + x;
        if (IsValid_NQueens(strCur, n, x, iy))
        {
            strCur[curIdx] = 'Q';
            NQueens_BT(vRet, strCur, n, ix, iy+1);
            strCur[curIdx] = '.';
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 행에 하나의 Queen을 놓으면 다음 행으로 넘어가면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k9iDP/btsIQ2VNFqv/X3sPL9prwc4NSzAMjravx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k9iDP/btsIQ2VNFqv/X3sPL9prwc4NSzAMjravx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k9iDP/btsIQ2VNFqv/X3sPL9prwc4NSzAMjravx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk9iDP%2FbtsIQ2VNFqv%2FX3sPL9prwc4NSzAMjravx1%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;518&quot; height=&quot;350&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;훨씬 근접한 결과를 얻었다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/490</guid>
      <comments>https://artofcom77.tistory.com/490#entry490comment</comments>
      <pubDate>Wed, 31 Jul 2024 23:55:51 +0900</pubDate>
    </item>
    <item>
      <title>[BackTrack][Medium] 17. Letter Combinations of a Phone Number</title>
      <link>https://artofcom77.tistory.com/487</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/&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;2-9 까지의 다이얼을 누른다고 할 때, 매칭 가든한 모든 문자열을 찾아라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FZoqu/btsISL5Onze/Zk12jtL18KbkMbWksy3A10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FZoqu/btsISL5Onze/Zk12jtL18KbkMbWksy3A10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FZoqu/btsISL5Onze/Zk12jtL18KbkMbWksy3A10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFZoqu%2FbtsISL5Onze%2FZk12jtL18KbkMbWksy3A10%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;552&quot; height=&quot;426&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;426&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;BackTracking의 고전과도 같은 문제.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;depth가 더해 지면서 진행 하는 index 는 찾고자 하는 input digit이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 데이터를 가지고 가질 수 있는 문자를 문자열의 길이가 digits만큼 되면 반환 buff에 넣는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1722344629130&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void letterCombinationsBT(const string&amp;amp; digits, map&amp;lt;char, vector&amp;lt;char&amp;gt;&amp;gt;&amp;amp; buff, vector&amp;lt;string&amp;gt;&amp;amp; vOut, string&amp;amp; cur)
{
    if (cur.size() &amp;gt;= digits.size())
    {
        if(cur.size() &amp;gt; 0)
            vOut.push_back(cur);
        return;
    }

    char num = digits[cur.size()];
    auto vChar = buff[num];
    for (int q = 0; q &amp;lt; vChar.size(); ++q)
    {
        cur.push_back(vChar[q]);
        letterCombinationsBT(digits, buff, vOut, cur);
        cur.pop_back();
    }
}

vector&amp;lt;string&amp;gt; letterCombinations(string digits) 
{
    map&amp;lt;char, vector&amp;lt;char&amp;gt;&amp;gt; buff;
    buff['2'] = { 'a', 'b', 'c' };
    buff['3'] = { 'd', 'e', 'f' };
    buff['4'] = { 'g', 'h', 'i' };
    buff['5'] = { 'j', 'k', 'l' };
    buff['6'] = { 'm', 'n', 'o' };
    buff['7'] = { 'p', 'q', 'r', 's'};
    buff['8'] = { 't', 'u', 'v' };
    buff['9'] = { 'w', 'x', 'y', 'z'};

    vector&amp;lt;string&amp;gt; vOut;
    string cur;
    letterCombinationsBT(digits, buff, vOut, cur);
    return vOut;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uVIkv/btsIRdCgHNx/I9KluJDsZg2G2JOht6FMfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uVIkv/btsIRdCgHNx/I9KluJDsZg2G2JOht6FMfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uVIkv/btsIRdCgHNx/I9KluJDsZg2G2JOht6FMfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuVIkv%2FbtsIRdCgHNx%2FI9KluJDsZg2G2JOht6FMfK%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;477&quot; height=&quot;360&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/487</guid>
      <comments>https://artofcom77.tistory.com/487#entry487comment</comments>
      <pubDate>Tue, 30 Jul 2024 22:03:55 +0900</pubDate>
    </item>
    <item>
      <title>[BackTrack][Medium] 131. Palindrome Partitioning</title>
      <link>https://artofcom77.tistory.com/486</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/palindrome-partitioning/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/palindrome-partitioning/description/&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;문자열이 주어질 때, palindrome한 sub string의 모음을 찾아라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQt8TS/btsISq8egIU/srt3MUzNtGR5YH1VxywC61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQt8TS/btsISq8egIU/srt3MUzNtGR5YH1VxywC61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQt8TS/btsISq8egIU/srt3MUzNtGR5YH1VxywC61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQt8TS%2FbtsISq8egIU%2Fsrt3MUzNtGR5YH1VxywC61%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;529&quot; height=&quot;345&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BackTrack의 원리 자체는 같지만, 구성과 진행 조건이 조금 다르다.&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;실제로 string을 cut 해 보며 이것이 palindrome인지 확인하고, 그럴 때만 진행해 나간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 조건은 대동소이 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1722260796485&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; bool IsPalindrome(const string&amp;amp; s)
{
    if (s.size() &amp;lt;= 1)
        return true;
    int mid = s.size() / 2;
    for (int q = 0; q &amp;lt; mid; ++q)
    {
        if (s[q] != s[s.size() - q - 1])
            return false;
    }
    return true;
}
void partitionBT(vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt;&amp;amp; vRet, vector&amp;lt;string&amp;gt;&amp;amp; vCur, const string&amp;amp; s, int idx)
{
    if (idx &amp;gt;= s.size())
    {
        vRet.push_back(vCur);
        return;
    }

    for (int q = idx; q &amp;lt; s.size(); ++q)
    {
        string cur = s.substr(idx, q-idx+1);
        if (IsPalindrome(cur))
        {
            // cout &amp;lt;&amp;lt; cur &amp;lt;&amp;lt; endl;
            vCur.push_back(cur);
            partitionBT(vRet, vCur, s, q+1);
            vCur.pop_back();
        }
    }
}

vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt; partition(string s) 
{
    vector&amp;lt;vector&amp;lt;string&amp;gt;&amp;gt; vRet;
    vector&amp;lt;string&amp;gt; vCur;
    partitionBT(vRet, vCur, s, 0);
    return vRet;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignLeft&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXUFPD/btsIPU4q5hn/Qi5ipFcffkOKkVPVmpAPe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXUFPD/btsIPU4q5hn/Qi5ipFcffkOKkVPVmpAPe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXUFPD/btsIPU4q5hn/Qi5ipFcffkOKkVPVmpAPe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXUFPD%2FbtsIPU4q5hn%2FQi5ipFcffkOKkVPVmpAPe1%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;441&quot; height=&quot;432&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/486</guid>
      <comments>https://artofcom77.tistory.com/486#entry486comment</comments>
      <pubDate>Mon, 29 Jul 2024 22:47:08 +0900</pubDate>
    </item>
    <item>
      <title>[BackTrack][Medium] 79. Word Search</title>
      <link>https://artofcom77.tistory.com/485</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/word-search/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/word-search/description/&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;m x n grid의 문자열이 주어진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 안에서 특정 word가 존재하는지 여부를 확인하라.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSkPun/btsINaeW5Cl/BKKQhrQGQ26pjfrM3xXv90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSkPun/btsINaeW5Cl/BKKQhrQGQ26pjfrM3xXv90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSkPun/btsINaeW5Cl/BKKQhrQGQ26pjfrM3xXv90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSkPun%2FbtsINaeW5Cl%2FBKKQhrQGQ26pjfrM3xXv90%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;416&quot; height=&quot;470&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맞는 단어를 하나 하나 확인해 가며 진행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 시작 지점이 모든 영역이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로직 자체는 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1721924106284&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool existBT(int idx, vector&amp;lt;bool&amp;gt;&amp;amp; vVisit, vector&amp;lt;vector&amp;lt;char&amp;gt;&amp;gt;&amp;amp; board, string word, int idxW)
{
    int H = board.size();
    int W = board[0].size();
    char target = word[idxW];
    int iy = idx / W;
    int ix = idx % W;
    char cur = board[iy][ix];
    if(vVisit[idx] || target!= cur)
        return false;

    vVisit[idx] = true;
    if(idxW+1 == word.size())
        return true;

    // left 
    if(ix &amp;gt; 0)
    {
        if(existBT(idx-1, vVisit, board, word, idxW+1))
            return true;
    }
    // right
    if(ix &amp;lt; W-1)
    {
        if(existBT(idx+1, vVisit, board, word, idxW+1))
            return true;
    }
    // up
    if(iy &amp;gt; 0)    
    {
        if(existBT(idx-W, vVisit, board, word, idxW+1))
            return true;
    }
    // down
    if(iy &amp;lt; H-1)  
    {   
        if(existBT(idx+W, vVisit, board, word, idxW+1))
            return true;
    }
    vVisit[idx] = false;
    return false;
}


bool exist(vector&amp;lt;vector&amp;lt;char&amp;gt;&amp;gt;&amp;amp; board, string word) 
{        
    vector&amp;lt;bool&amp;gt; vVisit;
    vVisit.resize(board.size()*board[0].size(), false);
    for(int q = 0; q &amp;lt; vVisit.size(); ++q)
    {
        if(existBT(q, vVisit, board, word, 0))
            return true;
    }
    return false;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dq5ngC/btsINehe22c/Jwkf1Xiy5cPZDflWqp53TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dq5ngC/btsINehe22c/Jwkf1Xiy5cPZDflWqp53TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dq5ngC/btsINehe22c/Jwkf1Xiy5cPZDflWqp53TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq5ngC%2FbtsINehe22c%2FJwkf1Xiy5cPZDflWqp53TK%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;387&quot; height=&quot;398&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/485</guid>
      <comments>https://artofcom77.tistory.com/485#entry485comment</comments>
      <pubDate>Fri, 26 Jul 2024 01:15:11 +0900</pubDate>
    </item>
    <item>
      <title>[BackTrack][Medium] 40. Combination Sum II</title>
      <link>https://artofcom77.tistory.com/484</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/combination-sum-ii/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/combination-sum-ii/description/&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;주어진 정수 배열의 합이 target이 되는 조합을 찾아라.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 정수에는 중복값이 있을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과에서 중복 결과를 제거하라.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MV3Om/btsINqV3nZA/mw2DFTA0WQ4bXO1aKxiFQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MV3Om/btsINqV3nZA/mw2DFTA0WQ4bXO1aKxiFQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MV3Om/btsINqV3nZA/mw2DFTA0WQ4bXO1aKxiFQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMV3Om%2FbtsINqV3nZA%2Fmw2DFTA0WQ4bXO1aKxiFQ1%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;423&quot; height=&quot;328&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;431&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;Subset II와 거의 같은 풀이의 문제.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 로직으로 중복을 제거 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1721920216445&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void combinationSum2BT(int idx, vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; vRet, vector&amp;lt;int&amp;gt;&amp;amp; vCur, vector&amp;lt;int&amp;gt;&amp;amp; candidates, int target)
{
    if(target &amp;lt;= 0)
    {
        if(target == 0)
            vRet.push_back(vCur);
        return;
    }

    for(int q = idx; q &amp;lt; candidates.size(); ++q)
    {
        if(q&amp;gt;idx &amp;amp;&amp;amp; candidates[q-1]==candidates[q])
            continue;

        vCur.push_back(candidates[q]);
        combinationSum2BT(q+1, vRet, vCur, candidates, target-candidates[q]);
        vCur.pop_back();
    }
}

vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; combinationSum2(vector&amp;lt;int&amp;gt;&amp;amp; candidates, int target) 
{
    sort(candidates.begin(), candidates.end());
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; vRet;
    vector&amp;lt;int&amp;gt; vCur;

    combinationSum2BT(0, vRet, vCur, candidates, target );
    return vRet;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/snRVp/btsINwWc7OZ/u4HPNA2rpwmfmB9aBW2SPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/snRVp/btsINwWc7OZ/u4HPNA2rpwmfmB9aBW2SPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/snRVp/btsINwWc7OZ/u4HPNA2rpwmfmB9aBW2SPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsnRVp%2FbtsINwWc7OZ%2Fu4HPNA2rpwmfmB9aBW2SPk%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;416&quot; height=&quot;314&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/484</guid>
      <comments>https://artofcom77.tistory.com/484#entry484comment</comments>
      <pubDate>Fri, 26 Jul 2024 00:10:24 +0900</pubDate>
    </item>
    <item>
      <title>[ ][BackTrack][Medium] 90. Subsets II</title>
      <link>https://artofcom77.tistory.com/481</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/subsets-ii/description/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/subsets-ii/description/&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;정수 배열이 주어 질 때, 가능한 한 모든 sub set을 찾아라.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 중복이 없도록 하라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CtJg7/btsILrTXGq8/J84EtipzQwa9jCare6icZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CtJg7/btsILrTXGq8/J84EtipzQwa9jCare6icZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CtJg7/btsILrTXGq8/J84EtipzQwa9jCare6icZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCtJg7%2FbtsILrTXGq8%2FJ84EtipzQwa9jCare6icZ1%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;485&quot; height=&quot;385&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;385&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;subset 1과 기본적으로 동일하지만, input에 중복값이 주어진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 결과에서는 주어진 input을 제외하고 다른 중복이 있으면 안된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1, 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2, 1 등은 허용하지 않는다.&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;1과 기본적으로 같은 흐름으로 하되,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과에 중복만 set으로 filter 해 보았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1721739576829&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void subsetsWithDupBT(int idx, vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; vRet, vector&amp;lt;int&amp;gt;&amp;amp; vCur, vector&amp;lt;int&amp;gt;&amp;amp; nums, unordered_set&amp;lt;string&amp;gt;&amp;amp; sBuff)
{
    string temp;
    for(int q = 0; q &amp;lt; vCur.size(); ++q)
        temp += (to_string(vCur[q]) + &quot;_&quot;);

    if(sBuff.find(temp) == sBuff.end())
    {
        vRet.push_back(vCur);
        sBuff.insert(temp);
    }
    if (idx &amp;gt;= nums.size())
        return;

    for (int q = idx; q &amp;lt; nums.size(); ++q)
    {
        vCur.push_back(nums[q]);
        subsetsWithDupBT(q + 1, vRet, vCur, nums, sBuff);
        vCur.pop_back();
    }
}

vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; subsetsWithDup(vector&amp;lt;int&amp;gt;&amp;amp; nums) 
{
    sort(nums.begin(), nums.end());
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; vRet;
    vector&amp;lt;int&amp;gt; vCur;
    unordered_set&amp;lt;string&amp;gt; sBuff;
    subsetsWithDupBT(0, vRet, vCur, nums, sBuff);
    return vRet;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqMdYg/btsIKc4t0mo/uLCnUmQpVQX1HMRZMYNZ60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqMdYg/btsIKc4t0mo/uLCnUmQpVQX1HMRZMYNZ60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqMdYg/btsIKc4t0mo/uLCnUmQpVQX1HMRZMYNZ60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqMdYg%2FbtsIKc4t0mo%2FuLCnUmQpVQX1HMRZMYNZ60%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;344&quot; height=&quot;369&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;509&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;하지만, string을 써서 set을 사용한 것이 조금 효율적이지 않게 느껴진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제의 backtrack이 값을 쌓아 나가는 과정을 유심히 살펴 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1, 2a, 2b, 3&amp;nbsp; - 2가 중복값이라고 가정하고, 구분을 위해 2a, 2b로 두었다.&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;위 backtrack 로직을 가동하면,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- backTrack Func idx&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[] - [1] - [1,2a] - [1,2a,2b] - [1,2a,2b,3]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - [1,2a,3]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- [&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1,2b&lt;/b&gt;&lt;/span&gt;]&amp;nbsp; - [1,2b,3]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -[2a]-[2a,2b]-[2a,2b,3]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-[2a,3]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -[&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2b&lt;/span&gt;&lt;/b&gt;]-[2b,3]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -[3]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 6&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;모든 back track으로 만들 수 있는 조합 가운데,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 붉은 색의 경우 중복으로 더 이상 진행 할 필요가 없음을 알았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는, 어떻게 저 경우는 걸러 내느냐 하는 것일 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보면, 추가하려는 대상값이 그 직전 값과 같고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;backTrack()에서 인자로 넘어오는 index가 for로 인해 증가할 때, 문제가 생기는 것을 알 수 있다.&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;따라서 if( iter_idx &amp;gt; backtrack_index &amp;amp;&amp;amp; nums[iter_idx-1] != nums[iter_idx])&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일때 더 이상 진행을 하지 않으면 될 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1721919346168&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void subsetsWithDupBT(int idx, vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; vRet, vector&amp;lt;int&amp;gt;&amp;amp; vCur, vector&amp;lt;int&amp;gt;&amp;amp; nums)
    {
        vRet.push_back(vCur);
        if (idx &amp;gt;= nums.size())
            return;
        
        for (int q = idx; q &amp;lt; nums.size(); ++q)
        {
            // 이 경우 중복이 생기므로, 제외한다.
            if(q&amp;gt;idx &amp;amp;&amp;amp; nums[q-1]==nums[q])
                continue;
            
            vCur.push_back(nums[q]);
            subsetsWithDupBT(q + 1, vRet, vCur, nums);
            vCur.pop_back();
        }
    }
    
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; subsetsWithDup(vector&amp;lt;int&amp;gt;&amp;amp; nums) 
    {
        sort(nums.begin(), nums.end());
        vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; vRet;
        vector&amp;lt;int&amp;gt; vCur;
        subsetsWithDupBT(0, vRet, vCur, nums);
        return vRet;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csst4R/btsIMwCF96A/KoNcJriE9FhTlASw8vjSG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csst4R/btsIMwCF96A/KoNcJriE9FhTlASw8vjSG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csst4R/btsIMwCF96A/KoNcJriE9FhTlASw8vjSG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcsst4R%2FbtsIMwCF96A%2FKoNcJriE9FhTlASw8vjSG1%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;414&quot; height=&quot;310&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Leetcode/NeetCode</category>
      <author>자전거통학</author>
      <guid isPermaLink="true">https://artofcom77.tistory.com/481</guid>
      <comments>https://artofcom77.tistory.com/481#entry481comment</comments>
      <pubDate>Tue, 23 Jul 2024 22:00:31 +0900</pubDate>
    </item>
  </channel>
</rss>