<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>프로그래밍</title>
    <link>https://leesh111112.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 20 May 2026 23:15:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>has2</managingEditor>
    <item>
      <title>[BOJ/백준][Gold5] 19539 : 사과나무 (C++)</title>
      <link>https://leesh111112.tistory.com/507</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/19539&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/19539&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741807799&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;19539번: 사과나무&quot; data-og-description=&quot;첫 번째 줄에 모든 나무가 갊자가 바라는 높이가 되도록 물뿌리개를 통해 만들 수 있으면 &amp;ldquo;YES&amp;rdquo;를, 아니면 &amp;ldquo;NO&amp;rdquo;를 따옴표를 제외하고 출력한다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/19539&quot; data-og-url=&quot;https://www.acmicpc.net/problem/19539&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eFvNo/hyQtBIyZyg/FbsR4hrFUiPuzK7V95Kjt1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/19539&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/19539&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eFvNo/hyQtBIyZyg/FbsR4hrFUiPuzK7V95Kjt1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;19539번: 사과나무&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 줄에 모든 나무가 갊자가 바라는 높이가 되도록 물뿌리개를 통해 만들 수 있으면 &amp;ldquo;YES&amp;rdquo;를, 아니면 &amp;ldquo;NO&amp;rdquo;를 따옴표를 제외하고 출력한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Gold5 &lt;br /&gt;[유형]&amp;nbsp;수학 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;1과&amp;nbsp;2가&amp;nbsp;무조건&amp;nbsp;동시에&amp;nbsp;사용되어야&amp;nbsp;하므로,&amp;nbsp;전체&amp;nbsp;수열의&amp;nbsp;합이&amp;nbsp;3의&amp;nbsp;배수여야&amp;nbsp;하고 &lt;br /&gt;(전체&amp;nbsp;수열의&amp;nbsp;합&amp;nbsp;/&amp;nbsp;3)&amp;nbsp;=&amp;nbsp;(물뿌리개를&amp;nbsp;사용해야&amp;nbsp;하는&amp;nbsp;횟수)&amp;nbsp;=&amp;nbsp;(2를&amp;nbsp;사용해야&amp;nbsp;하는&amp;nbsp;횟수)&amp;nbsp;이므로 &lt;br /&gt;1~N&amp;nbsp;사과나무들의&amp;nbsp;2로&amp;nbsp;나눈&amp;nbsp;몫의&amp;nbsp;합이&amp;nbsp;위의&amp;nbsp;(2를&amp;nbsp;사용해야&amp;nbsp;하는&amp;nbsp;횟수)&amp;nbsp;이상이어야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;이것을&amp;nbsp;만족하지&amp;nbsp;못하는&amp;nbsp;조건은&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;표현이&amp;nbsp;가능합니다. &lt;br /&gt;cnt&amp;nbsp;:&amp;nbsp;2로&amp;nbsp;나눈&amp;nbsp;몫의&amp;nbsp;합 &lt;br /&gt;if(sum%3||cnt&amp;lt;sum/3)&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts(&quot;NO&quot;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0; &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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741835339&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
int N,a[100000],sum,cnt;
int main(){
    scanf(&quot;%d&quot;,&amp;amp;N);
    for(int i=0;i&amp;lt;N;i++) {
        scanf(&quot;%d&quot;,&amp;amp;a[i]);
        sum+=a[i];
        cnt+=a[i]/2;
    }
    if(sum%3||cnt&amp;lt;sum/3) {
        puts(&quot;NO&quot;);
        return 0;
    }
    puts(&quot;YES&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/19539.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/19539.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>수학</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/507</guid>
      <comments>https://leesh111112.tistory.com/507#entry507comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:37:13 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Gold5] 18428 : 감시 피하기 (C++)</title>
      <link>https://leesh111112.tistory.com/506</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/18428&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/18428&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741761775&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;18428번: 감시 피하기&quot; data-og-description=&quot;NxN&amp;nbsp;크기의 복도가 있다. 복도는 1x1&amp;nbsp;크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/18428&quot; data-og-url=&quot;https://www.acmicpc.net/problem/18428&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/OlwtA/hyQtqG1of1/kDedOF0Db4TOMHsXNQbXRK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/18428&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/18428&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/OlwtA/hyQtqG1of1/kDedOF0Db4TOMHsXNQbXRK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;18428번: 감시 피하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;NxN&amp;nbsp;크기의 복도가 있다. 복도는 1x1&amp;nbsp;크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;[난이도] Gold5 &lt;br /&gt;[유형]&amp;nbsp;브루트포스 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;N이&amp;nbsp;6이므로&amp;nbsp;최대&amp;nbsp;칸의&amp;nbsp;수는&amp;nbsp;36개입니다. &lt;br /&gt;장애물을&amp;nbsp;놓을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;경우의&amp;nbsp;수는&amp;nbsp;X인&amp;nbsp;칸을&amp;nbsp;vector에&amp;nbsp;저장해놓고&amp;nbsp;3중&amp;nbsp;for문을&amp;nbsp;이용해 &lt;br /&gt;구할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;세개의&amp;nbsp;위치의&amp;nbsp;X를&amp;nbsp;O로&amp;nbsp;바꾼&amp;nbsp;뒤&amp;nbsp;학생들이&amp;nbsp;검사를&amp;nbsp;피할&amp;nbsp;수&amp;nbsp;있는지&amp;nbsp;확인해보면&amp;nbsp;됩니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741768516&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;
int N,dy[4]={-1,1,0,0},dx[4]={0,0,1,-1};
char board[6][6];
vector&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; p,s;
bool check(){
    for(auto [y,x] : s){
        for(int i=0;i&amp;lt;4;i++){
            int cy=y,cx=x;
            while(cy&amp;gt;=0&amp;amp;&amp;amp;cx&amp;gt;=0&amp;amp;&amp;amp;cy&amp;lt;N&amp;amp;&amp;amp;cx&amp;lt;N&amp;amp;&amp;amp;board[cy][cx]!='O'){
                if(board[cy][cx]=='T') return false;
                cy+=dy[i],cx+=dx[i];
            }
        }   
    }
    return true;
}
int main(){
    scanf(&quot;%d&quot;,&amp;amp;N);
    for(int i=0;i&amp;lt;N;i++){
        for(int j=0;j&amp;lt;N;j++){
            scanf(&quot; %c&quot;,&amp;amp;board[i][j]);
            if(board[i][j]=='X') p.push_back({i,j});
            if(board[i][j]=='S') s.push_back({i,j});
        }
    }
    int M = p.size();
    for(int i=0;i&amp;lt;M-2;i++){
        for(int j=i+1;j&amp;lt;M-1;j++){
            for(int k=j+1;k&amp;lt;M;k++){
                auto [y1,x1] = p[i];
                auto [y2,x2] = p[j];
                auto [y3,x3] = p[k];
                board[y1][x1] = board[y2][x2] = board[y3][x3] = 'O';
                if(check()) {
                    puts(&quot;YES&quot;);
                    return 0;
                }
                board[y1][x1] = board[y2][x2] = board[y3][x3] = 'X';
            }
        }
    }
    puts(&quot;NO&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/18428.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/18428.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>브루트포스</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/506</guid>
      <comments>https://leesh111112.tistory.com/506#entry506comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:36:03 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Gold5] 15661 : 링크와 스타트 (C++)</title>
      <link>https://leesh111112.tistory.com/505</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15661&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/15661&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741696955&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;15661번: 링크와 스타트&quot; data-og-description=&quot;첫째 줄에 N(4 &amp;le; N &amp;le; 20)이 주어진다. 둘째&amp;nbsp;줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15661&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15661&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/csTzLq/hyQtzDYom0/erkKP0u8bKfOV0QmdvQDfK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15661&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15661&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/csTzLq/hyQtzDYom0/erkKP0u8bKfOV0QmdvQDfK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;15661번: 링크와 스타트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N(4 &amp;le; N &amp;le; 20)이 주어진다. 둘째&amp;nbsp;줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Gold5 &lt;br /&gt;[유형]&amp;nbsp;브루트포스 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;N&amp;nbsp;제한이&amp;nbsp;20밖에&amp;nbsp;되지&amp;nbsp;않기&amp;nbsp;때문에&amp;nbsp;모든&amp;nbsp;경우의&amp;nbsp;수를&amp;nbsp;해보는&amp;nbsp;브루트포스&amp;nbsp;알고리즘으로&amp;nbsp;해결이&amp;nbsp;가능합니다. &lt;br /&gt;재귀와&amp;nbsp;비트마스크를&amp;nbsp;이용한&amp;nbsp;방법이&amp;nbsp;가능한데,&amp;nbsp;비트마스크를&amp;nbsp;이용하였습니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741708044&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;cmath&amp;gt;
using namespace std;
int N,d[20][20],ans=9e8;
int main(){
    scanf(&quot;%d&quot;,&amp;amp;N);
    for(int i=0;i&amp;lt;N;i++)
        for(int j=0;j&amp;lt;N;j++) scanf(&quot;%d&quot;,&amp;amp;d[i][j]);
    for(int i=0;i&amp;lt;(1&amp;lt;&amp;lt;N);i++){
        vector&amp;lt;int&amp;gt; a(N);
        vector&amp;lt;int&amp;gt; p,q;
        for(int j=0;j&amp;lt;N;j++){
            if(i&amp;amp;(1&amp;lt;&amp;lt;j)) {
                p.push_back(j);
                a[j]=1;
            }
            else q.push_back(j);
        }
        if(p.empty() || q.empty()) continue;
        int t1=0,t2=0;
        for(int j=0;j&amp;lt;p.size();j++){
            for(int k=0;k&amp;lt;p.size();k++){
                t1+=d[p[j]][p[k]];
            }
        }
        for(int j=0;j&amp;lt;q.size();j++){
            for(int k=0;k&amp;lt;q.size();k++){
                t2+=d[q[j]][q[k]];
            }
        }   
        ans=min(ans,abs(t1-t2));
    }
    printf(&quot;%d&quot;,ans);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/15661.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/15661.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>브루트포스</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/505</guid>
      <comments>https://leesh111112.tistory.com/505#entry505comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:35:12 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Gold5] 17218 : 비밀번호 만들기 (C++)</title>
      <link>https://leesh111112.tistory.com/504</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17218&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/17218&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741621644&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;17218번: 비밀번호 만들기&quot; data-og-description=&quot;첫째 줄과 둘째 줄에 수형이가 눈을 감고 만든 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 길이는 최대&amp;nbsp;40자이다. 빈 문자열은 주어지지 않는다.&amp;nbsp;가장 긴 부분 문자열&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/17218&quot; data-og-url=&quot;https://www.acmicpc.net/problem/17218&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kI3p4/hyQtxzm8Fo/om22dcEY2GrcYxySrsDEr1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17218&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/17218&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kI3p4/hyQtxzm8Fo/om22dcEY2GrcYxySrsDEr1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;17218번: 비밀번호 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄과 둘째 줄에 수형이가 눈을 감고 만든 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 길이는 최대&amp;nbsp;40자이다. 빈 문자열은 주어지지 않는다.&amp;nbsp;가장 긴 부분 문자열&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Gold5 &lt;br /&gt;[유형]&amp;nbsp;DP &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;전형적인&amp;nbsp;LCS&amp;nbsp;(DP)&amp;nbsp;문제입니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741632481&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;
string A,B;
int dp[41][41];
pair&amp;lt;int,int&amp;gt; par[41][41];
int main(){
    cin &amp;gt;&amp;gt; A &amp;gt;&amp;gt; B;
    for(int i=0;i&amp;lt;A.size();i++){
        for(int j=0;j&amp;lt;B.size();j++){
            if(A[i]==B[j]) {
                dp[i+1][j+1] = dp[i][j]+1;
                par[i+1][j+1] = {i,j};
            }else{
                if(dp[i+1][j] &amp;gt; dp[i][j+1]){
                    dp[i+1][j+1] = dp[i+1][j];
                    par[i+1][j+1] = {i+1,j};
                }else{
                    dp[i+1][j+1] = dp[i][j+1];
                    par[i+1][j+1] = {i,j+1};                    
                }
            }
        }
    }
    string ans;
    int i=A.size(),j=B.size();
    while(i!=0&amp;amp;&amp;amp;j!=0){
        if(A[i-1] == B[j-1]) ans+=A[i-1];
        auto v = par[i][j];
        i=v.first;
        j=v.second;
    }
    reverse(ans.begin(),ans.end());
    cout &amp;lt;&amp;lt; ans;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/17218.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/17218.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>DP</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/504</guid>
      <comments>https://leesh111112.tistory.com/504#entry504comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:33:51 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Gold4] 2253 : 점프 (C++)</title>
      <link>https://leesh111112.tistory.com/503</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2253&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2253&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741555321&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2253번: 점프&quot; data-og-description=&quot;N(2 &amp;le; N &amp;le; 10,000)개의 돌들이 같은 간격으로 놓여 있다. 편의상 순서대로 1, 2, &amp;hellip;, N번 돌이라고 부르자. 당신은 현재 1번 돌 위에 있는데, 이 돌들 사이에서 점프를 하면서 N번째 돌로 이동을 하려 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2253&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2253&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Maxp0/hyQtAXag34/wMJhNRiu96gSpQJxn9hTK1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2253&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2253&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Maxp0/hyQtAXag34/wMJhNRiu96gSpQJxn9hTK1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2253번: 점프&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N(2 &amp;le; N &amp;le; 10,000)개의 돌들이 같은 간격으로 놓여 있다. 편의상 순서대로 1, 2, &amp;hellip;, N번 돌이라고 부르자. 당신은 현재 1번 돌 위에 있는데, 이 돌들 사이에서 점프를 하면서 N번째 돌로 이동을 하려&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Gold4 &lt;br /&gt;[유형]&amp;nbsp;DP &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;DP[n][k]&amp;nbsp;:&amp;nbsp;n&amp;nbsp;=&amp;nbsp;현재&amp;nbsp;돌의&amp;nbsp;번호,&amp;nbsp;k&amp;nbsp;=&amp;nbsp;이전에&amp;nbsp;점프한&amp;nbsp;칸의&amp;nbsp;개수 &lt;br /&gt;k는&amp;nbsp;최악의&amp;nbsp;겨우에도 &lt;br /&gt;1+2+3+4+...k=10000 &lt;br /&gt;이므로&amp;nbsp;(k+1)k/2&amp;nbsp;=&amp;nbsp;10000&amp;nbsp;의&amp;nbsp;식을&amp;nbsp;이용하면&amp;nbsp;대략&amp;nbsp;500은&amp;nbsp;절대&amp;nbsp;넘지&amp;nbsp;않으므로 &lt;br /&gt;배열을&amp;nbsp;DP[10000][500]&amp;nbsp;으로&amp;nbsp;설정하여&amp;nbsp;메모리&amp;nbsp;초과를&amp;nbsp;피하였씁니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741565424&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;
int N,M,dp[10001][500],a[10000],inf=9e8;
int sol(int n,int k){
    if(n==N) return 0;
    if(n&amp;gt;N||a[n]) return -1;

    int&amp;amp; ret = dp[n][k];
    if(ret!=-1) return ret;

    ret=inf;
    for(int i=k-1;i&amp;lt;=k+1;i++){
        if(i&amp;lt;1) continue;
        int v = sol(n+i,i);
        if(v==-1) continue;
        ret=min(ret,v);
    }
    if(ret==inf) return ret=-1;
    ret++;
    return ret;
}
int main(){
    scanf(&quot;%d%d&quot;,&amp;amp;N,&amp;amp;M);
    while(M--){
        int v;
        scanf(&quot;%d&quot;,&amp;amp;v);
        a[v]=1;
    }
    memset(dp,-1,sizeof(dp));
    int ans = sol(2,1);
    if(ans==-1) puts(&quot;-1&quot;);
    else printf(&quot;%d&quot;,ans+1);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/2253.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/2253.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>DP</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/503</guid>
      <comments>https://leesh111112.tistory.com/503#entry503comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:32:42 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Silver3] 16967 : 배열 복원하기 (C++)</title>
      <link>https://leesh111112.tistory.com/502</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16967&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/16967&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741466421&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;16967번: 배열 복원하기&quot; data-og-description=&quot;크기가 H &amp;times; W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) &amp;times; (W + Y)인 배열 B는 배열 A와&amp;nbsp;배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을&amp;nbsp;겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/16967&quot; data-og-url=&quot;https://www.acmicpc.net/problem/16967&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bthABO/hyQtyrvtDC/SLQPqhOUjadoio0agCSUk1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16967&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/16967&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bthABO/hyQtyrvtDC/SLQPqhOUjadoio0agCSUk1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;16967번: 배열 복원하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;크기가 H &amp;times; W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) &amp;times; (W + Y)인 배열 B는 배열 A와&amp;nbsp;배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을&amp;nbsp;겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Silver3 &lt;br /&gt;[유형]&amp;nbsp;구현 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;두&amp;nbsp;배열의&amp;nbsp;겹치는&amp;nbsp;부분은&amp;nbsp;Bi,j&amp;nbsp;=&amp;nbsp;Ai,j&amp;nbsp;+&amp;nbsp;Ai-X,j-Y&amp;nbsp;와&amp;nbsp;같으므로 &lt;br /&gt;겹치는&amp;nbsp;부분의&amp;nbsp;A배열의&amp;nbsp;값은&amp;nbsp;A[i][j]&amp;nbsp;=&amp;nbsp;B[i][j]&amp;nbsp;-&amp;nbsp;A[i-X][j-Y]&amp;nbsp;의&amp;nbsp;식으로&amp;nbsp;구할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;A[0][0]&amp;nbsp;부터&amp;nbsp;구하기&amp;nbsp;시작하면&amp;nbsp;A[i-X][j-Y]는&amp;nbsp;이미&amp;nbsp;구해져&amp;nbsp;있다는&amp;nbsp;것이&amp;nbsp;보장되기&amp;nbsp;때문에 &lt;br /&gt;위의&amp;nbsp;식에서&amp;nbsp;A[i-X][j-Y]이&amp;nbsp;없어서&amp;nbsp;못구하는&amp;nbsp;상황은&amp;nbsp;발생하지&amp;nbsp;않습니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741471742&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
int H,W,X,Y,B[700][700],A[300][300];
int main(){
    scanf(&quot;%d%d%d%d&quot;,&amp;amp;H,&amp;amp;W,&amp;amp;X,&amp;amp;Y);
    for(int i=0;i&amp;lt;H+X;i++)
        for(int j=0;j&amp;lt;W+Y;j++) scanf(&quot;%d&quot;,&amp;amp;B[i][j]);
    for(int i=0;i&amp;lt;H;i++){
        for(int j=0;j&amp;lt;W;j++){
            if(i&amp;gt;=X &amp;amp;&amp;amp; j&amp;gt;=Y) A[i][j] = B[i][j] - A[i-X][j-Y];
            else A[i][j] = B[i][j];
            printf(&quot;%d &quot;,A[i][j]);
        }
        puts(&quot;&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver3/16967.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver3/16967.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>구현</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/502</guid>
      <comments>https://leesh111112.tistory.com/502#entry502comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:31:06 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Silver2] 2210 : 숫자판 점프 (C++)</title>
      <link>https://leesh111112.tistory.com/501</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2210&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2210&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741384541&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2210번: 숫자판 점프&quot; data-og-description=&quot;111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2210&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2210&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ruqx7/hyQtncs4fX/iGB1RazRoKl9ZGaT8QhEj0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2210&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2210&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ruqx7/hyQtncs4fX/iGB1RazRoKl9ZGaT8QhEj0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2210번: 숫자판 점프&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Silver2 &lt;br /&gt;[유형]&amp;nbsp;브루트포스 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;재귀함수를&amp;nbsp;이용해서&amp;nbsp;가능한&amp;nbsp;모든&amp;nbsp;경우를&amp;nbsp;구해주면&amp;nbsp;됩니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741423451&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;set&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;cstring&amp;gt;
using namespace std;
int dy[4]={-1,1,0,0},dx[4]={0,0,1,-1},board[5][5],ans;
set&amp;lt;string&amp;gt; st;
void sol(int y,int x,string s){
    if(s.size()==6){
        st.insert(s);
        return;
    }
    for(int i=0;i&amp;lt;4;i++){
        int ny=y+dy[i],nx=x+dx[i];
        if(ny&amp;lt;0||nx&amp;lt;0||ny&amp;gt;=5||nx&amp;gt;=5) continue;
        char c = board[ny][nx]+'0';
        string t;
        t=s+c;
        sol(ny,nx,t);
    }
}
int main(){
    for(int i=0;i&amp;lt;5;i++)
        for(int j=0;j&amp;lt;5;j++) scanf(&quot;%d&quot;,&amp;amp;board[i][j]);
    for(int i=0;i&amp;lt;5;i++){
        for(int j=0;j&amp;lt;5;j++){
            string t;
            t+=(board[i][j]+'0');
            sol(i,j,t);
        }
    }
    printf(&quot;%d&quot;,st.size());
}&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;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/2210.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/2210.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>브루트포스</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/501</guid>
      <comments>https://leesh111112.tistory.com/501#entry501comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:30:27 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Silver2] 15664 : N과 M (10) (C++)</title>
      <link>https://leesh111112.tistory.com/500</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15664&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/15664&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741340790&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;15664번: N과 M (10)&quot; data-og-description=&quot;한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15664&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15664&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cHwWeu/hyQttwYi9S/ktQkqkKwjqSWUthU1xeCK1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15664&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15664&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cHwWeu/hyQttwYi9S/ktQkqkKwjqSWUthU1xeCK1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;15664번: N과 M (10)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Silver2 &lt;br /&gt;[유형]&amp;nbsp;백트래킹 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;오름차순으로&amp;nbsp;출력해야&amp;nbsp;하기&amp;nbsp;때문에&amp;nbsp;정렬&amp;nbsp;후에&amp;nbsp;백트래킹을&amp;nbsp;해주면&amp;nbsp;됩니다. &lt;br /&gt;중복&amp;nbsp;제거를&amp;nbsp;위해&amp;nbsp;set을&amp;nbsp;이용하였습니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741347217&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;set&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;
int N,M,a[8];
set&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; st;
vector&amp;lt;int&amp;gt; ans;
void sol(int n){
    if(n==N){
        if(ans.size()==M) {
            if(st.find(ans) == st.end()){
                st.insert(ans);
                for(auto k : ans) printf(&quot;%d &quot;,k);
                puts(&quot;&quot;);
            }
        }
        return;
    }
    ans.push_back(a[n]);
    sol(n+1);
    ans.pop_back();
    sol(n+1);
}
int main(){
    scanf(&quot;%d%d&quot;,&amp;amp;N,&amp;amp;M);
    for(int i=0;i&amp;lt;N;i++) scanf(&quot;%d&quot;,&amp;amp;a[i]);
    sort(a,a+N);
    sol(0);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/15664.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/15664.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>백트래킹</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/500</guid>
      <comments>https://leesh111112.tistory.com/500#entry500comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:29:01 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Silver2] 1138 : 한 줄로 서기 (C++)</title>
      <link>https://leesh111112.tistory.com/499</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1138&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1138&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741243592&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1138번: 한 줄로 서기&quot; data-og-description=&quot;첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1138&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1138&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hlYjW/hyQtCAG5J9/3dkZxfkkO9rB6w0j6bopCk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1138&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1138&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hlYjW/hyQtCAG5J9/3dkZxfkkO9rB6w0j6bopCk/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1138번: 한 줄로 서기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Silver2 &lt;br /&gt;[유형]&amp;nbsp;브루트포스 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;N&amp;nbsp;제한이&amp;nbsp;10밖에&amp;nbsp;되지&amp;nbsp;않기&amp;nbsp;때문에&amp;nbsp;v[N]&amp;nbsp;배열에&amp;nbsp;1부터&amp;nbsp;N까지&amp;nbsp;순서대로&amp;nbsp;저장&amp;nbsp;한&amp;nbsp;뒤 &lt;br /&gt;순열을&amp;nbsp;이용해&amp;nbsp;정답이&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;모든&amp;nbsp;경우의&amp;nbsp;수를&amp;nbsp;만들어&amp;nbsp;보며&amp;nbsp;조건을&amp;nbsp;만족하지는지&amp;nbsp;체크해주면&amp;nbsp;됩니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741248258&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;
int N,a[11],v[11];
bool check(){
    for(int i=1;i&amp;lt;=N;i++){
        int cnt=0;
        for(int j=1;j&amp;lt;i;j++){
            if(v[j]&amp;gt;v[i]) cnt++;
        }
        if(a[v[i]] != cnt) return 0;
    }
    return 1;
}
int main(){
    scanf(&quot;%d&quot;,&amp;amp;N);
    for(int i=1;i&amp;lt;=N;i++) {
        scanf(&quot;%d&quot;,&amp;amp;a[i]);
        v[i]=i;
    }
    do{
    }while(!check() &amp;amp;&amp;amp;next_permutation(v+1,v+1+N));
    for(int i=1;i&amp;lt;=N;i++) printf(&quot;%d &quot;,v[i]);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/1138.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/1138.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>브루트포스</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/499</guid>
      <comments>https://leesh111112.tistory.com/499#entry499comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:27:22 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ/백준][Silver2] 5397 : 키로거 (C++)</title>
      <link>https://leesh111112.tistory.com/498</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5397&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/5397&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667741179147&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;5397번: 키로거&quot; data-og-description=&quot;첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 &amp;le; L &amp;le; 1,000,000) 강산이가 백스페이스를 입&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/5397&quot; data-og-url=&quot;https://www.acmicpc.net/problem/5397&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zuzpo/hyQtyyhMlx/VuG9gSTRnilNinNxOnLvL0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/5397&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/5397&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zuzpo/hyQtyyhMlx/VuG9gSTRnilNinNxOnLvL0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;5397번: 키로거&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 &amp;le; L &amp;le; 1,000,000) 강산이가 백스페이스를 입&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Silver2 &lt;br /&gt;[유형]&amp;nbsp;리스트 &lt;br /&gt;&lt;br /&gt;[풀이] &lt;br /&gt;STL&amp;nbsp;list를&amp;nbsp;선언한&amp;nbsp;뒤&amp;nbsp;iterator를&amp;nbsp;커서로&amp;nbsp;취급하여&amp;nbsp;문제를&amp;nbsp;해결하면&amp;nbsp;됩니다. &lt;br /&gt;insert나&amp;nbsp;erase시&amp;nbsp;return&amp;nbsp;되는&amp;nbsp;iterator의&amp;nbsp;위치는&amp;nbsp;헷갈릴&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;몇가지&amp;nbsp;예시를&amp;nbsp;해보면서 &lt;br /&gt;iterator의&amp;nbsp;위치를&amp;nbsp;파악해야&amp;nbsp;합니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667741190611&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;list&amp;gt;
#include &amp;lt;string&amp;gt;
using namespace std;
int N;
string s;
int main(){
    cin &amp;gt;&amp;gt; N;
    while(N--){
        cin &amp;gt;&amp;gt; s;
        list&amp;lt;char&amp;gt; li;
        auto it = li.begin();
        for(auto c : s){
            if(c=='-'){
                if(it==li.begin()) continue;
                it--;
                it = li.erase(it);
            }else if(c=='&amp;lt;'){
                if(it==li.begin()) continue;
                it--;
            }else if(c=='&amp;gt;'){
                if(it!=li.end()) it++;
            }else{
                li.insert(it,c);
            }
        }
        for(auto v : li) cout &amp;lt;&amp;lt; v;
        cout &amp;lt;&amp;lt; &quot;\n&quot;;
    }
}&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;&lt;br /&gt;&lt;a href=&quot;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/5397.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/5397.cpp&lt;/a&gt;&lt;/p&gt;</description>
      <category>Problem-Solving/BOJ</category>
      <category>리스트</category>
      <author>has2</author>
      <guid isPermaLink="true">https://leesh111112.tistory.com/498</guid>
      <comments>https://leesh111112.tistory.com/498#entry498comment</comments>
      <pubDate>Sun, 6 Nov 2022 22:26:28 +0900</pubDate>
    </item>
  </channel>
</rss>