<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Smallsoft</title>
    <link>https://smallsoft.tistory.com/</link>
    <description>smallsoft 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 12 Apr 2026 14:07:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>smallsoft</managingEditor>
    <image>
      <title>Smallsoft</title>
      <url>https://tistory1.daumcdn.net/tistory/7330179/attach/9892297bb3eb4cb182179431a793ac81</url>
      <link>https://smallsoft.tistory.com</link>
    </image>
    <item>
      <title>백준 - 11054</title>
      <link>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-11054</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXY2i/btsK02rpm9M/57L8VUzhkXyWlnfmlgjvbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXY2i/btsK02rpm9M/57L8VUzhkXyWlnfmlgjvbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXY2i/btsK02rpm9M/57L8VUzhkXyWlnfmlgjvbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXY2i%2FbtsK02rpm9M%2F57L8VUzhkXyWlnfmlgjvbK%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;1386&quot; height=&quot;568&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11054&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제요약&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIS를 두번 적용시킴으로써 해결 가능한 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;바이토닉 수열은 처음에는 증가하다 특정수를 기준으로 감소하는 형태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;LIS를 통해 증가하는 수열에 대한 정보를 &lt;code&gt;dp[]&lt;/code&gt;에 담는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 배열을 다시 감소하는 수열을 구하는 LIS를 구하면 &lt;code&gt;dp[]&lt;/code&gt;에는 증가이후 감소하는 형태의 수열에 대한 길이를 구할 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소스코드&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

/*
증가 또는 감소세의 방향이 일직선이 수열을 바이토닉 수열이라고한다.
바이토닉 수열을 찾으시오
*/

int n, ans;
int arr[1005];
int dp[1005];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin &amp;gt;&amp;gt; n;
    for (int i = 0; i &amp;lt; n; i++) {
        cin &amp;gt;&amp;gt; arr[i];
        dp[i] = 1;
        for (int j = 0; j &amp;lt; i; j++) {
            if (arr[i] &amp;gt; arr[j]) {
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
    }
    for (int i = 0; i &amp;lt; n; i++) {
        for (int j = 0; j &amp;lt; i; j++) {
            if (arr[i] &amp;lt; arr[j]) {
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
        ans = max(ans, dp[i]);
    }
    cout &amp;lt;&amp;lt; ans;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>c++</category>
      <category>DP</category>
      <category>lis</category>
      <category>백준</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/35</guid>
      <comments>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-11054#entry35comment</comments>
      <pubDate>Thu, 28 Nov 2024 23:21:17 +0900</pubDate>
    </item>
    <item>
      <title>백준 - 2631</title>
      <link>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-2631</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLVqXV/btsKZQc7PwR/NLdKpcgVc2etv2EPGcAqOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLVqXV/btsKZQc7PwR/NLdKpcgVc2etv2EPGcAqOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLVqXV/btsKZQc7PwR/NLdKpcgVc2etv2EPGcAqOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLVqXV%2FbtsKZQc7PwR%2FNLdKpcgVc2etv2EPGcAqOk%2Fimg.png&quot; width=&quot;100%&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;a href=&quot;https://www.acmicpc.net/problem/2631&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;문제요약&lt;/h2&gt;
&lt;p&gt;n개의 수열(아이들)이 정렬되어있지않은 상태이다.&lt;/p&gt;
&lt;p&gt;이 수열을 정렬하기위해서 수를 옮겨야하는데 이때 최소한으로 옮기는 수를 출력하는 문제이다.&lt;/p&gt;
&lt;h2&gt;풀이&lt;/h2&gt;
&lt;p&gt;3개의 수열을 여러가지 형태로 가정해보겠다.&lt;br&gt;[1, 2, 3] 이 수열은 0번 움직이면 정렬된다.&lt;br&gt;[1, 3, 2] 이 수열은 3을 뒤로 보내서 1번에 정렬된다.&lt;br&gt;[3, 2, 1] 이 수열은 총 2번을 움직여야 정렬된다.&lt;/p&gt;
&lt;p&gt;이 규칙을보면 LIS를 구하는것과 연관이 있어 보인다.&lt;br&gt;[1, 2, 3]은 최장 증가 부분 수열이 [1, 2, 3]이고,&lt;br&gt;[1, 3, 2]은 [1, 2]가 나온다.&lt;br&gt;[3, 2, 1]은 [1] 하나만 나오게된다.&lt;/p&gt;
&lt;p&gt;풀이를 정리하면&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;위치를 옮기지 않아도 되는 아이들은 이미 오른차순을 만족하는 부분 수열이다.&lt;/li&gt;
&lt;li&gt;이 중 가장 긴 오름차순 부분 수열을 찾고, 이를 제외한 나머지 아이들을 옮겨야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;소스코드&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-c++&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

int n;
int board[1005];
int dp[1005];
int ans;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin &amp;gt;&amp;gt; n;
    for (int i = 0; i &amp;lt; n; i++) {
        cin &amp;gt;&amp;gt; board[i];
        dp[i] = 1;
        for (int j = 0; j &amp;lt; i; j++) {
            if (board[i] &amp;gt; board[j])
                dp[i] = max(dp[i], dp[j] + 1);
        }
        ans = max(ans, dp[i]);
    }
    cout &amp;lt;&amp;lt; n - ans;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>c++</category>
      <category>DP</category>
      <category>lis</category>
      <category>백준</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/34</guid>
      <comments>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-2631#entry34comment</comments>
      <pubDate>Wed, 27 Nov 2024 21:24:33 +0900</pubDate>
    </item>
    <item>
      <title>백준 - 1965</title>
      <link>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-1965</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB3gTa/btsKWKkVt7u/AeJkVdzNXOiqZaM93aEhWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB3gTa/btsKWKkVt7u/AeJkVdzNXOiqZaM93aEhWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB3gTa/btsKWKkVt7u/AeJkVdzNXOiqZaM93aEhWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB3gTa%2FbtsKWKkVt7u%2FAeJkVdzNXOiqZaM93aEhWK%2Fimg.png&quot; width=&quot;100%&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;br&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1965&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;문제요약&lt;/h2&gt;
&lt;p&gt;이 문제는 &lt;a href=&quot;https://namu.wiki/w/%EC%B5%9C%EC%9E%A5%20%EC%A6%9D%EA%B0%80%20%EB%B6%80%EB%B6%84%20%EC%88%98%EC%97%B4&quot;&gt;최장 증가 부분 수열&lt;/a&gt; 알고리즘에 관한 문제이다.&lt;br&gt;해당 알고리즘의 대표적인 예시이기 때문에 따로 이 문제를 못풀겠다면 해당 알고리즘을 공부해야한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;소스코드&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-c++&quot;&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

int n;
int board[1005];
int dp[1005];
int ans;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin &amp;gt;&amp;gt; n;
    for (int i = 0; i &amp;lt; n; i++) {
        cin &amp;gt;&amp;gt; board[i];
        dp[i] = 1;
        for (int j = 0; j &amp;lt; i; j++) {
            if (board[i] &amp;gt; board[j])
                dp[i] = max(dp[i], dp[j] + 1);
        }
        ans = max(ans, dp[i]);
    }
    cout &amp;lt;&amp;lt; ans;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>c++</category>
      <category>lis</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/33</guid>
      <comments>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-1965#entry33comment</comments>
      <pubDate>Tue, 26 Nov 2024 22:38:19 +0900</pubDate>
    </item>
    <item>
      <title>백준 - 9461</title>
      <link>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-9461</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/24B5D/btsKXgCIDaT/iI8NxaXEDUe33kUl5WvFg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/24B5D/btsKXgCIDaT/iI8NxaXEDUe33kUl5WvFg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/24B5D/btsKXgCIDaT/iI8NxaXEDUe33kUl5WvFg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F24B5D%2FbtsKXgCIDaT%2FiI8NxaXEDUe33kUl5WvFg1%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;1488&quot; height=&quot;564&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/9461&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나선형 모양으로 삼각형이 계속해서 추가될때, n번째 삼각형의 변의 길이를 구하는 문제이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나선형모양의 삼각형이 계속 추가된다해서 어렵게 생각할 필요없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;문제에서 P(10)의 예시를 주어지는데 이 수열이 어떻게 증가하는지 찾고 DP로 해결 하면되는 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;삼각형의 변의 길이는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9씩 증가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;증가하는걸 자세히보면 n번째는 (n - 2) + (n - 3) 만큼 증가한다는걸 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;처음 P(4)까지의 값을 세팅하고 이를 통해 P(100)까지 값을 구한뒤 P(n)을 출력해주면된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소스코드&lt;/h3&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

long long dp[105];
int n;

int main() {
    cin &amp;gt;&amp;gt; n;

    dp[0] = 1;
    dp[1] = 1;
    dp[2] = 1;
    dp[3] = 2;
    dp[4] = 2;
    for (int i = 5; i &amp;lt; 100; i++) {
        dp[i] = dp[i - 2] + dp[i - 3];
    }
    for (int i = 0; i &amp;lt; n; i++) {
        int tmp;
        cin &amp;gt;&amp;gt; tmp;
        cout &amp;lt;&amp;lt; dp[tmp - 1] &amp;lt;&amp;lt; '\n';
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>c++</category>
      <category>DP</category>
      <category>백준</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/32</guid>
      <comments>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-9461#entry32comment</comments>
      <pubDate>Mon, 25 Nov 2024 21:59:06 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 전력망을 둘로 나누기</title>
      <link>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%84%EB%A0%A5%EB%A7%9D%EC%9D%84-%EB%91%98%EB%A1%9C-%EB%82%98%EB%88%84%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxXdjQ/btsKRh9F5ca/yjtpkpp6lq9Nhdk6WLqas1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxXdjQ/btsKRh9F5ca/yjtpkpp6lq9Nhdk6WLqas1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxXdjQ/btsKRh9F5ca/yjtpkpp6lq9Nhdk6WLqas1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxXdjQ%2FbtsKRh9F5ca%2Fyjtpkpp6lq9Nhdk6WLqas1%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;1116&quot; height=&quot;384&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/86971&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n개(2&amp;lt;= n &amp;lt;= 100)의 노드가 트리형태로 연결되어있다.&lt;/p&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;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&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;결국 완전탐색을통해 wires를 하나씩 제거해가며 노드의 수를 계산해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드의 수를 계산하는건 dfs로 계산하였다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소스코드&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;

vector&amp;lt;int&amp;gt; v[105];
bool vist[105];

int recursion(int cur) {
    int count = 1;
    vist[cur] = 1;
    for (const auto &amp;amp;e : v[cur]) {
        if (vist[e]) continue;
        count += recursion(e);
    }
    return count;
}

int solution(int n, vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; wires) {
    int answer = n;
    for (const auto &amp;amp;e : wires) {
        v[e[0]].push_back(e[1]);
        v[e[1]].push_back(e[0]);
    }

    for (const auto &amp;amp;e : wires) {
        v[e[0]].erase(remove(v[e[0]].begin(), v[e[0]].end(), e[1]), v[e[0]].end());
        v[e[1]].erase(remove(v[e[1]].begin(), v[e[1]].end(), e[0]), v[e[1]].end());
        fill(vist, vist + 105, 0);
        vist[1] = 1;
        int tmp_size = recursion(1);
        answer = min(answer, abs(tmp_size - (n - tmp_size)));
        v[e[0]].push_back(e[1]);
        v[e[1]].push_back(e[0]);
    }
    return answer;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>c++</category>
      <category>오블완</category>
      <category>완전탐색</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/31</guid>
      <comments>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%84%EB%A0%A5%EB%A7%9D%EC%9D%84-%EB%91%98%EB%A1%9C-%EB%82%98%EB%88%84%EA%B8%B0#entry31comment</comments>
      <pubDate>Wed, 20 Nov 2024 23:53:00 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 소수찾기</title>
      <link>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%86%8C%EC%88%98%EC%B0%BE%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhqgvh/btsKNXLPStn/4yKEw3Ue2kk2v0vVbGKTIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhqgvh/btsKNXLPStn/4yKEw3Ue2kk2v0vVbGKTIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhqgvh/btsKNXLPStn/4yKEw3Ue2kk2v0vVbGKTIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdhqgvh%2FbtsKNXLPStn%2F4yKEw3Ue2kk2v0vVbGKTIK%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;938&quot; height=&quot;502&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42839&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자로 이루어진 문자열 number가 주어진다.&lt;/p&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;number의 길이는 1이상 7이하이다.&lt;/li&gt;
&lt;li&gt;number는 0부터 9까지의 숫자로 구성되어있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에라토스테네스의 체 알고리즘을 이용해서 1e8까지의 소수를 구한뒤,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;number를 dfs로 완전탐색을 돌리며 소수가 몇개인지 구하면된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소스코드&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;

bool arr[10000000];
int ans;
bool vist[10];

void primenum() {

    arr[0] = false;
    arr[1] = false;
    for (int i = 2; i &amp;lt; 10000000; ++i)
    {
        if (arr[i])
        {
            for (int j = i * 2; j &amp;lt; 10000000; j += i)
            {
                arr[j] = false;
            }
        }
    }
}

void recursion(string num, string nub) {
    if (arr[stoi(nub)]) {
        ans++;
        arr[stoi(nub)] = false;
    }
    for (int i = 0; i &amp;lt; num.size(); i++) {
        if (vist[i]) continue;
        vist[i] = true;
        recursion(num, nub + num[i]);
        vist[i] = false;
    }
}

int solution(string numbers) {
    fill(arr, arr + 10000000, 1);
    primenum();
    recursion(numbers, &quot;0&quot;);
    return ans;
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>c++</category>
      <category>소수</category>
      <category>오블완</category>
      <category>완전탐색</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/30</guid>
      <comments>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%86%8C%EC%88%98%EC%B0%BE%EA%B8%B0#entry30comment</comments>
      <pubDate>Tue, 19 Nov 2024 22:55:03 +0900</pubDate>
    </item>
    <item>
      <title>Krampoline 사용기(2)</title>
      <link>https://smallsoft.tistory.com/entry/Krampoline-%EC%82%AC%EC%9A%A9%EA%B8%B02</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;*카카오테크 부트캠프 1기로 교육과정중 경험했던 크램폴린에 대한 글입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 환경을 처음 공부해보고 이를 크램폴린에 적용하면서 겪은 여러 문제들을 두서없이 적은 글이다. 여러 문제들이 있었지만 결국 원하는 방향으로 테스트 서버를 구축하였다. 나중에 누군가 도움이 되었으면해서 글을 남긴다.&lt;/p&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;1. 배포는 어떻게?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://krampoline-help.goorm.io/&quot;&gt;크램폴린 공식 사용 설명서&lt;/a&gt;&lt;br /&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; 소스코드와 Dockerfile&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; 쿠버네티스의 동작을 정의해줄 k8s 디렉토리 및 그 안의 매니페스트파일들
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; 매니페스트 파일엔 Ingress 리소스를 꼭 정의해야줘야한다. 이는 외부 통신을 위해서이다, 이걸 정의안하면 크램폴린 터미널 안에서만 접속해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;동작순서&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Dockerfile로 소스코드를 Docker 이미지를 만들어 D2hub에 업로드한다.&lt;/li&gt;
&lt;li&gt;Kargo를 생성한다. kargo가 생성될때 k8s안에 있는 yaml파일들을 검사한다.&lt;/li&gt;
&lt;li&gt;배포버튼을 누르면 바로 배포된다!&lt;/li&gt;
&lt;/ol&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;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;2. 테스트 서버 구축하기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*이 파트를 읽기 전 참고할 글과 git저장소입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;%ED%85%8C%EC%8A%A4%ED%8A%B8%20%EC%84%9C%EB%B2%84%20%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98&quot;&gt;테스트 서버에 대한 내용&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/42kko/krampoline_test/tree/main&quot;&gt;k8s파일이 담긴 레포&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 팀같은 경우는 Ai서버를 단독으로 AWS에 배포되었기에 크램폴린에서는 배포되지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;아래는 테스트 서버를 위해 만든 레포들이다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;  개인 레포
  └─ k8s
      ├─ backend.yaml         
      ├─ frontend.yaml          
      ├─ ingress.yaml           
      ├─ kustomization.yaml   
      └─ mysql.yaml

  Frontend Repo
  ├─ Dockerfile
  ├─ Source
  └─ ...

  Backend Repow
  ├─ Dockerfile
  ├─ Source
  └─ ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://krampoline-help.goorm.io/ide/kakao-cloud/fullstack-application&quot;&gt;크램폴린 공식 설명서&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;차이점이 있다면 풀스택배포 가이드에서는 Nginx컨테이너를 통해 라우팅하지만, 내가 구성한 환경은 Ingress controller 통해 라우팅한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-0. 크램폴린 IDE 사용 팁&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크램폴린에서 &lt;code&gt;kubectl&lt;/code&gt;사용을 사용할때 기본 네임스페이스가 &amp;lt;사용자ID&amp;gt;-namespace 로 설정되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포시 파드들은 Default에 생성되니 네임스페이스를 default로 옮겨 놓으면 편하다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 현재 네임스페이스 확인
kubectl config view --minify | grep namespace

# 기본 네임스페이스를 default로 변경
kubectl config set-context --current --namespace=default &lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2-1. 환경변수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프론트엔드, 백엔드 서버에서 사용할 설정파일의 값들을 위해 쿠버네티스 configmap 리소스를 사용하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qhi3S/btsKLnwPQiG/E3xCmS0mIkryxGaw7IlfGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qhi3S/btsKLnwPQiG/E3xCmS0mIkryxGaw7IlfGK/img.png&quot; data-alt=&quot;Backend.yaml&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qhi3S/btsKLnwPQiG/E3xCmS0mIkryxGaw7IlfGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqhi3S%2FbtsKLnwPQiG%2FE3xCmS0mIkryxGaw7IlfGK%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;834&quot; height=&quot;544&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Backend.yaml&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;환경변수 사용을 위해 각 파트 개발자와 협력하여 중요한 토큰값, DB정보들을 환경변수를 통해 쓰게끔 코드를 부탁하였다.&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;1158&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VTM2F/btsKNqr3DnB/35aRzi0rtRBZwgDP3TWbS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VTM2F/btsKNqr3DnB/35aRzi0rtRBZwgDP3TWbS0/img.png&quot; data-alt=&quot;크램폴린 IDE에서 configmap 출력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VTM2F/btsKNqr3DnB/35aRzi0rtRBZwgDP3TWbS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVTM2F%2FbtsKNqr3DnB%2F35aRzi0rtRBZwgDP3TWbS0%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;1158&quot; height=&quot;174&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;크램폴린 IDE에서 configmap 출력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크램폴린 ide를 통해 환경변수를 생성하는 방법은 다음과 같다.&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;kubeclt create configmap &amp;lt;이름&amp;gt; --from-literal=&amp;lt;key&amp;gt;=value&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 --from으로 생성가능한 옵션들이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--from-env-file: 환경 변수 형식의 파일에서 데이터를 읽음.&lt;/li&gt;
&lt;li&gt;--from-file: 파일 또는 특정 키-파일 경로를 지정.&lt;/li&gt;
&lt;li&gt;--from-literal: 직접 key-value 값을 지정.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나같은 경우는 env 파일을 각 파트 개발자에게 받은뒤 이 파일을 크램폴린 IDE 복사한뒤 &lt;code&gt;--from-env-file&lt;/code&gt;옵션을 사용해 configmap을 생성했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2-2. 외부인터넷 연결&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크램폴린 내부에서 작동하고있는 컨테이너가 외부 인터넷과 연결이 필요한 경우가 있다. (우리 프로젝트의 경우는 Github서버에 연결이 필요했다.)&lt;/p&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://krampoline-help.goorm.io/ide/kakao-cloud/dkos/proxy&quot;&gt;크램폴린은 프록시주소&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;b&gt;NAT게이트웨이&lt;/b&gt;와는 다르기때문에 어플리케이션에 프록시를한다고 정의해줘야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리팀의 백엔드코드에서는 다음과같이 프록시를 설정해주었다.&lt;/p&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;@Configuration
public class RestTemplateConfig {

    @Bean
    @Profile({&quot;dev&quot;, &quot;prod&quot;})
    public RestTemplate restTemplateWithProxy() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();

        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(&quot;krmp-proxy.9rum.cc&quot;, 3128));
        factory.setProxy(proxy);

        return new RestTemplate(factory);
    }
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>클라우드/카테부</category>
      <category>krampoline</category>
      <category>오블완</category>
      <category>카카오테크부트캠프</category>
      <category>크램폴린</category>
      <category>티스토리챌린지</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/29</guid>
      <comments>https://smallsoft.tistory.com/entry/Krampoline-%EC%82%AC%EC%9A%A9%EA%B8%B02#entry29comment</comments>
      <pubDate>Mon, 18 Nov 2024 11:13:15 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 카펫</title>
      <link>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B9%B4%ED%8E%AB</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6fp1s/btsKMCNnypm/pHvc0I5VQSH5LihWT4H331/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6fp1s/btsKMCNnypm/pHvc0I5VQSH5LihWT4H331/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6fp1s/btsKMCNnypm/pHvc0I5VQSH5LihWT4H331/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6fp1s%2FbtsKMCNnypm%2FpHvc0I5VQSH5LihWT4H331%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;1126&quot; height=&quot;564&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42842&quot;&gt;문제해결&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;갈색 타일은 카펫의 외곽 부분을 차지하고, 노란색 타일은 내부를 자치한다.&lt;/li&gt;
&lt;li&gt;노란색 타일과 갈색 타일이 주어질때 가로와 세로의 길이를 반환하는 문제이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얻을 수 있는 정보를 종합해서 어떻게 풀어야할지 계획을 세워야했던 문제였다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;노란타일 + 갈색타입 = width * height&lt;/li&gt;
&lt;li&gt;문제의 조건에 따라 width &amp;gt;= height 이다.&lt;/li&gt;
&lt;li&gt;중앙에는 노란타일이 있으니, (width - 2) * (height - 2) = yellow&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 3가지 정보를 바탕으로 height를 통해 width를 얻고, height를 늘려가면서 조건에 만족하는 가로, 세로를 찾으면된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소스코드&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

/*
중앙에 위치해야하는 노랑
외곽에 위치해야하는 갈색

노랑과 갈색 수를 주어주면 가로 세로를 출력

- - - - - - 14,4   6, 3
- * * * * -
- - - - - -

- - - - 12,4  4, 4
- * * -
- * * -
- - - -

14 + 4 = 6 * 3
12 + 4 = 4 * 4

height 를 통해 width
height &amp;lt;= width
*/

vector&amp;lt;int&amp;gt; solution(int brown, int yellow) {
    vector&amp;lt;int&amp;gt; answer;
    for (int height = 3; height * height &amp;lt;= (brown + yellow); height++) {
        if ((brown + yellow) % height != 0) continue;
        int width = (brown + yellow) / height;
        if ((height - 2) * (width - 2) == yellow) {
            answer.push_back(width);
            answer.push_back(height);
            break;
        }
    }
    return answer;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <category>c++</category>
      <category>오블완</category>
      <category>완전탐색</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/28</guid>
      <comments>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B9%B4%ED%8E%AB#entry28comment</comments>
      <pubDate>Sun, 17 Nov 2024 23:09:59 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - 모의고사</title>
      <link>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nWyAL/btsKM3KaXaN/3Uu9yYwLhnBaAkMv2lVZTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nWyAL/btsKM3KaXaN/3Uu9yYwLhnBaAkMv2lVZTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nWyAL/btsKM3KaXaN/3Uu9yYwLhnBaAkMv2lVZTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnWyAL%2FbtsKM3KaXaN%2F3Uu9yYwLhnBaAkMv2lVZTK%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;609&quot; height=&quot;683&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;1254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot;&gt;문제링크&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수포자 1,2,3 은 다음과 같은 패턴을 반복한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수포자 1 = [1, 2, 3, 4, 5 ...]&lt;/li&gt;
&lt;li&gt;수포자 2 = ['2, 1' , '2, 3' , '2, 4' , '2, 5' , ...]&lt;/li&gt;
&lt;li&gt;수포자 3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5 ...&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답배열 answers 가 주어졌을때 수포자 1, 2, 3 중 가장 점수가 높은 사람을 리턴하면된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&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;code&gt;answers&lt;/code&gt;를 &lt;code&gt;0&lt;/code&gt;부터 &lt;code&gt;answers.length()&lt;/code&gt;까지 돌리면서 수포자의 점수를 체크하면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소스코드&lt;/h3&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

/*
1번 - 12345 ...
2번 - 21 22 23 24 25 ...
3번 - 33 11 22 44 55 ...
*/

int a1[10] = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5};
int a2[10] = {2, 1, 2, 3, 2, 4, 2, 5};
int a3[10] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

vector&amp;lt;int&amp;gt; solution(vector&amp;lt;int&amp;gt; answers) {
    vector&amp;lt;int&amp;gt; answer;
    int cnt1 = 0, cnt2 = 0, cnt3 = 0;
    for (int i = 0; i &amp;lt; answers.size(); i++) {
        if (a1[i % 10] == answers[i])
            cnt1++;
        if (a2[i % 8] == answers[i])
            cnt2++;
        if (a3[i % 10] == answers[i])
            cnt3++;
    }
    if (cnt1 &amp;gt;= cnt2 &amp;amp;&amp;amp; cnt1 &amp;gt;= cnt3)
        answer.push_back(1);
    if (cnt2 &amp;gt;= cnt1 &amp;amp;&amp;amp; cnt2 &amp;gt;= cnt3)
        answer.push_back(2);
    if (cnt3 &amp;gt;= cnt1 &amp;amp;&amp;amp; cnt3 &amp;gt;= cnt2)
        answer.push_back(3);
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm</category>
      <category>c++</category>
      <category>오블완</category>
      <category>완전탐색</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/27</guid>
      <comments>https://smallsoft.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC#entry27comment</comments>
      <pubDate>Sat, 16 Nov 2024 17:16:39 +0900</pubDate>
    </item>
    <item>
      <title>백준 - 1374</title>
      <link>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-1374</link>
      <description>&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-filename=&quot;스크린샷 2024-11-15 오후 10.34.48.png&quot; data-origin-width=&quot;2034&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8otwc/btsKMDdUZS5/1gJGVoG46JZzid9cLuQLZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8otwc/btsKMDdUZS5/1gJGVoG46JZzid9cLuQLZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8otwc/btsKMDdUZS5/1gJGVoG46JZzid9cLuQLZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8otwc%2FbtsKMDdUZS5%2F1gJGVoG46JZzid9cLuQLZK%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;2034&quot; height=&quot;492&quot; data-filename=&quot;스크린샷 2024-11-15 오후 10.34.48.png&quot; data-origin-width=&quot;2034&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1374&quot;&gt;문제링크&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1931&quot;&gt;비슷하지만 조금 더 쉬운 문제&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의실을 사용해야하는 강의 n에 대해 시작시간과 끝나는 시간을 입력으로 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서는 강의 번호에 대한 정보가 주어지지만 이 입력은 쓸모없는 정보이기에 안써도된다.&lt;/p&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개가 입력으로 들어왔을때 필요한 최소 강의실의 수를 출력하면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;겹치는 강의들이 최소한의 강의실로 배치될 수 있도록 효율적으로 관리해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효율적으로 관리하기위해서 시작시간을 기준으로 정렬한뒤 종료시간에 대한 정보를 자료구조에 넣고 이를 관리해서 강의실 재사용이 가능한지 판단하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자료구조에따른 시간복잡도&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 종료시간에 대한 정보를 vector에 넣고 이 백터를 처음부터 끝까지 봤는데 이건 시간복잡도가 꽤 길게나온다.&lt;/p&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-11-15 오후 11.08.44.png&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MIOHp/btsKL8SZaU3/dcmgKZzEAkLuLI75lDK5yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MIOHp/btsKL8SZaU3/dcmgKZzEAkLuLI75lDK5yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MIOHp/btsKL8SZaU3/dcmgKZzEAkLuLI75lDK5yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMIOHp%2FbtsKL8SZaU3%2FdcmgKZzEAkLuLI75lDK5yk%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;1426&quot; height=&quot;226&quot; data-filename=&quot;스크린샷 2024-11-15 오후 11.08.44.png&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소스코드&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;vector사용&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;

int n;
vector&amp;lt;pair&amp;lt;int, int&amp;gt; &amp;gt; v;
vector&amp;lt;int&amp;gt; ans;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin &amp;gt;&amp;gt; n;
    for (int i = 0; i &amp;lt; n; i++) {
        int tmp, tmp1;
        cin &amp;gt;&amp;gt; tmp &amp;gt;&amp;gt; tmp &amp;gt;&amp;gt; tmp1;
        v.push_back({tmp, tmp1});
    }
    sort(v.begin(), v.end(), [](pair&amp;lt;int, int&amp;gt; &amp;amp;a, pair&amp;lt;int, int&amp;gt; &amp;amp;b) {
        if (a.first == b.first)
            return a.second &amp;lt; b.second;
        return a.first &amp;lt; b.first;
    });

    ans.push_back(0);
    bool flag = 0;
    for (const auto &amp;amp;e : v) {
        flag = 0;
        for (int i = 0; i &amp;lt; ans.size(); i++) {
            if (e.first &amp;gt;= ans[i]) {
                ans[i] = e.second;
                flag = 1;
                break;
            }
        }
        if (!flag)
            ans.push_back(e.second);
    }
    cout &amp;lt;&amp;lt; ans.size();
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;우선순위 큐 사용&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;queue&amp;gt;
using namespace std;

int n;
vector&amp;lt;pair&amp;lt;int, int&amp;gt; &amp;gt; v;
vector&amp;lt;int&amp;gt; ans;
priority_queue&amp;lt;int, vector&amp;lt;int&amp;gt;, greater&amp;lt;int&amp;gt; &amp;gt; pq;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin &amp;gt;&amp;gt; n;
    for (int i = 0; i &amp;lt; n; i++) {
        int tmp, tmp1;
        cin &amp;gt;&amp;gt; tmp &amp;gt;&amp;gt; tmp &amp;gt;&amp;gt; tmp1;
        v.push_back({tmp, tmp1});
    }
    sort(v.begin(), v.end(), [](pair&amp;lt;int, int&amp;gt; &amp;amp;a, pair&amp;lt;int, int&amp;gt; &amp;amp;b) {
        if (a.first == b.first)
            return a.second &amp;lt; b.second;
        return a.first &amp;lt; b.first;
    });

    pq.push(v[0].second);
    for (int i = 1; i &amp;lt; n; i++) {
        if (v[i].first &amp;gt;= pq.top())
            pq.pop();
        pq.push(v[i].second);
    }
    cout &amp;lt;&amp;lt; pq.size();
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>c++</category>
      <category>greedy</category>
      <category>백준</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>smallsoft</author>
      <guid isPermaLink="true">https://smallsoft.tistory.com/26</guid>
      <comments>https://smallsoft.tistory.com/entry/%EB%B0%B1%EC%A4%80-1374#entry26comment</comments>
      <pubDate>Fri, 15 Nov 2024 23:13:11 +0900</pubDate>
    </item>
  </channel>
</rss>