<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>응파카 성장일지</title>
    <link>https://eggmomo.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 22 Aug 2026 20:16:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>응파카</managingEditor>
    <image>
      <title>응파카 성장일지</title>
      <url>https://tistory1.daumcdn.net/tistory/5541775/attach/2a31ec5316c247e389698640dea7d275</url>
      <link>https://eggmomo.tistory.com</link>
    </image>
    <item>
      <title>[백준 2812] 크게 만들기</title>
      <link>https://eggmomo.tistory.com/111</link>
      <description>&lt;figure id=&quot;og_1690624352718&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;2812번: 크게 만들기&quot; data-og-description=&quot;N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2812&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2812&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/H0LC6/hyTtmOFbut/tNBkVLJW9pObqpCuRr9mfk/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/2812&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2812&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/H0LC6/hyTtmOFbut/tNBkVLJW9pObqpCuRr9mfk/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;2812번: 크게 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;N과&amp;nbsp;K&amp;nbsp;(1&amp;nbsp;&amp;le;&amp;nbsp;K&amp;nbsp;&amp;lt;&amp;nbsp;N&amp;nbsp;&amp;le;&amp;nbsp;500,000)&amp;nbsp;를&amp;nbsp;입력받는다 &lt;br /&gt;-&amp;nbsp;N&amp;nbsp;자리&amp;nbsp;숫자&amp;nbsp;input&amp;nbsp;을&amp;nbsp;입력받으면&amp;nbsp;그&amp;nbsp;중&amp;nbsp;K&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;되는&amp;nbsp;문제이다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp;아이디어&amp;nbsp;(문제&amp;nbsp;접근법)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-1] &lt;/b&gt;&lt;br /&gt;-&amp;nbsp;input&amp;nbsp;을&amp;nbsp;String&amp;nbsp;으로&amp;nbsp;입력받은&amp;nbsp;후에&amp;nbsp;char[]&amp;nbsp;sorted&amp;nbsp;=&amp;nbsp;&amp;nbsp;Arrays.sort&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;나열된다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이후&amp;nbsp;앞에서부터&amp;nbsp;(작은&amp;nbsp;숫자들부터)&amp;nbsp;K&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;경우&amp;nbsp;input&amp;nbsp;에서&amp;nbsp;더&amp;nbsp;앞에&amp;nbsp;있는&amp;nbsp;문자를&amp;nbsp;지운다 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-2] &lt;/b&gt;&lt;br /&gt;-&amp;nbsp;input&amp;nbsp;을&amp;nbsp;애초에&amp;nbsp;크기&amp;nbsp;N-K의&amp;nbsp;배열&amp;nbsp;arr&amp;nbsp;에&amp;nbsp;입력받아보자 &lt;br /&gt;-&amp;nbsp;int&amp;nbsp;count&amp;nbsp;=&amp;nbsp;K&amp;nbsp;로&amp;nbsp;할당하고 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;pointer&amp;nbsp;=&amp;nbsp;0&amp;nbsp;으로&amp;nbsp;할당하여 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;=&amp;nbsp;0&amp;nbsp;이&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;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;현재&amp;nbsp;포인터가&amp;nbsp;가리키는&amp;nbsp;수가&amp;nbsp;없으면&amp;nbsp;(0이면)&amp;nbsp;입력받은&amp;nbsp;수를&amp;nbsp;넣는다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.&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;&amp;nbsp;&amp;nbsp;2-1.&amp;nbsp;포인터가&amp;nbsp;가리키는&amp;nbsp;수가&amp;nbsp;더&amp;nbsp;크고,&amp;nbsp;count&amp;gt;0&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;2-2.&amp;nbsp;count&amp;lt;=0&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;&amp;nbsp;&amp;nbsp;2-3.&amp;nbsp;입력받은&amp;nbsp;수가&amp;nbsp;더&amp;nbsp;크고,&amp;nbsp;count&amp;gt;0&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;활용하는&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;사용하기로&amp;nbsp;했다 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-3]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;'[아이디어-2]의&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결'&amp;nbsp;의&amp;nbsp;해결방법&amp;nbsp;적용,&amp;nbsp;아래를&amp;nbsp;(0&amp;nbsp;&amp;lt;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;N-1)&amp;nbsp;만큼&amp;nbsp;반복한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;greedy&amp;nbsp;가&amp;nbsp;비어있지&amp;nbsp;않다면&amp;nbsp;반복하여&amp;nbsp;greedy.pop()&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;&amp;nbsp;&amp;nbsp;-&amp;nbsp;아래를&amp;nbsp;greedy&amp;nbsp;가&amp;nbsp;isEmpty&amp;nbsp;하지&amp;nbsp;않고&amp;nbsp;count&amp;nbsp;&amp;gt;=&amp;nbsp;0&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;greedy.pop()&amp;nbsp;가&amp;nbsp;더&amp;nbsp;크다면&amp;nbsp;다시&amp;nbsp;greedy.pop()을&amp;nbsp;push()&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;수가&amp;nbsp;더&amp;nbsp;크다면&amp;nbsp;greedy.pop()을&amp;nbsp;삭제&amp;nbsp;(이미&amp;nbsp;pop&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;&amp;nbsp;&amp;nbsp;-&amp;nbsp;count-- &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;입력받은&amp;nbsp;수를&amp;nbsp;push()&amp;nbsp;한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;만약&amp;nbsp;count&amp;nbsp;&amp;lt;=&amp;nbsp;0&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;greedy&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;해제 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;greedy&amp;nbsp;의&amp;nbsp;값을&amp;nbsp;StringBuffer&amp;nbsp;sb&amp;nbsp;에&amp;nbsp;옳겨&amp;nbsp;담는다 &lt;br /&gt;-&amp;nbsp;sb&amp;nbsp;를&amp;nbsp;앞에서부터&amp;nbsp;N-K&amp;nbsp;크기만큼&amp;nbsp;잘라서&amp;nbsp;출력한다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[아이디어-1]&amp;nbsp;-&amp;gt;&amp;nbsp;예제입력&amp;nbsp;3번에서&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;10&amp;nbsp;4&amp;nbsp;/n&amp;nbsp;4177252841&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;775841이&amp;nbsp;나와야&amp;nbsp;하지만&amp;nbsp;,&amp;nbsp;477584가&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;앞자리&amp;nbsp;수를&amp;nbsp;최대로&amp;nbsp;맞추는&amp;nbsp;것에&amp;nbsp;초점을&amp;nbsp;둬보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[아이디어-2]&amp;nbsp;-&amp;gt;&amp;nbsp;예제입력&amp;nbsp;3번에서&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;10&amp;nbsp;4&amp;nbsp;/n&amp;nbsp;4177252841&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;775841이&amp;nbsp;나와야&amp;nbsp;하지만&amp;nbsp;,&amp;nbsp;772841이&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;온전히&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이는&amp;nbsp;뒤에서&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;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;입력받은&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;public class BOJ_2812_크게_만들기 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(stk.nextToken());
        int K = Integer.parseInt(stk.nextToken());
        char[] input = br.readLine().toCharArray();

        Stack&amp;lt;Character&amp;gt; greedy = new Stack&amp;lt;&amp;gt;();

        int count = K;

        for(int i=0; i&amp;lt;N; i++){
            if(!greedy.isEmpty()){
                while(!greedy.isEmpty() &amp;amp;&amp;amp; count&amp;gt;0){
                    if(greedy.peek() &amp;lt; input[i]){
                        greedy.pop();
                        count--;
                    }else{
                        break;
                    }
                }
            }
            greedy.push(input[i]);

            if(count == 0) {
                for(int j=i+1; j&amp;lt;N; j++){
                    greedy.add(input[j]);
                }
                break;
            }
        }

        StringBuffer sb = new StringBuffer();

        int size = greedy.size();
        for(int i=0; i&amp;lt;size; i++){
            char pop = greedy.pop();
            sb.insert(0, pop);
        }
        sb.setLength(N-K);

        System.out.println(sb);
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/111</guid>
      <comments>https://eggmomo.tistory.com/111#entry111comment</comments>
      <pubDate>Sun, 28 May 2023 19:04:40 +0900</pubDate>
    </item>
    <item>
      <title>[백준 15724] 주지수</title>
      <link>https://eggmomo.tistory.com/110</link>
      <description>&lt;figure id=&quot;og_1690624249078&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;15724번: 주지수&quot; data-og-description=&quot;네모 왕국의 왕인 진경대왕은 왕국의 영토를 편하게 통치하기 위해서 1X1의 단위 구역을 여러 개 묶어서 하나의 거대 행정구역인 주지수(州地數, 마을의 땅을 셈)를 만들 예정이다. 진경대왕은 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15724&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15724&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jFxhy/hyTtmOE3ww/wKxojgANVB1q40YhBrDKe0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/ieLCu/hyTttG1Y6a/qETaU99cyEnu4k5SMaGkI1/img.jpg?width=852&amp;amp;height=224&amp;amp;face=0_0_852_224&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15724&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15724&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jFxhy/hyTtmOE3ww/wKxojgANVB1q40YhBrDKe0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480,https://scrap.kakaocdn.net/dn/ieLCu/hyTttG1Y6a/qETaU99cyEnu4k5SMaGkI1/img.jpg?width=852&amp;amp;height=224&amp;amp;face=0_0_852_224');&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;15724번: 주지수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네모 왕국의 왕인 진경대왕은 왕국의 영토를 편하게 통치하기 위해서 1X1의 단위 구역을 여러 개 묶어서 하나의 거대 행정구역인 주지수(州地數, 마을의 땅을 셈)를 만들 예정이다. 진경대왕은&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;제한시간&amp;nbsp;2초 &lt;br /&gt;-&amp;nbsp;N&amp;nbsp;x&amp;nbsp;M&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;시작행,&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;문제이다 &lt;br /&gt;&lt;br /&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;b&gt;2.&amp;nbsp;아이디어&amp;nbsp;(문제&amp;nbsp;접근법)&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-1] &lt;/b&gt;&lt;br /&gt;-&amp;nbsp;int&amp;nbsp;answer&amp;nbsp;를&amp;nbsp;만들어&amp;nbsp;범위&amp;nbsp;내의&amp;nbsp;합을&amp;nbsp;저장한다 &lt;br /&gt;-&amp;nbsp;for&amp;nbsp;시작행-1&amp;nbsp;~&amp;nbsp;끝행-1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;시작열-1&amp;nbsp;~&amp;nbsp;끝열-1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;answer&amp;nbsp;+=&amp;nbsp;해당&amp;nbsp;위치&amp;nbsp;값 &lt;br /&gt;&lt;b&gt;[아이디어-2] &lt;/b&gt;&lt;br /&gt;-&amp;nbsp;시간을&amp;nbsp;줄이는&amp;nbsp;방법 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.&amp;nbsp;(0,&amp;nbsp;0)&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;&amp;nbsp;&amp;nbsp;-&amp;gt;&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;gt;&amp;nbsp;sumArr[x][y]를&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;+&amp;nbsp;sunArr[x][y-1]&amp;nbsp;+&amp;nbsp;sumArr[x-1][y]&amp;nbsp;-&amp;nbsp;sumArr[x-1][y-1] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.&amp;nbsp;DP&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;br /&gt;&lt;br /&gt;이후&amp;nbsp;board&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;br /&gt;board&amp;nbsp;가&amp;nbsp;있을&amp;nbsp;때&amp;nbsp;-&amp;gt;&amp;nbsp;123328&amp;nbsp;KB&amp;nbsp;&amp;nbsp;864&amp;nbsp;ms &lt;br /&gt;board&amp;nbsp;가&amp;nbsp;없을&amp;nbsp;때&amp;nbsp;-&amp;gt;&amp;nbsp;120120&amp;nbsp;KB&amp;nbsp;&amp;nbsp;952&amp;nbsp;ms &lt;br /&gt;&lt;br /&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;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[아이디어-1]&amp;nbsp;-&amp;gt;&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;gt;&amp;nbsp;영토의&amp;nbsp;크기는&amp;nbsp;(1&amp;nbsp;&amp;le;&amp;nbsp;N,&amp;nbsp;M&amp;nbsp;&amp;le;&amp;nbsp;1,024)&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;gt;&amp;nbsp;다시&amp;nbsp;확인하니&amp;nbsp;직사각형&amp;nbsp;범위의&amp;nbsp;개수&amp;nbsp;K(1&amp;nbsp;&amp;le;&amp;nbsp;K&amp;nbsp;&amp;le;&amp;nbsp;100,000)&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;gt;&amp;nbsp;시간을&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;방법을&amp;nbsp;고안해봄&amp;nbsp;([아이디어-2]로) &lt;br /&gt;[아이디어-2]&amp;nbsp;-&amp;gt;&amp;nbsp;sumArr[0][0]을&amp;nbsp;입력받을&amp;nbsp;때&amp;nbsp;ArrayIndexOutOfBoundsException&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;sumArr&amp;nbsp;의&amp;nbsp;크기를&amp;nbsp;int[N+1][M+1]&amp;nbsp;로&amp;nbsp;입력받아&amp;nbsp;sum[1][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;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_15724_주지수 {
    static int[][] sumArr;

    static StringBuffer sb = new StringBuffer();

    static int N;
    static int M;

    public static int dp(int startRow, int startColumn, int endRow, int endColumn){
        return sumArr[endRow][endColumn] + sumArr[startRow-1][startColumn-1] - sumArr[endRow][startColumn-1] - sumArr[startRow-1][endColumn];
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk;

        stk = new StringTokenizer(br.readLine());
        N = Integer.parseInt(stk.nextToken());
        M = Integer.parseInt(stk.nextToken());
        sumArr = new int[N+1][M+1];

        for(int i=1; i&amp;lt;=N; i++){
            stk = new StringTokenizer(br.readLine());
            for(int j=1; j&amp;lt;=M; j++){
                sumArr[i][j] = Integer.parseInt(stk.nextToken()) + sumArr[i-1][j] + sumArr[i][j-1] - sumArr[i-1][j-1];
            }
        }

        int n = Integer.parseInt(br.readLine());
        for(int i=0; i&amp;lt;n; i++){
            stk = new StringTokenizer(br.readLine());
            sb.append(dp(Integer.parseInt(stk.nextToken()), Integer.parseInt(stk.nextToken()), Integer.parseInt(stk.nextToken()), Integer.parseInt(stk.nextToken())) + &quot;\n&quot;);
        }
        if(sb.length() &amp;gt; 0) {
            sb.deleteCharAt(sb.length() - 1);
        }
        System.out.println(sb);
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/110</guid>
      <comments>https://eggmomo.tistory.com/110#entry110comment</comments>
      <pubDate>Sat, 27 May 2023 23:11:42 +0900</pubDate>
    </item>
    <item>
      <title>[백준12865] 평범한 배낭</title>
      <link>https://eggmomo.tistory.com/109</link>
      <description>&lt;figure id=&quot;og_1690624151322&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;12865번: 평범한 배낭&quot; data-og-description=&quot;첫 줄에 물품의 수 N(1 &amp;le; N &amp;le; 100)과 준서가 버틸 수 있는 무게 K(1 &amp;le; K &amp;le; 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 &amp;le; W &amp;le; 100,000)와 해당 물건의 가치 V(0 &amp;le; V &amp;le; 1,000)&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/12865&quot; data-og-url=&quot;https://www.acmicpc.net/problem/12865&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EYEvx/hyTtj5t6At/5BUYPs2FfBetkc3cOM29P0/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/12865&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/12865&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EYEvx/hyTtj5t6At/5BUYPs2FfBetkc3cOM29P0/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;12865번: 평범한 배낭&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫 줄에 물품의 수 N(1 &amp;le; N &amp;le; 100)과 준서가 버틸 수 있는 무게 K(1 &amp;le; K &amp;le; 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 &amp;le; W &amp;le; 100,000)와 해당 물건의 가치 V(0 &amp;le; V &amp;le; 1,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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;물품의&amp;nbsp;수&amp;nbsp;N&amp;nbsp;만큼&amp;nbsp;각각&amp;nbsp;무게&amp;nbsp;W와&amp;nbsp;가치&amp;nbsp;V를&amp;nbsp;가진&amp;nbsp;물품을&amp;nbsp;입력받는다 &lt;br /&gt;-&amp;nbsp;준서가&amp;nbsp;견딜&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;무게를&amp;nbsp;K라고&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;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp;아이디어&amp;nbsp;(문제&amp;nbsp;접근법)&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-1] &lt;/b&gt;&lt;br /&gt;-&amp;nbsp;T&amp;nbsp;인스턴스를&amp;nbsp;생성해&amp;nbsp;저장할&amp;nbsp;배열&amp;nbsp;tArr[N]&amp;nbsp;를&amp;nbsp;만든다 &lt;br /&gt;-&amp;nbsp;각&amp;nbsp;무게에서의&amp;nbsp;최고&amp;nbsp;가치를&amp;nbsp;저장할&amp;nbsp;배열&amp;nbsp;maxValue[K+1]&amp;nbsp;를&amp;nbsp;만들어둔다 &lt;br /&gt;-&amp;nbsp;tList&amp;nbsp;순회,&amp;nbsp;그&amp;nbsp;안에서&amp;nbsp;maxValue&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;tList[i]를&amp;nbsp;maxValue[j]&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;gt;&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;최고&amp;nbsp;가치)&amp;nbsp;vs&amp;nbsp;(지금의&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&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;값(현재까진&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;V&amp;nbsp;가짐)&amp;nbsp;그대로&amp;nbsp;저장 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-2]&lt;/b&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;&quot;(지금의&amp;nbsp;무게&amp;nbsp;-&amp;nbsp;새로운&amp;nbsp;물건의&amp;nbsp;무게)&amp;nbsp;때의&amp;nbsp;최고&amp;nbsp;가치&amp;nbsp;+&amp;nbsp;새로운&amp;nbsp;물건의&amp;nbsp;가치&quot;&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;계속&amp;nbsp;누적하는&amp;nbsp;문제의&amp;nbsp;해결&amp;nbsp;방법을&amp;nbsp;찾던&amp;nbsp;도중 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://st-lab.tistory.com/141&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://st-lab.tistory.com/141&lt;/a&gt;&amp;nbsp;에서&amp;nbsp;maxValue&amp;nbsp;에&amp;nbsp;해당하는&amp;nbsp;dp&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;바꾸니&amp;nbsp;이전값이&amp;nbsp;누적되는&amp;nbsp;문제가&amp;nbsp;해결되었다.. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[아이디어-1]&amp;nbsp;-&amp;gt;&amp;nbsp;이미&amp;nbsp;담았던&amp;nbsp;값을&amp;nbsp;또&amp;nbsp;담는&amp;nbsp;문제&amp;nbsp;발생 &lt;br /&gt;-&amp;gt; 이를 해결하기 위해 담은 T를 체크하는 배열 생성하고 하다보니 코드가 너무 비효율적으로 길어져 원점으로 복귀&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 class=&quot;reasonml&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class T{
    int W, V;
    public T(int W, int V){
        this.W = W;
        this.V = V;
    }
}
public class BOJ_12865_평범한_배낭 {
    static T[] tArr;
    static int[] maxValue;
    static int N, K;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk;

        stk = new StringTokenizer(br.readLine());
        N = Integer.parseInt(stk.nextToken());
        tArr = new T[N];
        K = Integer.parseInt(stk.nextToken());
        maxValue = new int[K+1];

        // tArr 에 T 저장
        for(int i=0; i&amp;lt;N; i++){
            stk = new StringTokenizer(br.readLine());
            tArr[i] = new T(Integer.parseInt(stk.nextToken()), Integer.parseInt(stk.nextToken()));
        }

        maxValue[0] = 0;
        for(int i=0; i&amp;lt;N; i++){
            T t = tArr[i];
            int w = t.W;
            int v = t.V;
            for (int j = K; j-w &amp;gt;= 0; j--) {
                maxValue[j] = Math.max(maxValue[j], maxValue[j-w] + v);
            }
        }

        System.out.println(maxValue[K]);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/109</guid>
      <comments>https://eggmomo.tistory.com/109#entry109comment</comments>
      <pubDate>Thu, 25 May 2023 02:30:47 +0900</pubDate>
    </item>
    <item>
      <title>[백준 5557] 1학년</title>
      <link>https://eggmomo.tistory.com/108</link>
      <description>&lt;figure id=&quot;og_1690624062085&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;5557번: 1학년&quot; data-og-description=&quot;상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/5557&quot; data-og-url=&quot;https://www.acmicpc.net/problem/5557&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jEsX5/hyTtrPZgdJ/CMHGdMwbCx6hkki06WW5PK/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/5557&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/5557&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jEsX5/hyTtrPZgdJ/CMHGdMwbCx6hkki06WW5PK/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;5557번: 1학년&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;제한시간&amp;nbsp;1초 &lt;br /&gt;-&amp;nbsp;0~9&amp;nbsp;범위의&amp;nbsp;숫자&amp;nbsp;3~100&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;답으로, &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;등식을&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;된다 &lt;br /&gt;-&amp;nbsp;중간에&amp;nbsp;값이&amp;nbsp;0~20&amp;nbsp;범위를&amp;nbsp;벗어나면&amp;nbsp;올바르지&amp;nbsp;않은&amp;nbsp;공식으로&amp;nbsp;취급받는다 &lt;br /&gt;&lt;br /&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;b&gt;2.&amp;nbsp;아이디어&amp;nbsp;(문제&amp;nbsp;접근법)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-1] &lt;/b&gt;&lt;br /&gt;-&amp;nbsp;태블릿&amp;nbsp;그림을&amp;nbsp;통해&amp;nbsp;풀었다 &lt;br /&gt;-&amp;nbsp;arr[N]&amp;nbsp;에&amp;nbsp;입력받은&amp;nbsp;숫자들&amp;nbsp;기록 &lt;br /&gt;-&amp;nbsp;result&amp;nbsp;=&amp;nbsp;arr[N-1]&amp;nbsp;-&amp;gt;&amp;nbsp;{...}&amp;nbsp;=&amp;nbsp;arr[N-1] &lt;br /&gt;-&amp;nbsp;int[][]&amp;nbsp;dp&amp;nbsp;=&amp;nbsp;new&amp;nbsp;int[N-1][21] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;for(i&amp;nbsp;=&amp;nbsp;1~N-2) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(j&amp;nbsp;=&amp;nbsp;0~20) &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;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;i&amp;nbsp;=&amp;gt;&amp;nbsp;arr[i]&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;j&amp;nbsp;=&amp;gt;&amp;nbsp;를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있는지&amp;nbsp;순회하는&amp;nbsp;것 &lt;br /&gt;-&amp;nbsp;(1)&amp;nbsp;dp[0][arr[0]]&amp;nbsp;=&amp;nbsp;1&amp;nbsp;로&amp;nbsp;적용해놓고&amp;nbsp;시작한다&amp;nbsp;(어차피&amp;nbsp;처음은&amp;nbsp;무조건&amp;nbsp;하나) &lt;br /&gt;-&amp;nbsp;(2)&amp;nbsp;이후&amp;nbsp;for(i&amp;nbsp;=&amp;nbsp;1~N-2) &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;for(j&amp;nbsp;=&amp;nbsp;0~20) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;if(dp[i-1][j]&amp;nbsp;==&amp;nbsp;1)&amp;nbsp;이면&amp;nbsp;다음을&amp;nbsp;실행한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;0&amp;nbsp;&amp;lt;=&amp;nbsp;j-arr[i],&amp;nbsp;j+arr[i]&amp;nbsp;&amp;lt;=&amp;nbsp;20&amp;nbsp;인지&amp;nbsp;체크 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;문제&amp;nbsp;없는&amp;nbsp;경우&amp;nbsp;dp[i][j-arr[i]]&amp;nbsp;와&amp;nbsp;dp[i][j+arr[i]]&amp;nbsp;에&amp;nbsp;+=&amp;nbsp;dp[i-1][j] &lt;br /&gt;-&amp;nbsp;(3)&amp;nbsp;이를&amp;nbsp;반복 &lt;br /&gt;-&amp;nbsp;이차원&amp;nbsp;배열&amp;nbsp;DP[i][j]&amp;nbsp;의&amp;nbsp;값은&amp;nbsp;arr[i]&amp;nbsp;를&amp;nbsp;사용했을&amp;nbsp;때&amp;nbsp;j&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;DP[N-2][arr[N-1]]&amp;nbsp;를&amp;nbsp;출력하면&amp;nbsp;된다 &lt;br /&gt;&lt;br /&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;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;딱&amp;nbsp;봐도&amp;nbsp;DFS&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;99&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^98) &lt;br /&gt;[아이디어-1]&amp;nbsp;-&amp;gt;&amp;nbsp;답이&amp;nbsp;int&amp;nbsp;의&amp;nbsp;범위를&amp;nbsp;벗어나는&amp;nbsp;일이&amp;nbsp;생겨서&amp;nbsp;Long&amp;nbsp;자료형으로&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;pre class=&quot;angelscript&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_5557_1학년 {

    static int N;
    static int[] arr;
    static long[][] DP;
    static int result;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk;

        N = Integer.parseInt(br.readLine());
        arr = new int[N];
        DP = new long[N-1][21];

        stk = new StringTokenizer(br.readLine());
        for(int i=0; i&amp;lt;N; i++){
            arr[i] = Integer.parseInt(stk.nextToken());
        }
        result = arr[N-1];

        DP[0][arr[0]] = 1;
        for(int i=1; i&amp;lt;=N-2; i++){
            for(int j=0; j&amp;lt;=20; j++){
                if(DP[i-1][j] != 0){
                    int plus = j+arr[i];
                    int minus = j-arr[i];
                    if(0&amp;lt;=plus &amp;amp;&amp;amp; plus&amp;lt;=20){
                        DP[i][plus] += DP[i-1][j];
                    }
                    if(0&amp;lt;=minus &amp;amp;&amp;amp; minus&amp;lt;=20){
                        DP[i][minus] += DP[i-1][j];
                    }
                }
            }
        }
        System.out.println(DP[N-2][arr[N-1]]);
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/108</guid>
      <comments>https://eggmomo.tistory.com/108#entry108comment</comments>
      <pubDate>Wed, 24 May 2023 08:05:45 +0900</pubDate>
    </item>
    <item>
      <title>[백준 1695] 팰린드롬 만들기</title>
      <link>https://eggmomo.tistory.com/107</link>
      <description>&lt;figure id=&quot;og_1690623896356&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;1695번: 팰린드롬 만들기&quot; data-og-description=&quot;앞에서 뒤로 보나, 뒤에서 앞으로 보나 같은 수열을 팰린드롬 이라고 한다. 예를 들어 {1}, {1, 2, 1}, {1, 2, 2, 1}과 같은 수열은 팰린드롬 이지만, {1, 2, 3}, {1, 2, 3, 2} 등은 팰린드롬이 아니다. 한 수열&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1695&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1695&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWMLd5/hyTtmOEO65/6KHh2To37lAJtXxpuPdKj1/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/1695&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1695&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWMLd5/hyTtmOEO65/6KHh2To37lAJtXxpuPdKj1/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;1695번: 팰린드롬 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;앞에서 뒤로 보나, 뒤에서 앞으로 보나 같은 수열을 팰린드롬 이라고 한다. 예를 들어 {1}, {1, 2, 1}, {1, 2, 2, 1}과 같은 수열은 팰린드롬 이지만, {1, 2, 3}, {1, 2, 3, 2} 등은 팰린드롬이 아니다. 한 수열&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;제한시간&amp;nbsp;2초&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수열을 입력받고, 최소 몇 개의 숫자를 입력받으면 팰린드롬이 되는지 알아내는 문제&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp;아이디어&amp;nbsp;(문제&amp;nbsp;접근법)&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[아이디어-1] &lt;/b&gt;&lt;br /&gt;-&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;int[]&amp;nbsp;arr&amp;nbsp;=&amp;nbsp;new&amp;nbsp;int[N]&amp;nbsp;생성 &lt;br /&gt;-&amp;nbsp;다른&amp;nbsp;DP&amp;nbsp;문제들과&amp;nbsp;마찬가지로&amp;nbsp;연산&amp;nbsp;결과를&amp;nbsp;배열에&amp;nbsp;담기&amp;nbsp;위해&amp;nbsp;int[][]&amp;nbsp;DPArr&amp;nbsp;=&amp;nbsp;new&amp;nbsp;int[N][N]&amp;nbsp;를&amp;nbsp;생성 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;이후&amp;nbsp;DPArr&amp;nbsp;의&amp;nbsp;값들을&amp;nbsp;-1로&amp;nbsp;초기화한다 &lt;br /&gt;-&amp;nbsp;arr&amp;nbsp;의&amp;nbsp;왼쪽과&amp;nbsp;오른쪽&amp;nbsp;투&amp;nbsp;포인터&amp;nbsp;역할을&amp;nbsp;할&amp;nbsp;int&amp;nbsp;left&amp;nbsp;와&amp;nbsp;int&amp;nbsp;right&amp;nbsp;를&amp;nbsp;파라미터로&amp;nbsp;갖는 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DP(int&amp;nbsp;left,&amp;nbsp;int&amp;nbsp;right)&amp;nbsp;-&amp;gt;&amp;nbsp;DP(0,&amp;nbsp;N-1)&amp;nbsp;실행 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;다음&amp;nbsp;포인터란&amp;nbsp;left+1&amp;nbsp;과&amp;nbsp;right-1을&amp;nbsp;의미한다&amp;nbsp;(가운데로&amp;nbsp;범위를&amp;nbsp;좁혀감) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;if&amp;nbsp;(left&amp;nbsp;&amp;gt;=&amp;nbsp;right)&amp;nbsp;return&amp;nbsp;0; &lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;-&amp;nbsp;0&amp;nbsp;반환 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;if&amp;nbsp;(DPArr[left][right]&amp;nbsp;!=&amp;nbsp;-1)&amp;nbsp;return&amp;nbsp;DPArr[left][right]; &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;구했으면 &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;반환 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;if&amp;nbsp;(arr[left]&amp;nbsp;==&amp;nbsp;arr[right]) &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;같으면 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;DPArr[left][right]&amp;nbsp;=&amp;nbsp;DP(left+1,&amp;nbsp;right-1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;return&amp;nbsp;DP(left+1,&amp;nbsp;right-1); &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;가리키는&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;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;각&amp;nbsp;포인터가&amp;nbsp;가리키는&amp;nbsp;값이&amp;nbsp;다르면 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;DPArr[left][right]&amp;nbsp;=&amp;nbsp;Math.min(DP(left+1&amp;nbsp;,right)+1,&amp;nbsp;DP(left&amp;nbsp;,right-1)+1); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;return&amp;nbsp;Math.min(DP(left+1&amp;nbsp;,right)+1,&amp;nbsp;DP(left&amp;nbsp;,right-1)+1); &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;포인터&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이후&amp;nbsp;해당&amp;nbsp;위치의&amp;nbsp;DP&amp;nbsp;값중&amp;nbsp;더&amp;nbsp;작은&amp;nbsp;값&amp;nbsp;+&amp;nbsp;1&amp;nbsp;을&amp;nbsp;기록하고&amp;nbsp;반환&amp;nbsp;(숫자&amp;nbsp;하나를&amp;nbsp;추가하기&amp;nbsp;때문) &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결&lt;/b&gt; &lt;/h3&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;left,&amp;nbsp;right&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;경우 &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;&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;&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;나오는&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;참조&lt;/p&gt;
&lt;figure id=&quot;og_1690623949347&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[백준]1695번 팰린드롬 만들기 2️⃣&quot; data-og-description=&quot;\[백준]1695번 팰린드롬 만들기이전에 풀었던 문제인데 당시에 풀지 못해서 다른 사람 풀이를 봤었다. 다시 풀어보았다. 내 머리속에 항상 먼저 드는 생각은 투포인터이다....;.1\. left, right라는 두&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@ynoolee/%EB%B0%B1%EC%A4%801695%EB%B2%88-%ED%8C%B0%EB%A6%B0%EB%93%9C%EB%A1%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; data-og-url=&quot;https://velog.io/@ynoolee/백준1695번-팰린드롬-만들기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/C61OI/hyTtpYVao6/OyplTn6tPgoMvk3ZRnyMd1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/b3Iri2/hyTtiZOeqi/hVpnkDTzk2qI4dzCMty5D0/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot;&gt;&lt;a href=&quot;https://velog.io/@ynoolee/%EB%B0%B1%EC%A4%801695%EB%B2%88-%ED%8C%B0%EB%A6%B0%EB%93%9C%EB%A1%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@ynoolee/%EB%B0%B1%EC%A4%801695%EB%B2%88-%ED%8C%B0%EB%A6%B0%EB%93%9C%EB%A1%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/C61OI/hyTtpYVao6/OyplTn6tPgoMvk3ZRnyMd1/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/b3Iri2/hyTtiZOeqi/hVpnkDTzk2qI4dzCMty5D0/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[백준]1695번 팰린드롬 만들기 2️⃣&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;\[백준]1695번 팰린드롬 만들기이전에 풀었던 문제인데 당시에 풀지 못해서 다른 사람 풀이를 봤었다. 다시 풀어보았다. 내 머리속에 항상 먼저 드는 생각은 투포인터이다....;.1\. left, right라는 두&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&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;pre class=&quot;swift&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BOJ_1695_팰린드롬_만들기 {

    static int N;
    static int[] arr;
    static int[][] DPArr;

    static int DP(int left, int right){
        if(left &amp;gt;= right) return 0;
        if(DPArr[left][right] != -1) return DPArr[left][right];

        if(arr[left]==arr[right]){
            int min = DP(left+1, right-1);
            DPArr[left][right] = min;
            return min;
        }else{
            int min = Math.min(DP(left+1 ,right)+1, DP(left ,right-1)+1);
            DPArr[left][right] = min;
            return min;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk;

        N = Integer.parseInt(br.readLine());
        arr = new int[N];
        DPArr = new int[N][N];
        stk = new StringTokenizer(br.readLine());
        for(int i=0; i&amp;lt;N; i++) {
            arr[i] = Integer.parseInt(stk.nextToken());
            Arrays.fill(DPArr[i], -1);
        }

        System.out.println(DP(0, N-1));
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/107</guid>
      <comments>https://eggmomo.tistory.com/107#entry107comment</comments>
      <pubDate>Tue, 23 May 2023 18:44:24 +0900</pubDate>
    </item>
    <item>
      <title>[백준 11727] 2xn 타일링 2</title>
      <link>https://eggmomo.tistory.com/105</link>
      <description>&lt;figure id=&quot;og_1690623650072&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;11727번: 2&amp;times;n 타일링 2&quot; data-og-description=&quot;2&amp;times;n 직사각형을 1&amp;times;2, 2&amp;times;1과 2&amp;times;2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2&amp;times;17 직사각형을 채운 한가지 예이다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11727&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11727&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RULzk/hyTtnfDjlq/gbdwMhhKkuV3KH07kqTjlK/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/11727&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11727&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RULzk/hyTtnfDjlq/gbdwMhhKkuV3KH07kqTjlK/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;11727번: 2&amp;times;n 타일링 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2&amp;times;n 직사각형을 1&amp;times;2, 2&amp;times;1과 2&amp;times;2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2&amp;times;17 직사각형을 채운 한가지 예이다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약 &lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230730023223.png&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPaR1t/btsplp9QS0R/mgkErNMClIqg6XKicXGvsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPaR1t/btsplp9QS0R/mgkErNMClIqg6XKicXGvsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPaR1t/btsplp9QS0R/mgkErNMClIqg6XKicXGvsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPaR1t%2Fbtsplp9QS0R%2FmgkErNMClIqg6XKicXGvsK%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;398&quot; height=&quot;81&quot; data-filename=&quot;20230730023223.png&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림과 같이 주어진 2 x 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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp;아이디어&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;처음&amp;nbsp;아이디어 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;2Xn&amp;nbsp;직사각형을&amp;nbsp;1X2,&amp;nbsp;2X1,&amp;nbsp;2X2&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;1X2나,&amp;nbsp;2X2나&amp;nbsp;둘&amp;nbsp;다&amp;nbsp;가로&amp;nbsp;2칸을&amp;nbsp;차지한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[1]&amp;nbsp;-&amp;nbsp;가로의&amp;nbsp;길이&amp;nbsp;n을&amp;nbsp;길이&amp;nbsp;1과&amp;nbsp;2로&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;&amp;nbsp;&amp;nbsp;[2]&amp;nbsp;-&amp;nbsp;길이&amp;nbsp;2로&amp;nbsp;채우는&amp;nbsp;경우의&amp;nbsp;수는&amp;nbsp;1X2타일&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; 2X2타일&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;길이&amp;nbsp;2로&amp;nbsp;채운&amp;nbsp;부분의&amp;nbsp;수&amp;nbsp;T&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; 1X2와&amp;nbsp;2X2&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;경우를&amp;nbsp;적용시키면&amp;nbsp;된다.&amp;nbsp;(2^T) &lt;br /&gt;-&amp;gt;&amp;nbsp;답은&amp;nbsp;맞지만,&amp;nbsp;시간초과&amp;nbsp;발생 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;그림을&amp;nbsp;그려보니&amp;nbsp;이해가&amp;nbsp;쉬웠다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2Xn&amp;nbsp;타일&amp;nbsp;-&amp;gt;&amp;nbsp;2X(n+1)&amp;nbsp;로&amp;nbsp;변할&amp;nbsp;때 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이는&amp;nbsp;곧 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2Xn&amp;nbsp;타일&amp;nbsp;모든&amp;nbsp;경우에&amp;nbsp;2X1&amp;nbsp;타일&amp;nbsp;하나를&amp;nbsp;더한&amp;nbsp;경우&amp;nbsp;혹은 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2X(n-1)&amp;nbsp;타일&amp;nbsp;모든&amp;nbsp;경우에 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2X2&amp;nbsp;타일&amp;nbsp;혹은&amp;nbsp;1x2(2)&amp;nbsp;를&amp;nbsp;더한&amp;nbsp;경우이다 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;따라서 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr[n]&amp;nbsp;=&amp;nbsp;arr[n-1]&amp;nbsp;+&amp;nbsp;2*arr[n-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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결방식&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;처음&amp;nbsp;재귀를&amp;nbsp;활용한&amp;nbsp;DFS&amp;nbsp;방식으로&amp;nbsp;해결하려&amp;nbsp;했을&amp;nbsp;때&amp;nbsp; &lt;br /&gt;시간복잡도를&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_11727_2xn_타일링_2 {
    static int N;
    static int[] arr;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        arr = new int[N+1];

        arr[1] = 1;
        if(N&amp;gt;1) arr[2] = 3;

        for(int i=3; i&amp;lt;=N; i++){
            arr[i] = ( arr[i-1] + 2*arr[i-2] ) % 10007;
        }

        System.out.println(arr[N]);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/105</guid>
      <comments>https://eggmomo.tistory.com/105#entry105comment</comments>
      <pubDate>Sun, 21 May 2023 15:48:22 +0900</pubDate>
    </item>
    <item>
      <title>[백준 11055] 가장 큰 증가하는 부분수열</title>
      <link>https://eggmomo.tistory.com/104</link>
      <description>&lt;figure id=&quot;og_1690623572385&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;11055번: 가장 큰 증가하는 부분 수열&quot; data-og-description=&quot;수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11055&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11055&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tpLFZ/hyTtsH6BKy/tjOTIWuvo10UBgrq5Nklp1/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/11055&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11055&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tpLFZ/hyTtsH6BKy/tjOTIWuvo10UBgrq5Nklp1/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;11055번: 가장 큰 증가하는 부분 수열&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부분&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;갖는다 &lt;br /&gt;-&amp;nbsp;부분&amp;nbsp;수열이므로&amp;nbsp;연속되어야&amp;nbsp;할&amp;nbsp;필요가&amp;nbsp;없다 &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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp;아이디어&lt;/b&gt;&lt;/h3&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;index&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;방식으로&amp;nbsp;풀어보려&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결방식&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;입력값을&amp;nbsp;기록하는&amp;nbsp;배열&amp;nbsp;arr&amp;nbsp;과&amp;nbsp;부분수열의&amp;nbsp;합을&amp;nbsp;기록하는&amp;nbsp;배열&amp;nbsp;check&amp;nbsp;를&amp;nbsp;만든다 &lt;br /&gt;-&amp;nbsp;check&amp;nbsp;를&amp;nbsp;순회한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;이전의&amp;nbsp;arr&amp;nbsp;값들&amp;nbsp;중&amp;nbsp;arr[i]&amp;nbsp;보다&amp;nbsp;작은&amp;nbsp;값을&amp;nbsp;갖는&amp;nbsp;index&amp;nbsp;=&amp;nbsp;j1,&amp;nbsp;j2,&amp;nbsp;...&amp;nbsp;라고&amp;nbsp;할때 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;check[j]&amp;nbsp;의&amp;nbsp;값에&amp;nbsp;arr[i]&amp;nbsp;를&amp;nbsp;더한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_11055_가장_큰_증가하는_부분_수열 {

    static int[] arr;
    static int[] check;
    static int N;

    static void DP(int i){
        int max = 0;
        for(int j = 0; j&amp;lt;i; j++){
            if(arr[j]&amp;lt;arr[i] &amp;amp;&amp;amp; max&amp;lt;check[j]){
                max = check[j];
            }
        }
        check[i] = arr[i] + max;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());
        arr = new int[N];
        check = new int[N];

        StringTokenizer stk = new StringTokenizer(br.readLine());
        for(int i=0; i&amp;lt;N; i++){
            arr[i] = Integer.parseInt(stk.nextToken());
        }

        check[0] = arr[0];
        
        for(int i=1; i&amp;lt;N; i++){
            DP(i);
        }

        int answer = Integer.MIN_VALUE;
        for(int x : check){
            answer = Math.max(x, answer);
        }
        System.out.println(answer);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/104</guid>
      <comments>https://eggmomo.tistory.com/104#entry104comment</comments>
      <pubDate>Sat, 20 May 2023 10:51:41 +0900</pubDate>
    </item>
    <item>
      <title>[백준 2839] 설탕 배달</title>
      <link>https://eggmomo.tistory.com/103</link>
      <description>&lt;figure id=&quot;og_1690623448650&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;2839번: 설탕 배달&quot; data-og-description=&quot;상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2839&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2839&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Nsrq6/hyTrMBeqrG/LxHyUlb8KgRsC3ATYv6HP0/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/2839&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2839&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Nsrq6/hyTrMBeqrG/LxHyUlb8KgRsC3ATYv6HP0/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;2839번: 설탕 배달&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;사용&amp;nbsp;가능한&amp;nbsp;봉지는&amp;nbsp;5kg,&amp;nbsp;3kg의&amp;nbsp;두&amp;nbsp;종류이다 &lt;br /&gt;-&amp;nbsp;N&amp;nbsp;kg&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;-1을&amp;nbsp;출력한다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp;아이디어&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;처음&amp;nbsp;아이디어 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;N&amp;nbsp;kg&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;N/5&amp;nbsp;개수의&amp;nbsp;5kg&amp;nbsp;봉지와 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;N%5&amp;nbsp;/&amp;nbsp;3&amp;nbsp;개수의&amp;nbsp;3kg&amp;nbsp;봉지에&amp;nbsp;담으면&amp;nbsp;된다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;만약&amp;nbsp;N&amp;nbsp;이&amp;nbsp;5보다&amp;nbsp;작다면&amp;nbsp;-1을&amp;nbsp;출력한다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;만약&amp;nbsp;N%5&amp;nbsp;가&amp;nbsp;3으로&amp;nbsp;나누어&amp;nbsp;떨어지지&amp;nbsp;않는다면&amp;nbsp;-1을&amp;nbsp;출력한다 &lt;br /&gt;&lt;br /&gt;-&amp;gt;&amp;nbsp;하지만&amp;nbsp;6과&amp;nbsp;11의&amp;nbsp;경우&amp;nbsp;위의&amp;nbsp;방법이&amp;nbsp;먹히지&amp;nbsp;많는다 &lt;br /&gt;6의&amp;nbsp;경우&amp;nbsp;3kg&amp;nbsp;봉지&amp;nbsp;두&amp;nbsp;개를&amp;nbsp;쓰면&amp;nbsp;되고&amp;nbsp;11의&amp;nbsp;경우&amp;nbsp;5kg&amp;nbsp;봉지&amp;nbsp;하나와&amp;nbsp;3kg&amp;nbsp;봉지&amp;nbsp;두&amp;nbsp;개를&amp;nbsp;쓴다 &lt;br /&gt;단순히&amp;nbsp;5로&amp;nbsp;나눠서&amp;nbsp;해결되는&amp;nbsp;문제가&amp;nbsp;아니므로&amp;nbsp;우선&amp;nbsp;N에&amp;nbsp;따른&amp;nbsp;최소&amp;nbsp;봉지의&amp;nbsp;수를&amp;nbsp;정리하면&amp;nbsp;다음과&amp;nbsp;같다 &lt;br /&gt;&lt;br /&gt;N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;4&amp;nbsp;|&amp;nbsp;5&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;8&amp;nbsp;&amp;nbsp;9&amp;nbsp;|&amp;nbsp;10&amp;nbsp;11&amp;nbsp;12&amp;nbsp;13&amp;nbsp;14&amp;nbsp;|&amp;nbsp;15&amp;nbsp;16&amp;nbsp;17&amp;nbsp;18&amp;nbsp;19&amp;nbsp;... &lt;br /&gt;N/5&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;|&amp;nbsp;1&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;2&amp;nbsp;|&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;3 &lt;br /&gt;5kg&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;|&amp;nbsp;1&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;0&amp;nbsp;|&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;1&amp;nbsp;|&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;2&amp;nbsp;... &lt;br /&gt;3kg&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;0&amp;nbsp;|&amp;nbsp;0&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;3&amp;nbsp;|&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;3&amp;nbsp;|&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;3&amp;nbsp;... &lt;br /&gt;봉지&amp;nbsp;-1&amp;nbsp;-1&amp;nbsp;&amp;nbsp;1&amp;nbsp;-1&amp;nbsp;|&amp;nbsp;1&amp;nbsp;&amp;nbsp;2&amp;nbsp;-1&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;3&amp;nbsp;|&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;4&amp;nbsp;|&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;5&amp;nbsp;... &lt;br /&gt;&lt;br /&gt;3&amp;nbsp;&amp;lt;=&amp;nbsp;N&amp;nbsp;&amp;lt;=&amp;nbsp;5000&amp;nbsp;이므로&amp;nbsp;3&amp;nbsp;아래는&amp;nbsp;고려하지&amp;nbsp;말자 &lt;br /&gt;그러면&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;규칙이&amp;nbsp;나온다 &lt;br /&gt;&lt;br /&gt;N/5&amp;nbsp;-&amp;gt;&amp;nbsp;N/5 &lt;br /&gt;N/5+1&amp;nbsp;-&amp;gt;&amp;nbsp;N/5&amp;nbsp;+&amp;nbsp;1 &lt;br /&gt;N/5+2&amp;nbsp;-&amp;gt;&amp;nbsp;N/5&amp;nbsp;+&amp;nbsp;2 &lt;br /&gt;N/5+3&amp;nbsp;-&amp;gt;&amp;nbsp;N/5&amp;nbsp;+&amp;nbsp;1 &lt;br /&gt;N/5+4&amp;nbsp;-&amp;gt;&amp;nbsp;N/5&amp;nbsp;+&amp;nbsp;2 &lt;br /&gt;&lt;br /&gt;예외&amp;nbsp;:&amp;nbsp;4,&amp;nbsp;7&amp;nbsp;-&amp;gt;&amp;nbsp;-1 &lt;br /&gt;&lt;br /&gt;즉&amp;nbsp;이를&amp;nbsp;분류하면&amp;nbsp;다음과&amp;nbsp;같다 &lt;br /&gt;-&amp;nbsp;5의&amp;nbsp;배수인&amp;nbsp;경우 &lt;br /&gt;-&amp;nbsp;5의&amp;nbsp;배수+1&amp;nbsp;or&amp;nbsp;5의&amp;nbsp;배수+3 &lt;br /&gt;-&amp;nbsp;5의&amp;nbsp;배수+2&amp;nbsp;or&amp;nbsp;5의&amp;nbsp;배수+4 &lt;br /&gt;-&amp;nbsp;4,&amp;nbsp;7인&amp;nbsp;경우 &lt;br /&gt;&lt;br /&gt;각각에&amp;nbsp;해당하는&amp;nbsp;값을&amp;nbsp;출력해주면&amp;nbsp;된다 &lt;br /&gt;-&amp;nbsp;4,&amp;nbsp;7인&amp;nbsp;경우를&amp;nbsp;먼저&amp;nbsp;조건문으로&amp;nbsp;걸면&amp;nbsp;된다 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결방식&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;처음에&amp;nbsp;모든&amp;nbsp;경우의&amp;nbsp;수를&amp;nbsp;구해야&amp;nbsp;하나&amp;nbsp;고민했지만 &lt;br /&gt;먼저&amp;nbsp;풀어보았던&amp;nbsp;BOJ_11727_2xn_타일링_2&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;경우여서&amp;nbsp;근본적인&amp;nbsp;해결&amp;nbsp;방법은&amp;nbsp;아닌&amp;nbsp;것&amp;nbsp;같다 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;각&amp;nbsp;N을&amp;nbsp;5씩&amp;nbsp;나누어서&amp;nbsp;고려하면&amp;nbsp;당연하게&amp;nbsp;나오는&amp;nbsp;규칙이었다 &lt;br /&gt;5의&amp;nbsp;배수로&amp;nbsp;떨어지는&amp;nbsp;경우&amp;nbsp;:&amp;nbsp;N/5&amp;nbsp;만큼의&amp;nbsp;봉지가&amp;nbsp;필요 &lt;br /&gt;N%5&amp;nbsp;=&amp;nbsp;3&amp;nbsp;인&amp;nbsp;경우&amp;nbsp;:&amp;nbsp;N/5+1&amp;nbsp;만큼의&amp;nbsp;봉지가&amp;nbsp;필요&amp;nbsp;(3kg&amp;nbsp;봉지&amp;nbsp;하나만&amp;nbsp;추가하면&amp;nbsp;되기&amp;nbsp;때문) &lt;br /&gt;N%5&amp;nbsp;=&amp;nbsp;1&amp;nbsp;인&amp;nbsp;경우&amp;nbsp;:&amp;nbsp;6,&amp;nbsp;11&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;&amp;nbsp;&amp;nbsp;N=6이면&amp;nbsp;3kg&amp;nbsp;짜리&amp;nbsp;2개를&amp;nbsp;필요로&amp;nbsp;하고,&amp;nbsp;이후로&amp;nbsp;5씩&amp;nbsp;증가 &lt;br /&gt;N%5&amp;nbsp;=&amp;nbsp;4&amp;nbsp;인&amp;nbsp;경우&amp;nbsp;:&amp;nbsp;4,&amp;nbsp;9,&amp;nbsp;13&amp;nbsp;...&amp;nbsp;인데&amp;nbsp;4는&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;&amp;nbsp;&amp;nbsp;N=9이면&amp;nbsp;3kg&amp;nbsp;짜리&amp;nbsp;3개를&amp;nbsp;필요로&amp;nbsp;하고,&amp;nbsp;이후로&amp;nbsp;5씩&amp;nbsp;증가 &lt;br /&gt;N%5&amp;nbsp;=&amp;nbsp;2&amp;nbsp;인&amp;nbsp;경우&amp;nbsp;:&amp;nbsp;7,&amp;nbsp;12,&amp;nbsp;17&amp;nbsp;...&amp;nbsp;인데&amp;nbsp;7은&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;&amp;nbsp;&amp;nbsp;N=12이면&amp;nbsp;3kg&amp;nbsp;짜리&amp;nbsp;4개를&amp;nbsp;필요로&amp;nbsp;하고,&amp;nbsp;이후로&amp;nbsp;5씩&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;pre class=&quot;angelscript&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_2839_설탕_배달 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        if(N==4 || N==7){
            System.out.println(-1);
        }else if(N%5 == 0){
            System.out.println(N/5);
        }else if(N%5 == 1 || N%5 == 3){
            System.out.println(N/5 + 1);
        }else if(N%5 == 2 || N%5 == 4){
            System.out.println(N/5 + 2);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/103</guid>
      <comments>https://eggmomo.tistory.com/103#entry103comment</comments>
      <pubDate>Thu, 18 May 2023 19:37:51 +0900</pubDate>
    </item>
    <item>
      <title>[백준 1106] 호텔</title>
      <link>https://eggmomo.tistory.com/102</link>
      <description>&lt;figure id=&quot;og_1690623279432&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;1106번: 호텔&quot; data-og-description=&quot;첫째 줄에 C와 형택이가 홍보할 수 있는 도시의 개수 N이 주어진다. C는 1,000보다 작거나 같은 자연수이고, N은 20보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 각 도시에서 홍보할 때 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1106&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1106&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/um0NV/hyTtlPK8hX/t6k7m2xcqyl2BbU3ulKeHk/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/1106&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1106&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/um0NV/hyTtlPK8hX/t6k7m2xcqyl2BbU3ulKeHk/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;1106번: 호텔&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 C와 형택이가 홍보할 수 있는 도시의 개수 N이 주어진다. C는 1,000보다 작거나 같은 자연수이고, N은 20보다 작거나 같은 자연수이다. 둘째 줄부터 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp;문제&amp;nbsp;요약&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;C&amp;nbsp;이상의&amp;nbsp;고객을&amp;nbsp;늘려야&amp;nbsp;하고&amp;nbsp;N&amp;nbsp;개의&amp;nbsp;도시가&amp;nbsp;있을&amp;nbsp;때 &lt;br /&gt;-&amp;nbsp;N&amp;nbsp;개의&amp;nbsp;도시들&amp;nbsp;각각에&amp;nbsp;대한&amp;nbsp;홍보&amp;nbsp;비용&amp;nbsp;cost&amp;nbsp;와 &lt;br /&gt;-&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;고객의&amp;nbsp;수&amp;nbsp;customer&amp;nbsp;를&amp;nbsp;입력받는다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;각각의&amp;nbsp;도시는&amp;nbsp;cost&amp;nbsp;의&amp;nbsp;정수배&amp;nbsp;만큼만&amp;nbsp;홍보&amp;nbsp;가능하다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;customer&amp;nbsp;은&amp;nbsp;최대&amp;nbsp;100이다 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp;아이디어&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&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;가&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;C&amp;nbsp;만큼의/C를&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;중&amp;nbsp;가장&amp;nbsp;적은&amp;nbsp;비용으로&amp;nbsp;C&amp;nbsp;이상이&amp;nbsp;되는&amp;nbsp;도시에&amp;nbsp;홍보하기 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;힌트&amp;nbsp;참고&amp;nbsp;후 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;적어도&amp;nbsp;C명의&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;C명&amp;nbsp;얻는&amp;nbsp;비용&amp;nbsp;&amp;gt;&amp;nbsp;C+n명&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;가능하다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;이런&amp;nbsp;경우&amp;nbsp;C+n&amp;nbsp;명을&amp;nbsp;얻는&amp;nbsp;것이&amp;nbsp;답에&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;customer&amp;nbsp;는&amp;nbsp;최대&amp;nbsp;100이라는&amp;nbsp;조건&amp;nbsp;때문에&amp;nbsp;홍보를&amp;nbsp;통해&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;최대&amp;nbsp;고객의&amp;nbsp;수는&amp;nbsp;C+100&amp;nbsp;이다 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;maxCustomer&amp;nbsp;=&amp;nbsp;C+100 &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;int[]&amp;nbsp;costForIdx&amp;nbsp;=&amp;nbsp;new&amp;nbsp;int[maxCustomer+1]&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;gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;최소값을&amp;nbsp;구하는&amp;nbsp;과정이므로&amp;nbsp;초기값을&amp;nbsp;MAX_VALUE&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;costForIdx[0]&amp;nbsp;=&amp;nbsp;0&amp;nbsp;(나중&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;도시별&amp;nbsp;홍보비용&amp;nbsp;cost&amp;nbsp;와&amp;nbsp;이&amp;nbsp;때&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;고객의&amp;nbsp;수&amp;nbsp;customer&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;customer&amp;nbsp;부터&amp;nbsp;maxCustomer&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;index&amp;nbsp;의&amp;nbsp;최소비용]&amp;nbsp;과&amp;nbsp;[각&amp;nbsp;index-customer&amp;nbsp;의&amp;nbsp;비용&amp;nbsp;+&amp;nbsp;cost]&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;만약&amp;nbsp;index-customer&amp;nbsp;의&amp;nbsp;비용이&amp;nbsp;MAX_VALUE&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;정수배&amp;nbsp;홍보 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;위&amp;nbsp;과정을&amp;nbsp;마친&amp;nbsp;후&amp;nbsp;costForIdx&amp;nbsp;의&amp;nbsp;index&amp;nbsp;C&amp;nbsp;부터&amp;nbsp;maxCustomer&amp;nbsp;범위의&amp;nbsp;최소값을&amp;nbsp;구한다 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.&amp;nbsp;어려움&amp;nbsp;및&amp;nbsp;해결방식&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;최소&amp;nbsp;C&amp;nbsp;명을&amp;nbsp;늘린다는&amp;nbsp;의미를&amp;nbsp;처음에&amp;nbsp;제대로&amp;nbsp;이해하지&amp;nbsp;못했었다 &lt;br /&gt;-&amp;nbsp;cost&amp;nbsp;를&amp;nbsp;통해&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;늘릴&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;고객의&amp;nbsp;최대&amp;nbsp;수가&amp;nbsp;100&amp;nbsp;이라는&amp;nbsp;조건을&amp;nbsp;활용할&amp;nbsp;방법을&amp;nbsp;떠올리지&amp;nbsp;못했다 &lt;br /&gt;&lt;br /&gt;각각에&amp;nbsp;대한&amp;nbsp;해결방식은&amp;nbsp;2.아이디어&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BOJ_1106_호텔 {

    static int[] costForIdx; // index 명을 늘릴때의 cost
    static int maxCustomer;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk;

        stk = new StringTokenizer(br.readLine());
        int C = Integer.parseInt(stk.nextToken()); // C명 이상의 고객
        int N = Integer.parseInt(stk.nextToken()); // 도시의 개수 N
        maxCustomer = C+100;

        costForIdx = new int[maxCustomer+1]; // 한 번에 얻을 수 있는 고객의 수 &amp;lt;= 100
        // 각 Index 만큼의 고객을 얻기 위해 필요한 최소 비용을 MAX_VALUE 로 세팅
        Arrays.fill(costForIdx, Integer.MAX_VALUE);

        // 나중 정수배만큼 홍보하는 부분을 위해 세팅해야 한다
        costForIdx[0] = 0;

        for(int i=0; i&amp;lt;N; i++){
            // 각 도시별로 비용별 얻을 수 있는 사람의 수를 입력받고
            stk = new StringTokenizer(br.readLine());
            int cost = Integer.parseInt(stk.nextToken());
            int customer = Integer.parseInt(stk.nextToken());

            // cost 로 얻을 수 있는 사람의 수 부터 최대 얻을 수 있는 사람의 수 까지 순회
            // 순회하며 현재 최소 비용과 (현재 - cost 로 얻을 수 있는 사람의 수)의 비용중
            	// 더 작은 값으로 업데이트 한다
                // 정수배만큼 추가로 홍보하는 부분
            // 만약 업데이트 되어있지 않다면 값을 구할 수 없으므로 패스한다
            for(int j=customer; j&amp;lt;=maxCustomer; j++){
                if(costForIdx[j-customer] == Integer.MAX_VALUE) continue;
                costForIdx[j] = Math.min(costForIdx[j], costForIdx[j-customer]+cost);
            }
        }

        int answer = Integer.MAX_VALUE;
        for(int i=C; i&amp;lt;=maxCustomer; i++){
            answer = Math.min(answer, costForIdx[i]);
        }
        System.out.println(answer);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/102</guid>
      <comments>https://eggmomo.tistory.com/102#entry102comment</comments>
      <pubDate>Wed, 17 May 2023 03:28:43 +0900</pubDate>
    </item>
    <item>
      <title>[백준 14600] 샤워실 바닥 깔기 (Small)</title>
      <link>https://eggmomo.tistory.com/101</link>
      <description>&lt;figure id=&quot;og_1690623190257&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;14600번: 샤워실 바닥 깔기 (Small)&quot; data-og-description=&quot;첫 번째 줄에는 바닥의 한 변의 길이를 표현하는 자연수 K(1 &amp;le; K &amp;le; 2) 가 주어진다. 이때 바닥의 크기는 2K 가 됨에 유의하라. 두 번째 줄에는 배수구의 위치를 나타내는 자연수 x, y (1 &amp;le; x, y &amp;le; 2K)&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/14600&quot; data-og-url=&quot;https://www.acmicpc.net/problem/14600&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1Lezh/hyTtla9jlP/XK5HjY92rJFb31pfbwgk70/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/14600&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/14600&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1Lezh/hyTtla9jlP/XK5HjY92rJFb31pfbwgk70/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;14600번: 샤워실 바닥 깔기 (Small)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 줄에는 바닥의 한 변의 길이를 표현하는 자연수 K(1 &amp;le; K &amp;le; 2) 가 주어진다. 이때 바닥의 크기는 2K 가 됨에 유의하라. 두 번째 줄에는 배수구의 위치를 나타내는 자연수 x, y (1 &amp;le; x, y &amp;le; 2K)&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;2^n X 2^n 크기의 정사각형은 1X1 한 칸을 제외하고 'ㄴ' 모양의 타일로 전부 채울 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;x,&amp;nbsp;y축에&amp;nbsp;주의하여&amp;nbsp;하수구&amp;nbsp;위치&amp;nbsp;-1로&amp;nbsp;표시 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;static&amp;nbsp;number&amp;nbsp;=&amp;nbsp;1 &lt;br /&gt;아래&amp;nbsp;내용을&amp;nbsp;재귀로&amp;nbsp;해결 &lt;br /&gt;recursion(startX,&amp;nbsp;startY,&amp;nbsp;size)&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.&amp;nbsp;현재&amp;nbsp;범위의&amp;nbsp;한&amp;nbsp;변의&amp;nbsp;길이를&amp;nbsp;size라고&amp;nbsp;하자 &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;4등분하여&amp;nbsp;(size=2^n&amp;nbsp;이라서&amp;nbsp;1만&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;check&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;&amp;nbsp;&amp;nbsp;그&amp;nbsp;아래는&amp;nbsp;check&amp;nbsp;결과&amp;nbsp;true면&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;startX,&amp;nbsp;startY,&amp;nbsp;size/2 &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;&amp;nbsp;&amp;nbsp;-&amp;nbsp;(startX+size/2-1,&amp;nbsp;startY+size/2-1)&amp;nbsp;number++로 &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;startX,&amp;nbsp;startY+size/2,&amp;nbsp;size/2 &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;&amp;nbsp;&amp;nbsp;-&amp;nbsp;(startX+size/2-1,&amp;nbsp;startY+size/2)&amp;nbsp;number++로 &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;startX+size/2,&amp;nbsp;startY,&amp;nbsp;size/2 &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;&amp;nbsp;&amp;nbsp;-&amp;nbsp;(startX+size/2,&amp;nbsp;startY+size/2-1)&amp;nbsp;number++로 &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;startX+size/2,&amp;nbsp;startY+size/2,&amp;nbsp;size/2 &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;&amp;nbsp;&amp;nbsp;-&amp;nbsp;(startX+size/2,&amp;nbsp;startY+size/2)&amp;nbsp;number++로 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;이어서&amp;nbsp;아래로&amp;nbsp;recursion&amp;nbsp;진행 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;recursion(startX,&amp;nbsp;startY,&amp;nbsp;size/2) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;recursion(startX,&amp;nbsp;startY+size/2,&amp;nbsp;size/2) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;recursion(startX+size/2,&amp;nbsp;startY,&amp;nbsp;size/2) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;recursion(startX+size/2,&amp;nbsp;startY+size/2,&amp;nbsp;size/2) &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&amp;nbsp;check(시작X,&amp;nbsp;시작Y,&amp;nbsp;체크길이) &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;0인지&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 class=&quot;java&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;2^n X 2^n 크기의 정사각형은 1X1 한 칸을 제외하고 ㄴ 모양의 타일로 전부 채울 수 있다.

1. x, y축에 주의하여 하수구 위치 -1로 표시
    static number = 1
아래 내용을 재귀로 해결
recursion(startX, startY, size)
2. 현재 범위의 한 변의 길이를 size라고 하자
    - 현재 범위를 4등분하여 (size=2^n 이라서 1만 아니라면 무조건 가능하다)
        check 메서드 안 파라미터는 다음과 같이
        그 아래는 check 결과 true면 취할 행동
            - startX, startY, size/2
                - (startX+size/2-1, startY+size/2-1) number++로
            - startX, startY+size/2, size/2
                - (startX+size/2-1, startY+size/2) number++로
            - startX+size/2, startY, size/2
                - (startX+size/2, startY+size/2-1) number++로
            - startX+size/2, startY+size/2, size/2
                - (startX+size/2, startY+size/2) number++로
    - 이어서 아래로 recursion 진행
    recursion(startX, startY, size/2)
    recursion(startX, startY+size/2, size/2)
    recursion(startX+size/2, startY, size/2)
    recursion(startX+size/2, startY+size/2, size/2)

3. check(시작X, 시작Y, 체크길이)
    체크하는 범위가 전부 0인지 확인 (아무 이벤트 없는지)&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;haxe&quot; style=&quot;background-color: #131314; color: #ebebeb;&quot;&gt;&lt;code&gt;public class Main {
    static int[][] board;
    static int N;
    static int number = 1; //타일 번호

    static boolean check(int startX, int startY, int size){
        for(int i=startX; i&amp;lt;startX+size; i++){
            for(int j=startY; j&amp;lt;startY+size; j++){
                if(board[i][j]!=0) return false;
            }
        }
        return true;
    }

    static void recursion(int startX, int startY, int size){

        if(size==1){
            return;
        }

        int newSize = size/2;
        if(check(startX, startY, newSize)){
            board[startX+newSize-1][startY+newSize-1] = number;
        }
        if(check(startX, startY+newSize, newSize)){
            board[startX+newSize-1][startY+newSize] = number;
        }
        if(check(startX+newSize, startY, newSize)){
            board[startX+newSize][startY+newSize-1] = number;
        }
        if(check(startX+newSize, startY+newSize, newSize)){
            board[startX+newSize][startY+newSize] = number;
        }
        number++;

//        showBoard();
        System.out.println();

        recursion(startX, startY, newSize);
        recursion(startX, startY+newSize, newSize);
        recursion(startX+newSize, startY, newSize);
        recursion(startX+newSize, startY+newSize, newSize);

    }

    static void showBoard(){
        for(int i=0; i&amp;lt;N; i++){
            for(int j=0; j&amp;lt;N; j++){
                System.out.print(board[i][j] + &quot; &quot;);
            }
            System.out.println();
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk;
        int n = Integer.parseInt(br.readLine());
        N = (int) pow(2, n);
        board = new int[N][N];

        stk = new StringTokenizer(br.readLine());
        int holeX = Integer.parseInt(stk.nextToken());
        int holeY = Integer.parseInt(stk.nextToken());
        board[N-holeY][holeX-1] = -1;

        recursion(0, 0, N);

        showBoard();
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Solved]/BOJ</category>
      <author>응파카</author>
      <guid isPermaLink="true">https://eggmomo.tistory.com/101</guid>
      <comments>https://eggmomo.tistory.com/101#entry101comment</comments>
      <pubDate>Tue, 16 May 2023 01:29:53 +0900</pubDate>
    </item>
  </channel>
</rss>