<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>어쩌다 보니 자율주행 개발하는 사람 이야기</title>
    <link>https://meeenomino.tistory.com/</link>
    <description>어떤 개발자로 성장할지 고민하며 여기 저기 기웃거리기만 하다 정신차려보니 자율주행을 개발하는 소프트웨어 엔지니어가 되어버렸어요</description>
    <language>ko</language>
    <pubDate>Fri, 12 Jun 2026 10:30:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>우아한 컴공인</managingEditor>
    <image>
      <title>어쩌다 보니 자율주행 개발하는 사람 이야기</title>
      <url>https://tistory1.daumcdn.net/tistory/3828585/attach/6efab356c9e14cae9b1a3f560e711462</url>
      <link>https://meeenomino.tistory.com</link>
    </image>
    <item>
      <title>[ROS2] rosbag2에서의 데이터 유실을 개선한 foxy-future 브랜치</title>
      <link>https://meeenomino.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;github 링크: &lt;a href=&quot;https://github.com/ros2/rosbag2/tree/foxy-future&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ros2/rosbag2/tree/foxy-future&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673349272250&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - ros2/rosbag2&quot; data-og-description=&quot;Contribute to ros2/rosbag2 development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/ros2/rosbag2/tree/foxy-future&quot; data-og-url=&quot;https://github.com/ros2/rosbag2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4UkBn/hyReGvJPx6/lVbi84uuD4AzOte79auGiK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/ros2/rosbag2/tree/foxy-future&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/ros2/rosbag2/tree/foxy-future&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4UkBn/hyReGvJPx6/lVbi84uuD4AzOte79auGiK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - ros2/rosbag2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to ros2/rosbag2 development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ROS2 Foxy에서 rosbag2를 이용하여 데이터를 취득하다 보면,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;데이터가 군데군데 빠져있는 것&lt;/b&gt;을 볼 수 있다. (보통 &quot;이가 나갔다&quot; 라고 표현하고는 한다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이런 이슈를 &lt;b&gt;해결한 버전&lt;/b&gt;이 있다고 해서 찾아보게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;위 깃헙 링크에서 별도의 브랜치로 관리되고 있었는데, &lt;b&gt;foxy-future 브랜치&lt;/b&gt;가 바로 그것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;몇 가지 &lt;b&gt;성능 개선&lt;/b&gt;과 ROS2 &lt;b&gt;Galatic에서 제공하는 몇 가지 기능&lt;/b&gt;들을 제공한다고 하는데, 우리는 이가 나가는 것이 가장 큰 문제이므로, 여기에 집중하고자 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;해당 repo를 &lt;b&gt;clone&lt;/b&gt; 후, &lt;b&gt;checkout&lt;/b&gt;을 통해 foxy-future 브랜치로 진입할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673349791033&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p ~/rosbag_ws/src
cd ~/rosbag_ws/src

git clone https://github.com/ros2/rosbag2.git

git checkout foxy-future&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이후에 해당 브랜치를 &lt;b&gt;빌드하고&lt;/b&gt;, &lt;b&gt;소싱을&lt;/b&gt; 통해서 개선된 rosbag2를 적용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673349882901&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;colcon build
. install/setup.bash&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;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;참고로 빌드를 진행하며 몇 가지 패키지들이 필요하다는 메세지가 출력되고는 하는데, &lt;b&gt;apt를 사용하여 설치&lt;/b&gt;할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이후에 rosbag2를 사용하여 데이터를 취득하기 전에 위에서 &lt;b&gt;빌드한 결과물 소싱&lt;/b&gt;을 한 번 해준 뒤에 각자가 사용하는 &lt;b&gt;워크스페이스 소싱&lt;/b&gt;을 해주는 방식으로 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;아마도 아래와 같이 &lt;b&gt;alias&lt;/b&gt;를 지정할 수 있을 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673350259099&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alias foxy=&quot;source /opt/ros/foxy/setup.bash&quot;
alias sb=&quot;. install/setup.bash&quot;
alias future=&quot;source ~/rosbag_ws/install/setup.bash&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이렇게 alias 지정을 했다면 아마도 아래와 같이 사용 할 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673350372233&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;foxy
future
sb
ros2 bag record &amp;lt;topic_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>자율주행/ROS2</category>
      <category>FOXY</category>
      <category>ROS2</category>
      <category>rosbag</category>
      <category>로봇</category>
      <category>자율주행</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/14</guid>
      <comments>https://meeenomino.tistory.com/14#entry14comment</comments>
      <pubDate>Tue, 10 Jan 2023 20:36:33 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스] 두 개 뽑아서 더하기</title>
      <link>https://meeenomino.tistory.com/13</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 개 뽑아서 더하기&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제 설명&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제한사항&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;numbers의 길이는 2 이상 100 이하입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;numbers의 모든 수는 0 이상 100 이하입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;입출력 예&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;numbers&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;result&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[2,1,3,4,1]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[2,3,4,5,6,7]&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[5,0,2,7]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[2,5,7,9,12]&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;소스 코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1610678886860&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

int i, j;
bool arr[201];
//필요한 변수 선언

vector&amp;lt;int&amp;gt; solution(vector&amp;lt;int&amp;gt; numbers) {
    vector&amp;lt;int&amp;gt; answer; //결과를 담을 변수
    
    for(i = 0; i &amp;lt; numbers.size(); i++){
        for(j = i + 1; j &amp;lt; numbers.size(); j++){
            arr[numbers[i] + numbers[j]] = true;
        }
    }
    //모든 경우의 수를 확인해 합한 값을 새로운 배열에 체크한다
    
    for(i = 0; i &amp;lt; 201; i++){
        if(arr[i] == true)
            answer.push_back(i);
    }
    //체크되어있는 값에 대해 결과 벡터에 하나씩 입력한다
    
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해설&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비교적 간단한 완전 탐색 문제로&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;주어지는 수가 100개를 넘지 않는다는 점&lt;/b&gt;에서 완전 탐색이 가능하고,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 각각의 값이 100을 넘지 않는다는 점&lt;/b&gt;에서 배열로 두 수의 합을 체크가 가능합니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;나올수 있는 모든 경우의 수&lt;/b&gt; (모든 사람과 악수하는 상황을 생각하면 좋습니다) 에 대한 합을 새로운 &lt;b&gt;배열에 체크&lt;/b&gt;합니다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1610679349887&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;arr[numbers[i] + numbers[j]] = true;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이후에 체크한 배열을 &lt;b&gt;앞에서부터 탐색&lt;/b&gt;하며 벡터에 집어넣으면 자연스럽게 &lt;b&gt;오름차순 조건도 만족&lt;/b&gt;하게 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1610679403969&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(arr[i] == true)
  answer.push_back(i);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;결과&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screen Shot 2021-01-15 at 11.57.16 AM.png&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;379&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgy2xk/btqTyClHGlt/Fk2CenKzyUxXPtLwBr1qZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgy2xk/btqTyClHGlt/Fk2CenKzyUxXPtLwBr1qZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgy2xk/btqTyClHGlt/Fk2CenKzyUxXPtLwBr1qZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgy2xk%2FbtqTyClHGlt%2FFk2CenKzyUxXPtLwBr1qZK%2Fimg.png&quot; data-filename=&quot;Screen Shot 2021-01-15 at 11.57.16 AM.png&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;379&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;개발환경&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;C++@Xcode&lt;br /&gt;macOS 11.0.1 Big Sur&lt;/span&gt;&lt;/p&gt;</description>
      <category>PROGRAMMERS/LEVEL 1</category>
      <category>level1</category>
      <category>programmers</category>
      <category>두개뽑아서더하기</category>
      <category>레벨1</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>프로그래머스</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/13</guid>
      <comments>https://meeenomino.tistory.com/13#entry13comment</comments>
      <pubDate>Fri, 15 Jan 2021 11:59:53 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1978번 : 소수 찾기 (C++)</title>
      <link>https://meeenomino.tistory.com/12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;소수 찾기&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;시간 제한&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;메모리 제한&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;제출&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;정답&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;맞은 사람&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;정답 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;2 초&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;128 MB&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;58502&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;27409&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;22560&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;48.239%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;주어진 수 N개&amp;nbsp;중에서&amp;nbsp;소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;주어진 수들 중 소수의 개수를 출력한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1609223542929&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;4
1 3 5 7&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;예제&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; 출력 1&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1609223577197&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1609224645947&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;
int N, M, ans, arr[1001], i, j;
//필요한 변수 선언

int main(){
    arr[1] = 1;
    //1은 소수가 아니므로 미리 체크해둔다
    
    for(i = 2; i &amp;lt;= 500; i++){
        j = 2;
        while(i * j &amp;lt;= 1000){
            arr[i * j] = 1;
            j++;
        }
    }
    //에라토스테네스의 체 원리를 적용시키는 과정
    
    cin &amp;gt;&amp;gt; N;
    while(N--){
        cin &amp;gt;&amp;gt; M;
        if(arr[M] == 0)
            ans++;
    }
    //주어진 입력에 대하여 체크되지 않은 값이면 카운트를 늘린다
    
    cout &amp;lt;&amp;lt; ans &amp;lt;&amp;lt; '\n';
    //결과 출력
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;주어진 입력에 대해 소수임을 판별하는 문제이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;에라토스테네스의 체 원리를 이용하여 미리 주어진 범위 (이 문제에서는 1000까지 입력 가능하다) 안에서 소수들을 미리 판별해놓은 다음 주어진 입력에 대해 바로바로 소수임을 판별하고 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;에라토스테네스의 체는 간단하게 설명하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예를 들어 2부터 시작할때, 2 x 1를 제외하고 2 x 2, 2 x 3 ... 는 모두 소수가 아니므로 지워나가는 방식이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 방식대로 2부터 500 (501 부터는 2 이상을 곱했을때 문제에서 주어진 범위 1000을 넘기 때문에 고려할 필요가 없다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;까지 주어진 수의 범위 1000을 넘지 않는 선에서 수를 지워나가는(이 문제에서는 체크를 하는 방식) 방식으로 진행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1부터 1000까지의 모든 수를 체크한 후 입력을 받으며 이 입력이 소수인지 체크 여부를 확인하며 카운트를 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;채점 결과&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screen Shot 2020-12-31 at 7.06.22 AM.png&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;74&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUc0nd/btqR3SP07Ez/xBuK2KhpXokuYdK9v2DIxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUc0nd/btqR3SP07Ez/xBuK2KhpXokuYdK9v2DIxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUc0nd/btqR3SP07Ez/xBuK2KhpXokuYdK9v2DIxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUc0nd%2FbtqR3SP07Ez%2FxBuK2KhpXokuYdK9v2DIxk%2Fimg.png&quot; data-filename=&quot;Screen Shot 2020-12-31 at 7.06.22 AM.png&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;74&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;개발환경&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;C++@Xcode&lt;br /&gt;macOS 11.0.1 Big Sur&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/Mathematics</category>
      <category>1978번</category>
      <category>1978번 백준</category>
      <category>백준</category>
      <category>백준 1978번</category>
      <category>백준 수학</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/12</guid>
      <comments>https://meeenomino.tistory.com/12#entry12comment</comments>
      <pubDate>Thu, 31 Dec 2020 07:07:03 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 9663번 : N-Queen (C++)</title>
      <link>https://meeenomino.tistory.com/11</link>
      <description>&lt;h1&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;N-Queen&lt;/span&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;시간 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;제출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맞은 사람&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답 비율&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;10 초&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;128 MB&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;23313&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;13080&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8620&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;55.735%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;N-Queen 문제는&amp;nbsp;크기가 N &amp;times; N인 체스판 위에 퀸 N개를&amp;nbsp;서로 공격할 수 없게 놓는&amp;nbsp;문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 N이 주어진다. (1 &amp;le; N &amp;lt; 15)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는&amp;nbsp;경우의 수를 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 입력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1594114363707&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background-color: #f6f7f8; font-size: 14px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; background-position: initial initial; background-repeat: initial initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;8&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 출력 1&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1594114368411&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background-color: #f6f7f8; font-size: 14px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; background-position: initial initial; background-repeat: initial initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;92&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;소스 코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1594114676842&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background-color: #f6f7f8; font-size: 14px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; background-position: initial initial; background-repeat: initial initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

bool chess[17][17];
int n, ans;
//체스말들의 정보를 기록할 체스판 배열과, 입출력을 위한 변수 선언

bool check(int x, int y){
    bool tmp = true;
    //유효 조건에 걸리지 않는다면 참
    
    for(int i = 1; i &amp;lt; x; i++){
        if(chess[y][i])
            tmp = false;
    }
    //다른 체스말이 같은 행에 있는 경우
    
    for(int i = 1; 1 &amp;lt;= y - i; i++){
        if(chess[y - i][x - i])
            tmp = false;
    }
    //다른 체스말이 좌대각(위쪽) 방향에 있는 경우
    
    for(int i = 1; y + i &amp;lt;= n; i++){
        if(chess[y + i][x - i])
            tmp = false;
    }
    //다른 체스말이 좌대각(아래쪽) 방향에 있는 경우
    
    return tmp;
}
//체스말을 해당 위치에 놓는 것이 유효한지 판단하는 함수

void func(int cur){
    if(cur == n + 1){
        ans++;
        return;
    }
    //체스말을 충분히 놓은 경우 한 세트가 완성되었으므로 결과값 증가
    
    for(int i = 1; i &amp;lt;= n; i++){
        if(check(cur, i)){
            chess[i][cur] = true;
            func(cur + 1);
            //위치가 유효하다면 체스말을 놓고 다음 열 진행
        }
        chess[i][cur] = false;
        //이 위치가 아닌 다른 곳에 체스말을 두는 경우 시작
    }
}
//백트래킹 방식으로 체스말들을 놓는 함수

int main(){
    cin &amp;gt;&amp;gt; n;
    func(1);
    cout &amp;lt;&amp;lt; ans &amp;lt;&amp;lt; '\n';
    //문제 형식에 맞는 입출력과 백트래킹 함수 진입
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;N-Queen 문제는 꽤나 유명한 백트래킹 연습 문제 중 하나이다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;만약 백트래킹 개념에 대해 이해가 부족하다면 먼저 기본 진행 방식 정도는 공부하고 오는 것을 추천한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 문제 풀이에서 고려해야할 가장 중요한 정보는 백트래킹 방식으로 체스말을 배치하되,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이전에 배치한 체스말들과 공격 가능한 위치에 놓여있지 않도록 구성하는 것이다&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;아래에 공격 가능한 위치의 예를 그림으로 표현하였다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 33.95348837209302%; height: 95px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;hearts;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;hearts;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;hearts;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;hearts;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;◎&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;hearts;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&amp;hearts;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;공격 가능한 위치 : &amp;hearts; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;현재 배치하려는 체스말의 위치 :&amp;nbsp;◎&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;위처럼 체스말을 배치하는 경우에 우리는 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;좌대각(위쪽방향), 가로방향, 좌대각(아래쪽방향)&lt;/span&gt; 세가지 방향에서 체스말이 배치되어있는지 확인해야 할 것이다&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이쯤 되면 우리는 체스말을 배치하는 과정에서 현재 &lt;b&gt;열 오른쪽에 있는 열에 대해서는 고려할 필요가 없다&lt;/b&gt;는 것을 알게된다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1594115088244&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool check(int x, int y){
    bool tmp = true;
    //유효 조건에 걸리지 않는다면 참
    
    for(int i = 1; i &amp;lt; x; i++){
        if(chess[y][i])
            tmp = false;
    }
    //다른 체스말이 같은 행에 있는 경우
    
    for(int i = 1; 1 &amp;lt;= y - i; i++){
        if(chess[y - i][x - i])
            tmp = false;
    }
    //다른 체스말이 좌대각(위쪽) 방향에 있는 경우
    
    for(int i = 1; y + i &amp;lt;= n; i++){
        if(chess[y + i][x - i])
            tmp = false;
    }
    //다른 체스말이 좌대각(아래쪽) 방향에 있는 경우
    
    return tmp;
}
//체스말을 해당 위치에 놓는 것이 유효한지 판단하는 함수&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;체스말의 유효한 위치를 확인하는 함수만 잘 구성한다면 나머지 부분에 대해서는 전형적인 백트래킹 방식으로 구현할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1594115143448&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void func(int cur){
    if(cur == n + 1){
        ans++;
        return;
    }
    //체스말을 충분히 놓은 경우 한 세트가 완성되었으므로 결과값 증가
    
    for(int i = 1; i &amp;lt;= n; i++){
        if(check(cur, i)){
            chess[i][cur] = true;
            func(cur + 1);
            //위치가 유효하다면 체스말을 놓고 다음 열 진행
        }
        chess[i][cur] = false;
        //이 위치가 아닌 다른 곳에 체스말을 두는 경우 시작
    }
}
//백트래킹 방식으로 체스말들을 놓는 함수&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screen Shot 2020-07-07 at 6.47.32 PM.png&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;73&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biZnwh/btqFrDykPxr/wfOM6H0rk2fe3PHlx8pBhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biZnwh/btqFrDykPxr/wfOM6H0rk2fe3PHlx8pBhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biZnwh/btqFrDykPxr/wfOM6H0rk2fe3PHlx8pBhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiZnwh%2FbtqFrDykPxr%2FwfOM6H0rk2fe3PHlx8pBhK%2Fimg.png&quot; data-filename=&quot;Screen Shot 2020-07-07 at 6.47.32 PM.png&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;73&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;개발환경&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;C++@Xcode&lt;br /&gt;macOS 10.15 Catalina&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/Back Tracking</category>
      <category>9663번</category>
      <category>9663번 백준</category>
      <category>백준</category>
      <category>백준 9663번</category>
      <category>백준 백트래킹</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/11</guid>
      <comments>https://meeenomino.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 7 Jul 2020 18:51:26 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 5557번 : 1학년 (C++)</title>
      <link>https://meeenomino.tistory.com/10</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;1학년&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%; height: 29px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;시간 제한&lt;/td&gt;
&lt;td&gt;메모리 제한&lt;/td&gt;
&lt;td&gt;제출&lt;/td&gt;
&lt;td&gt;정답&lt;/td&gt;
&lt;td&gt;맞은 사람&lt;/td&gt;
&lt;td&gt;정답 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;1 초&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;128 MB&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;10140&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;3723&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;2853&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;36.427%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀고 있다. 예를 들어, &quot;8 3 2 4 8 7 2 4 0 8 8&quot;에서 등식 &quot;8+3-2-4+8-7-2-4-0+8=8&quot;을 만들 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;상근이는 올바른 등식을 만들려고 한다. 상근이는 아직 학교에서 음수를 배우지 않았고, 20을 넘는 수는 모른다. 따라서, 왼쪽부터 계산할 때, 중간에 나오는 수가 모두 0 이상 20 이하이어야 한다. 예를 들어, &quot;8+3+2-4-8-7+2+4+0+8=8&quot;은 올바른 등식이지만, 8+3+2-4-8-7이 음수이기 때문에, 상근이가 만들 수 없는 등식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;숫자가 주어졌을 때, 상근이가 만들 수 있는 올바른 등식의 수를 구하는 프로그램을 작성하시오.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 숫자의 개수 N이 주어진다. (3 &amp;le; N &amp;le; 100) 둘째 줄에는 0 이상 9 이하의 정수 N개가 공백으로 구분해 주어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;출력&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 상근이가 만들 수 있는 올바른 등식의 개수를 출력한다. 이 값은 263-1 이하이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 입력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589869643351&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;11
8 3 2 4 8 7 2 4 0 8 8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;예제 출력 1&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589869683948&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;힌트&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8+3-2-4+8-7-2-4-0+8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8+3-2-4+8-7-2-4+0+8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8+3+2+4-8-7+2-4-0+8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8+3+2+4-8-7+2-4+0+8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8+3+2-4+8-7+2+4-0-8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8+3+2-4+8-7+2+4+0-8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8-3+2+4-8+7+2+4-0-8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8-3+2+4-8+7+2+4+0-8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8-3+2-4+8+7+2-4-0-8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;8-3+2-4+8+7+2-4+0-8=8&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;소스 코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589869949957&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

long long arr[101], n, dp[100][21];
//문제에서 주어진 데이터를 입력받을 arr, n, 중간 계산 데이터를 저장할 dp 배열 선언

int main(){
    cin &amp;gt;&amp;gt; n;
    for(int i = 1; i &amp;lt;= n; i++){
        cin &amp;gt;&amp;gt; arr[i];
    }
    //문제에서 주어진 데이터들을 입력
    
    dp[1][arr[1]] = 1;
    //dp배열의 초기값 입력
    
    for(int i = 2; i &amp;lt; n; i++){
        //두번째 값부터 n - 1번째 값까지 계산 가능
        
        for(int j = 0; j &amp;lt;= 20; j++){
            //중간 계산이 있었는지 반복문으로 확인
            
            if(dp[i - 1][j] != 0){
                //중간 계산 결과가 존재하는 경우
                
                if(j + arr[i] &amp;gt;= 0 &amp;amp;&amp;amp; j + arr[i] &amp;lt;= 20){
                    dp[i][j + arr[i]] += dp[i - 1][j];
                }
                //i번째 값과 덧셈 연산을 했을 때, 조건에 맞는 경우
                
                if(j - arr[i] &amp;gt;= 0 &amp;amp;&amp;amp; j - arr[i] &amp;lt;= 20){
                    dp[i][j - arr[i]] += dp[i - 1][j];
                }
                //i번째 값과 뺄셈 연산을 했을 때, 조건에 맞는 경우
                
            }
        }
    }
    cout &amp;lt;&amp;lt; dp[n - 1][arr[n]] &amp;lt;&amp;lt; '\n';
    //n번째 값과 일치하는 결과값 출력
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;범위가 제한되어있는 수들이 주어질 때, 덧셈 또는 뺄셈 연산을 해서 중간 결과 값들을 저장하며 나아가는 방식이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;DP 문제를 풀 때 생각해줘야하는 세가지 중 먼저 DP 배열이 나타내는 정보를 정하도록 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;DP[ i ][ j ] = i 번째 수까지 연산을 수행했을 때, 그 결과값이 j 가 나오는 경우의 수&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589870507371&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(j + arr[i] &amp;gt;= 0 &amp;amp;&amp;amp; j + arr[i] &amp;lt;= 20){
	dp[i][j + arr[i]] += dp[i - 1][j];
}
//i번째 값과 덧셈 연산을 했을 때, 조건에 맞는 경우
                
if(j - arr[i] &amp;gt;= 0 &amp;amp;&amp;amp; j - arr[i] &amp;lt;= 20){
	dp[i][j - arr[i]] += dp[i - 1][j];
}
//i번째 값과 뺄셈 연산을 했을 때, 조건에 맞는 경우&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;따라서 두개의 반복문 중,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫번째 반복문은 &lt;b&gt;현재 확인하고 있는 위치,&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;두번째 반복문은 직전 데이터들과 비교했을 때, &lt;b&gt;조건에 맞는 경우가 있는 확인하는 반복문이다&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;두개의 반복문을 선언하고 현재 위치한 지점의 값과 이전 데이터를 덧셈하거나 뺄셈했을 때,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;조건에 맞는 경우에 값을 수정하도록 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589870536655&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 2; i &amp;lt; n; i++){
//두번째 값부터 n - 1번째 값까지 계산 가능
        
	for(int j = 0; j &amp;lt;= 20; j++){
	//중간 계산이 있었는지 반복문으로 확인&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 문제는 특히 조건을 잘 읽어보아야 머리가 덜 아픈데,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1. 데이터의 개수는 100개를 넘지 않는다&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2. 중간 계산 결과는 0 이상 20 이하이다&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3. 나올 수 있는 경우의 수는 2^63 - 1 이하이다&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1, 2번 조건으로 DP &lt;b&gt;배열의 크기를 [ 100 ][ 20 ]&lt;/b&gt; 으로 획기적으로 줄일 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3번 조건을 충족시키기 위해 DP 배열을 &lt;b&gt;long long 형&lt;/b&gt;으로 선언해야 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589870553075&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;long long arr[101], n, dp[100][21];
//문제에서 주어진 데이터를 입력받을 arr, n, 중간 계산 데이터를 저장할 dp 배열 선언&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;결과값은 N - 1 번째 까지 확인했으므로 &lt;b&gt;N- 1까지 연산한 결과가 N 번째 데이터와 같은 경우만 출력&lt;/b&gt;하면 된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589870565881&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cout &amp;lt;&amp;lt; dp[n - 1][arr[n]] &amp;lt;&amp;lt; '\n';
//n번째 값과 일치하는 결과값 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-05-19 오후 3.43.27.png&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;148&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmMvft/btqEd8Hh1iz/l5kn4tVI4ki10BFdqr8vZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmMvft/btqEd8Hh1iz/l5kn4tVI4ki10BFdqr8vZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmMvft/btqEd8Hh1iz/l5kn4tVI4ki10BFdqr8vZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmMvft%2FbtqEd8Hh1iz%2Fl5kn4tVI4ki10BFdqr8vZK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-05-19 오후 3.43.27.png&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;148&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;개발환경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;C++@Xcode&lt;br /&gt;macOS 10.15 Catalina&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/DP</category>
      <category>5557번</category>
      <category>5557번 백준</category>
      <category>백준</category>
      <category>백준 5557번</category>
      <category>백준 dp</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/10</guid>
      <comments>https://meeenomino.tistory.com/10#entry10comment</comments>
      <pubDate>Tue, 19 May 2020 15:49:22 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 11049번 : 행렬 곱셈 순서 (C++)</title>
      <link>https://meeenomino.tistory.com/9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;행렬 곱셈 순서&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;시간 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;제출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;nbsp;맞은 사람&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답 비율&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1 초&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;256 MB&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;9060&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4127&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2934&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;43.745%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;크기가 N&amp;times;M인 행렬&amp;nbsp;A와 M&amp;times;K인&amp;nbsp;B를 곱할 때 필요한 곱셈 연산의 수는 총 N&amp;times;M&amp;times;K번이다. 행렬 N개를 곱하는데 필요한 곱셈 연산의 수는 행렬을 곱하는 순서에 따라 달라지게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;예를 들어, A의 크기가 5&amp;times;3이고, B의 크기가 3&amp;times;2, C의 크기가 2&amp;times;6인 경우에 행렬의 곱&amp;nbsp;ABC를 구하는 경우를 생각해보자.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;AB를 먼저 곱하고 C를 곱하는 경우 (AB)C에 필요한 곱셈 연산의 수는 5&amp;times;3&amp;times;2 + 5&amp;times;2&amp;times;6 = 30 + 60 = 90번이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;BC를 먼저 곱하고 A를 곱하는 경우 A(BC)에 필요한 곱셈 연산의 수는 3&amp;times;2&amp;times;6 + 5&amp;times;3&amp;times;6 = 36 + 90 = 126번이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;같은 곱셈이지만, 곱셈을 하는 순서에 따라서 곱셈 연산의 수가 달라진다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;행렬 N개의 크기가 주어졌을 때, 모든 행렬을 곱하는데 필요한 곱셈 연산 횟수의 최솟값을 구하는 프로그램을 작성하시오. 입력으로 주어진 행렬의 순서를 바꾸면 안 된다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 행렬의 개수 N(1 &amp;le; N &amp;le; 500)이 주어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;둘째 줄부터 N개 줄에는 행렬의 크기 r과 c가 주어진다. (1 &amp;le; r, c &amp;le; 500)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;항상 순서대로 곱셈을 할 수 있는 크기만 입력으로 주어진다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한,&amp;nbsp;최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 입력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589059699988&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3
5 3
3 2
2 6&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 출력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589059711962&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;90&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589060080296&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#define INF 9876543210
//INF를 미리 값을 지정, 문제에서 범위를 제공

using namespace std;
long long n, tmp1, tmp2, dp[501][501];
vector&amp;lt;pair&amp;lt;int, int&amp;gt;&amp;gt; v;
//최소 연산 횟수를 저장할 dp배열, 행렬의 크기를 저장할 pair형태의 벡터 선언

int main(){
    cin &amp;gt;&amp;gt; n;
    for(int i = 0; i &amp;lt; n; i++){
        cin &amp;gt;&amp;gt; tmp1 &amp;gt;&amp;gt; tmp2;
        v.push_back({tmp1, tmp2});
    }
    //문제에서 주어진 값들을 입력
    
    for(int i = 0; i &amp;lt; n; i++){
        for(int j = 0; j &amp;lt; n; j++){
            if(i + 1 == j)
                dp[i][j] = v[i].first * v[i].second * v[j].second;
            else if(i == j)
                dp[i][j] = 0;
            else
                dp[i][j] = INF;
        }
    }
    //이어진 두개의 행렬의 최소 비용은 미리 계산하고 나머지 경우는 i=j인 경우를 제외하고는 모두 INF 처리
    
    for(int i = 2; i &amp;lt; n; i++){
    //탐색하는 범위
    
        for(int j = 0; j + i &amp;lt; n; j++){
        //탐색의 시작점
        
            for(int mid = j; mid &amp;lt; i + j; mid++){
            //주어진 시작점과 범위 내에서 두 부분으로 분리시키는 지점
            
                dp[j][i + j] = min(dp[j][i + j], dp[j][mid] + dp[mid + 1][i + j] + (v[j].first * v[mid].second * v[i + j].second));
                //기존에 저장된 dp값과 나누어진 두 부분의 dp값과 그 두 부분을 합치는 비용을 합친 값과 비교해서 더 작은 값으로 수정
                
            }
        }
    }
    
    cout &amp;lt;&amp;lt; dp[0][n - 1] &amp;lt;&amp;lt; '\n';
    //완성된 결과값을 출력
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;해설&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 문제는 앞서 포스팅 되었던 &lt;a href=&quot;https://meeenomino.tistory.com/6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;11066번 : 파일 합치기&lt;/a&gt; 문제와 매우 유사하다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;11066번 문제를 먼저 보고 오는 것도 추천한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;문제 풀이에 대해 고민하기 전에, 행렬의 연산에 대해 고민 해볼&amp;nbsp; 필요가 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;만약 &lt;span style=&quot;color: #006dd7;&quot;&gt;2&lt;/span&gt; x &lt;span style=&quot;color: #ee2323;&quot;&gt;3&lt;/span&gt; 배열과 &lt;span style=&quot;color: #ee2323;&quot;&gt;3&lt;/span&gt; x &lt;span style=&quot;color: #006dd7;&quot;&gt;7&lt;/span&gt; 배열을 곱한다고 했을 때,&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;연산 횟수는 &lt;span style=&quot;color: #006dd7;&quot;&gt;2&lt;/span&gt; x &lt;span style=&quot;color: #ee2323;&quot;&gt;3&lt;/span&gt; x &lt;span style=&quot;color: #006dd7;&quot;&gt;7&lt;/span&gt; 이 된다 그리고 곱셈이 끝난 행렬은 &lt;span style=&quot;color: #006dd7;&quot;&gt;2&lt;/span&gt; x &lt;span style=&quot;color: #006dd7;&quot;&gt;7&lt;/span&gt; 행렬이 된다&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 두가지 정보에 집중하여 문제를 풀어나갈 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;먼저 문제를 풀어나가기 위해 DP 배열이 나타내는 정보를 정할 필요가 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;DP[ i ][ j ] = i 번째 행렬부터 j 번째 행렬까지 최소 연산 횟수로 곱했을 때의 &lt;span style=&quot;color: #ee2323;&quot;&gt;연산 횟수&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;위와 같이 생각했을 때, 반복문 세개를 사용해&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;가장 첫번째 반복문에서는 탐색할 영역의 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;범위(사이즈)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;두번째 반복문에서는&amp;nbsp; 탐색할 영역의 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;시작점&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;세번째 반복문에서는 탐색할 영역을 두 부분으로&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 나누는 지점&lt;/b&gt;&lt;/span&gt;을 정해준다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589060878087&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 2; i &amp;lt; n; i++){ //범위
        for(int j = 0; j + i &amp;lt; n; j++){ //시작점
            for(int mid = j; mid &amp;lt; i + j; mid++){ //끊을곳&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;나눠진 두 부분을 곱셈 연산을 한다고 가정했을때,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;두 부분을 각각 만들기 위한 최소 연산 횟수는 이미 DP 배열 안에 저장 되어있을 것이다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;(현재 탐색하는 범위보다 더 작은 범위이므로 이전에 계산되었을 것이다)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;따라서 두 부분의 DP값과, 그 두 행렬을 곱하는 비용을 계산하면 되는데,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;두 행렬을 곱하는 비용은 앞서 배열에 대해 설명한 것을 바탕으로 하면 두 행렬의 사이즈를 추정할 수 있고 그 사이즈를 바탕으로 연산 횟수도 추정할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589060852645&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;v[j].first * v[mid].second * v[i + j].second
//나눠진 두 부분을 곱셈 연산하는 비용&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이런 정보들을 바탕으로 최소 값을 계속 수정해 나가면서 DP 배열을 수정하면 반복문이 종료되면 DP[0][n-1] 에 최소 비용이 입력되어있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589060965848&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[j][i + j] = min(dp[j][i + j], dp[j][mid] + dp[mid + 1][i + j] + (v[j].first * v[mid].second * v[i + j].second));
//DP배열 수정 과정

cout &amp;lt;&amp;lt; dp[0][n - 1] &amp;lt;&amp;lt; '\n';
//반복문 탈출 후 결과값 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-05-10 오전 6.50.43.png&quot; data-origin-width=&quot;1139&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by2VgZ/btqD1poicjX/TDMKHwkpokX7D3D3g3DDgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by2VgZ/btqD1poicjX/TDMKHwkpokX7D3D3g3DDgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by2VgZ/btqD1poicjX/TDMKHwkpokX7D3D3g3DDgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby2VgZ%2FbtqD1poicjX%2FTDMKHwkpokX7D3D3g3DDgk%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-05-10 오전 6.50.43.png&quot; data-origin-width=&quot;1139&quot; data-origin-height=&quot;73&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;개발환경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;C++@Xcode&lt;br /&gt;macOS 10.15 Catalina&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/DP</category>
      <category>11049번</category>
      <category>11049번 백준</category>
      <category>백준</category>
      <category>백준 11049번</category>
      <category>백준 dp</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/9</guid>
      <comments>https://meeenomino.tistory.com/9#entry9comment</comments>
      <pubDate>Sun, 10 May 2020 06:57:30 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 2096번 : 내려가기 (C++)</title>
      <link>https://meeenomino.tistory.com/8</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;내려가기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 38px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;시간 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;제출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맞은 사람&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답 비율&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1 초&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4 MB&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;12551&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4494&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3343&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;36.083%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;N줄에 0 이상 9 이하의 숫자가 세 개씩 적혀 있다. 내려가기 게임을 하고 있는데, 이 게임은 첫 줄에서 시작해서 마지막 줄에서 끝나게 되는 놀이이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;먼저 처음에 적혀 있는 세 개의 숫자 중에서 하나를 골라서 시작하게 된다. 그리고 다음 줄로 내려가는데, 다음 줄로 내려갈 때에는 다음과 같은 제약 조건이 있다. 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다는 것이다. 이 제약 조건을 그림으로 나타내어 보면 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DHLRK/btqDtzLzij8/sfVrKbkoWLZwuwBi9Na5uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DHLRK/btqDtzLzij8/sfVrKbkoWLZwuwBi9Na5uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DHLRK/btqDtzLzij8/sfVrKbkoWLZwuwBi9Na5uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDHLRK%2FbtqDtzLzij8%2FsfVrKbkoWLZwuwBi9Na5uk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;별표는 현재 위치이고, 그 아랫 줄의 파란 동그라미는 원룡이가 다음 줄로 내려갈 수 있는 위치이며, 빨간 가위표는 원룡이가 내려갈 수 없는 위치가 된다. 숫자표가 주어져 있을 때, 얻을 수 있는 최대 점수, 최소 점수를 구하는 프로그램을 작성하시오. 점수는 원룡이가 위치한 곳의 수의 합이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;입력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;출력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 얻을 수 있는 최대 점수와 최소 점수를 띄어서 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 입력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1587030832650&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3 
1 2 3
4 5 6
4 9 0&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 출력 1&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1587030846249&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;18 6&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1587031081869&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;
int n, a, b, c, curdp0, curdp1, curdp2, predp0, predp1, predp2, curmindp0, curmindp1, curmindp2, premindp0, premindp1, premindp2;
//슬라이딩 윈도우 방식으로 문제를 풀기위한 이전, 현재 dp값을 입력할 변수들과 현재 위치한 지점에서의 점수들을 입력 받을 변수 생성

int main(){
    cin &amp;gt;&amp;gt; n;
    for(int i = 1; i &amp;lt;= n; i++){
        predp0 = curdp0;
        predp1 = curdp1;
        predp2 = curdp2;
        premindp0 = curmindp0;
        premindp1 = curmindp1;
        premindp2 = curmindp2;
        //최신 dp 값이였던 값들을 새로운 값 입력을 위해 이전 dp값으로 변경
        
        cin &amp;gt;&amp;gt; a &amp;gt;&amp;gt; b &amp;gt;&amp;gt; c;
        //문제에서 주어진 입력 데이터
        
        if(i == 1){
            curdp0 = a;
            curdp1 = b;
            curdp2 = c;
            curmindp0 = a;
            curmindp1 = b;
            curmindp2 = c;
        }
        //i == 1 의 경우 이전 초기값이므로 예외를 두어 값을 입력
        
        else{
            curdp0 = max(predp0, predp1) + a;
            curdp1 = max(predp0, max(predp1, predp2)) + b;
            curdp2 = max(predp1, predp2) + c;
            curmindp0 = min(premindp0, premindp1) + a;
            curmindp1 = min(premindp0, min(premindp1, premindp2)) + b;
            curmindp2 = min(premindp1, premindp2) + c;
        }
        //직전 dp값들과 현재 위치한 지점의 점수가 제공되므로 모두 이용해 현재 위치한 지점의 dp값 계산
        
    }
    cout &amp;lt;&amp;lt; max(curdp0, max(curdp1, curdp2)) &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; min(curmindp0, min(curmindp1, curmindp2)) &amp;lt;&amp;lt; '\n';
    //나온 결과들 중 조건에 맞는 가장 크거나 가장 작은 값을 출력
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 문제를 일반적인 간단한 다이나믹 프로그래밍 문제처럼 접근했다 메모리 초과를 받았다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 제한이 4MB인 것을 감안했을때, 일반적인 방식으로 정수형 DP배열, 정수 또는 문자형으로 배열을 생성해 입력 데이터를 저장하면 메모리 제한으로 인해 오답을 받게 된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;고민하던 중 문제의 알고리즘 분류가 슬라이딩 윈도우인 것을 확인하고 힌트를 얻었다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;슬라이딩 윈도우란 보통 컴퓨터 네트워크에서 사용하는 용어로 간단하게 설명하면 현재 계산중인(네트워크에서는 주고 받는 중인 정도로 가정) 값들 근처의 값들과 함께 계속 그 위치를 조정하며 같이 가는 것이라 생각하면 될 듯하다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 점을 다이나믹 프로그래밍의 관점에서 생각해보면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;DP[i][0, 1, 2] = i 번째 위치에서 0, 1, 2 번째 점수를 택했을 때의 가장 최고점 또는 최저점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;으로 생각하고 계산된 DP값들이나 문제에서 입력받는 데이터들을 따로 저장할 필요가 없다는 점에 집중하면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;결과적으로 배열을 사용할 필요없이 직전에 계산된 DP값과 현재 계산되는 DP값과 현재 입력받은 세종류의 점수까지 총 9개의 변수면 DP값을 계속 계산할 수 있다는 결론에 도달한다&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1587031504225&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curdp0 = max(predp0, predp1) + a;
curdp1 = max(predp0, max(predp1, predp2)) + b;
curdp2 = max(predp1, predp2) + c;
curmindp0 = min(premindp0, premindp1) + a;
curmindp1 = min(premindp0, min(premindp1, premindp2)) + b;
curmindp2 = min(premindp1, premindp2) + c;
//직전 dp값들과 현재 위치한 지점의 점수가 제공되므로 모두 이용해 현재 위치한 지점의 dp값 계산&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-04-16 오후 7.07.02.png&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4LZwr/btqDsPumVwP/qkELDnBOKPW8bLQ7kyg4o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4LZwr/btqDsPumVwP/qkELDnBOKPW8bLQ7kyg4o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4LZwr/btqDsPumVwP/qkELDnBOKPW8bLQ7kyg4o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4LZwr%2FbtqDsPumVwP%2FqkELDnBOKPW8bLQ7kyg4o1%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-04-16 오후 7.07.02.png&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;144&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;개발환경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;C++@Xcode&lt;br /&gt;macOS 10.14 Mojave&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/DP</category>
      <category>2096번</category>
      <category>2096번 백준</category>
      <category>백준</category>
      <category>백준 2096번</category>
      <category>백준 dp</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/8</guid>
      <comments>https://meeenomino.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 16 Apr 2020 19:10:58 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1937번 : 욕심쟁이 판다 (C++)</title>
      <link>https://meeenomino.tistory.com/7</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;욕심쟁이 판다&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;시간 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;제출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맞은 사람&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답 비율&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2 초&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;256 MB&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;19146&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;6071&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3884&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;29.792%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #000000;&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;n*n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서 대나무를 먹는다. 그런데 단 조건이 있다. 이 판다는 매우 욕심이 많아서 대나무를 먹고 자리를 옮기면 그 옮긴 지역에 그 전 지역보다 대나무가 많이 있어야 한다. 만약에 그런 지점이 없으면 이 판다는 불만을 가지고 단식 투쟁을 하다가 죽게 된다(-_-)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 판다의 사육사는 이런 판다를 대나무 숲에 풀어 놓아야 하는데, 어떤 지점에 처음에 풀어 놓아야 하고, 어떤 곳으로 이동을 시켜야 둘 다 소중한 생명이지만 판다가 최대한 오래 살 수 있는지 고민에 빠져 있다. 우리의 임무는 이 사육사를 도와주는 것이다. n*n 크기의 대나무 숲이 주어져 있을 때, 이 판다가 최대한 오래 살려면 어떤 경로를 통하여 움직여야 하는지 구하여라.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 대나무 숲의 크기 n(1 &amp;le; n &amp;le; 500)이 주어진다. 그리고 둘째 줄부터 n+1번째 줄까지 대나무 숲의 정보가 주어진다. 대나무 숲의 정보는 공백을 사이로 두고 각 지역의 대나무의 양이 정수 값으로 주어진다. 대나무의 양은 1,000,000보다 작거나 같은 자연수이다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에는 판다가 최대한 살 수 있는 일수(K)를 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 입력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586933964393&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;4
14 9 12 10
1 11 5 4
7 15 2 13
6 3 16 8&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586933984042&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;소스코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586934757199&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;
int n, dp[502][502], map[502][502], ans;
//입력 데이터를 받을 변수와 배열 생성, 최대로 생존 가능한 날을 저장할 배열 생성

struct move{
    int y;
    int x;
};
struct move m[4] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
//방향 탐색을 위한 구조체와 배열 생성

int func(int cury, int curx){
    if(dp[cury][curx] != 0)
        return dp[cury][curx];
    //이미 지난적이 있는 지역이면 더 계산할 필요 없이 이전에 이곳에서 계산된 값을 반환
    
    dp[cury][curx] = 1;
    //처음 방문하는 곳이라면 이곳을 시작점이라 생각해 1일 부터 시작
    
    for(int i = 0; i &amp;lt;= 4; i++){
        int my = cury + m[i].y;
        int mx = curx + m[i].x;
        if(my &amp;gt; 0 &amp;amp;&amp;amp; my &amp;lt;= n &amp;amp;&amp;amp; mx &amp;gt; 0 &amp;amp;&amp;amp; mx &amp;lt;= n){
            if(map[my][mx] &amp;gt; map[cury][curx]){
                //4방향을 탐색하는데 주어진 배열의 범위에 속하고 데이터의 크기가 조건에 맞는 경우에만 계산
                
                dp[cury][curx] = max(dp[cury][curx], func(my, mx) + 1);
                //현재 좌표의 이미 있는 dp값과 이동하려는 좌표에서의 dp값에 1을 더한 것 중 큰 값을 dp에 입력
                
            }
        }
    }
    return dp[cury][curx];
    //계산된 현재 좌표의 dp값을 변환
    
}

int main(){
    cin &amp;gt;&amp;gt; n;
    for(int i = 1; i &amp;lt;= n; i++){
        for(int j = 1; j &amp;lt;= n; j++){
            cin &amp;gt;&amp;gt; map[i][j];
        }
    }
    //문제에서 주어진 데이터 입력
    
    for(int i = 1; i &amp;lt;= n; i++){
        for(int j = 1; j &amp;lt;= n; j++){
            func(i, j);
        }
    }
    //각 좌표에서 탐색 진행
    
    for(int i = 1; i &amp;lt;= n; i++){
        for(int j = 1; j &amp;lt;= n; j++){
            if(ans &amp;lt; dp[i][j])
                ans = dp[i][j];
        }
    }
    //가장 큰 dp값을 탐색
    
    cout &amp;lt;&amp;lt; ans &amp;lt;&amp;lt; '\n';
    //결과값 출력
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;DP[i][j] = (i, j)에서 시작해 가장 오래 살 수 있는 기간&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;일반적인 &quot;모든 좌표를 탐색하며 최대길이를 찾는 방법&quot;으로 문제를 풀어나가면 문제에서 주어진 시간 제한(2초)에 해결되지 않아 시간초과가 발생한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;따라서 방법을 조금 수정해야하는데, 모든 좌표에서 탐색을 실행하되, 탐색하는 과정에서 만약 다음 좌표가 이미 수정된 내역이 있는 경우 이미 다른 경로에서 최대길이를 계산한것으로 간주하고 수정된 DP값을 그대로 가져온다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;만약 수정되지 않은 경우, 즉 처음 지나가는 장소인 경우 DP값을 1로 수정하고 탐색을 다시 시작한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1587012458912&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(dp[cury][curx] != 0)
        return dp[cury][curx];
    //이미 지난적이 있는 지역이면 더 계산할 필요 없이 이전에 이곳에서 계산된 값을 반환
    
    dp[cury][curx] = 1;
    //처음 방문하는 곳이라면 이곳을 시작점이라 생각해 1일 부터 시작&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이때 주의해야할 점은, dp[cury][curx]는 4방향으로 이동 가능하므로 최대 4번 값이 수정 가능하므로 가능한 값들 중 가장 최대 값을 dp[cury][curx]에 집어넣어야 할 것이다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;따라서 dp값을 수정시에는 아래와 같은 방법으로 진행한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1587012652387&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[cury][curx] = max(dp[cury][curx], func(my, mx) + 1);
//현재 좌표의 이미 있는 dp값과 이동하려는 좌표에서의 dp값에 1을 더한 것 중 큰 값을 dp에 입력&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-04-15 오후 3.53.59.png&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O0fPQ/btqDsOVAsQq/4lHYA1yh9m8Z1ORy9hkaP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O0fPQ/btqDsOVAsQq/4lHYA1yh9m8Z1ORy9hkaP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O0fPQ/btqDsOVAsQq/4lHYA1yh9m8Z1ORy9hkaP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO0fPQ%2FbtqDsOVAsQq%2F4lHYA1yh9m8Z1ORy9hkaP0%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-04-15 오후 3.53.59.png&quot; data-origin-width=&quot;2284&quot; data-origin-height=&quot;144&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;개발환경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;C++@Xcode&lt;br /&gt;macOS 10.14 Mojave&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/DP</category>
      <category>1937번</category>
      <category>1937번 백준</category>
      <category>백준</category>
      <category>백준 1937번</category>
      <category>백준 dp</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/7</guid>
      <comments>https://meeenomino.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 15 Apr 2020 16:15:04 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 11066번 : 파일 합치기 (C++)</title>
      <link>https://meeenomino.tistory.com/6</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;파일 합치기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;시간 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;제출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맞은 사람&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;비율&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2 초&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;256 MB&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;10738&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;5684&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3634&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;51.937%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본이 들어있는 한 개의 파일을 만든다. 이 과정에서 두 개의 파일을 합쳐서 하나의 임시파일을 만들고, 이 임시파일이나 원래의 파일을 계속 두 개씩 합쳐서 소설의 여러 장들이 연속이 되도록 파일을 합쳐나가고, 최종적으로는 하나의 파일로 합친다. 두 개의 파일을 합칠 때 필요한 비용(시간 등)이 두 파일 크기의 합이라고 가정할 때, 최종적인 한 개의 파일을 완성하는데 필요한 비용의 총 합을 계산하시오.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;예를 들어, C1, C2, C3, C4가 연속적인 네 개의 장을 수록하고 있는 파일이고, 파일 크기가 각각 40, 30, 30, 50 이라고 하자. 이 파일들을 합치는 과정에서, 먼저 C2와 C3를 합쳐서 임시파일 X1을 만든다. 이때 비용 60이 필요하다. 그 다음으로 C1과 X1을 합쳐 임시파일 X2를 만들면 비용 100이 필요하다. 최종적으로 X2와 C4를 합쳐 최종파일을 만들면 비용 150이 필요하다. 따라서, 최종의 한 파일을 만드는데 필요한 비용의 합은 60+100+150=310 이다. 다른 방법으로 파일을 합치면 비용을 줄일 수 있다. 먼저 C1과 C2를 합쳐 임시파일 Y1을 만들고, C3와 C4를 합쳐 임시파일 Y2를 만들고, 최종적으로 Y1과 Y2를 합쳐 최종파일을 만들 수 있다. 이때 필요한 총 비용은 70+80+150=300 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;소설의 각 장들이 수록되어 있는 파일의 크기가 주어졌을 때, 이 파일들을 하나의 파일로 합칠 때 필요한 최소비용을 계산하는 프로그램을 작성하시오.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데, 첫 행에는 소설을 구성하는 장의 수를 나타내는 양의 정수 K (3 &amp;le; K &amp;le; 500)가 주어진다. 두 번째 행에는 1장부터 K장까지 수록한 파일의 크기를 나타내는 양의 정수 K개가 주어진다. 파일의 크기는 10,000을 초과하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행에 출력하는데, 모든 장을 합치는데 필요한 최소비용을 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 입력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586855625554&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;2
4
40 30 30 50
15
1 21 3 4 5 35 5 4 3 5 98 21 14 17 32&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 출력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586855644774&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;300
864&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;소스 코드 &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586855921674&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#define INF 987654321
//최소값 비교를 위해 아직 접근하지 않은 곳에 입력할 INF 선언

using namespace std;

int li[501], dp[501][501], sum[501], TC, N;
//문제에서 주어진 데이터를 입력받을 li배열, 최소값을 저장할 dp배열, 부분합을 저장할 sum배열 등 선언

int main(){
    cin &amp;gt;&amp;gt; TC;
    //테스트 케이스 입력
    
    while(TC--){
        cin &amp;gt;&amp;gt; N;
        //데이터의 개수 입력
        
        for(int i = 1; i &amp;lt;= N; i++){
            cin &amp;gt;&amp;gt; li[i];
            sum[i] = sum[i -  1] + li[i];
        }
        //데이터를 입력받고 부분합 입력
        
        for(int i = 1; i &amp;lt;= N; i++){
            for(int j = i; j &amp;lt;= N; j++){
                if(i != j){
                    dp[i][j] = INF;
                }
            }
        }
        //dp배열에 최소값 비교를 위한 INF값 입력
        
        for(int i = 1; i &amp;lt; N; i++){
            //탐색할 범위 지정
            
            for(int j = 1; j + i &amp;lt;= N; j++){
                //확인할 범위의 시작값 관련
                
                int k = j + i;
                //확인할 범위의 끝값 관련
                
                for(int mid = j; mid &amp;lt; k; ++mid){
                    dp[j][k] = min(dp[j][k], dp[j][mid] + dp[mid + 1][k] + sum[k] - sum[j - 1]);
                    //dp값을 수정
                }
            }
        }
        cout &amp;lt;&amp;lt; dp[1][N] &amp;lt;&amp;lt; '\n';
        //결과값 출력
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 문제와 같은 경우에는 다이나믹 프로그래밍으로 해결할 수 있었다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;DP[i][j] = i ~ j 번째 파일을 모두 합치는데 필요한 비용&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;위와 같이 생각했을 때, 그 구현방법으로는 먼저 i부터 j 사이에 변수(mid)를 하나 둬 두 부분으로 나누어 준다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;이때 DP값은 두 부분을 만들기까지의 각각의 비용&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;DP[i][mid], DP[mid + 1][j]&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;두 부분을 합치는데 드는 비용 = i부터 j 까지의 부분 합&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;Sum[j] - Sum[i - 1]&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;두가지를 모두 더한 값이 될 것이다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;특히 DP값을 두 부분으로 나눈 위치에 따라서 그 값이 계속 변하기 때문에 수정 가능한 DP값 중 가장 작은 값을 입력해주어야 한다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586982980171&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[j][k] = min(dp[j][k], dp[j][mid] + dp[mid + 1][k] + sum[k] - sum[j - 1]);
//dp값을 수정&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;마지막으로 DP값을 수정할 반복문은 매번 1번째 인덱스부터 탐색하되, 마지막 파일의 범위를 계속 늘려가는 식으로 구현해야한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586982702337&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 1; i &amp;lt; N; i++){
            //탐색할 범위 지정
            
            for(int j = 1; j + i &amp;lt;= N; j++){
                //확인할 범위의 시작값 관련
                
                int k = j + i;
                //확인할 범위의 끝값 관련&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-04-14 오후 6.20.24.png&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNumQq/btqDohdID6L/vpoOegLfX5HQwwp1b0oUXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNumQq/btqDohdID6L/vpoOegLfX5HQwwp1b0oUXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNumQq/btqDohdID6L/vpoOegLfX5HQwwp1b0oUXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNumQq%2FbtqDohdID6L%2FvpoOegLfX5HQwwp1b0oUXK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-04-14 오후 6.20.24.png&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;142&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;개발환경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;C++@Xcode&lt;br /&gt;macOS 10.14 Mojave&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/DP</category>
      <category>11066번</category>
      <category>11066번 백준</category>
      <category>백준</category>
      <category>백준 11066번</category>
      <category>백준 dp</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/6</guid>
      <comments>https://meeenomino.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 14 Apr 2020 18:21:23 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1915번 : 가장 큰 정사각형 (C++)</title>
      <link>https://meeenomino.tistory.com/5</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;가장 큰 정사각형&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%; height: 32px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;시간 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 제한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;제출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;정답&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맞은 사람&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;비율&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2 초&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;128 MB&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;17571&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;5293&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3804&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;28.956%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 1.25em;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;n&amp;times;m의 0, 1로 된 배열이 있다. 이 배열에서 1로 된 가장 큰 정사각형의 크기를 구하는 프로그램을 작성하시오&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 24.8837%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 24.8837%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 24.8837%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 24.8837%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 25%;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;위와 같은 예제에서는 가운데의 2&amp;times;2 배열이 가장 큰 정사각형이다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;입력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 n, m(1 &amp;le; n, m &amp;le; 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;첫째 줄에 가장 큰 정사각형의 넓이를 출력한다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 입력 1 &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1586769793063&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;4 4
0100
0111
1110
0010&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;예제 출력 1&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1586769800581&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;소스 코드&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;pre id=&quot;code_1586771125898&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

int n, m, dp[1002][1002], ans;
//배열의 사이즈를 저장할 변수와 정사각형의 크기를 저장할 dp, 최댓값을 저장할 ans 변수 생성
char map[1002][1002];
//문제에서 제시되는 0과 1의 데이터들을 저장할 배열

int main(){
    cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; m;
    for(int i = 1; i &amp;lt;= n; i++){
        for(int j = 1; j &amp;lt;= m; j++){
            cin &amp;gt;&amp;gt; map[i][j];
            if(map[i][j] == '1'){
                dp[i][j] = 1;
            }
        }
    }
    //문제에서 주어진 데이터들을 입력받고 map의 값이 '1'일 경우 1*1 정사각형이므로 dp[i][j]를 1로 변경
    
    for(int i = 1; i &amp;lt;= n; i++){
        for(int j = 1; j &amp;lt;= m; j++){
            if(dp[i][j]){
                dp[i][j] = min(dp[i-1][j- 1], min(dp[i-1][j], dp[i][j - 1])) + 1;
                //dp[i][j] 값을 인접한 세가지 값 중, 가장 작은 값 + 1 으로 변경
                
                ans = max(ans, dp[i][j]);
                //결과값 출력을 위한 ans 값 수정
            }
        }
    }
    
    cout &amp;lt;&amp;lt; ans * ans &amp;lt;&amp;lt; '\n';
    //결과값 출력
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;해설&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 문제가 주어진 데이터에서 가장 큰 정사각형을 찾는다는 점과, 배열 형태에 데이터를 돌면서 값을 수정한다는 점에 초점을 맞춰 생각해보면 배열을 돌며 만들어지는 정사각형의 맨 오른쪽 아래에 도달했을때 이 지점을 기준으로 정사각형이 형성되는지 확인하면 된다고 생각할 수 있다 왜 오른쪽에 아래냐고 묻는다면, 그 이유는 간단하다. 일반적으로 배열을 탐색하는 순서 때문이다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 41.3954%; height: 146px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;*1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;*1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;*1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #006dd7; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;*1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;*1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;위와 같은 형태로 데이터가 입력된 경우,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;*1 &lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 입력된 곳은 2 * 2 정사각형이 만들어지는 곳이므로 dp[i][j] = 2 가 되어야한다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;*1&lt;/b&gt; &lt;/span&gt;이 입력된 곳은 3 * 3 정사각형이 만들어지는 곳이므로 dp[i][j] = 3 이 되어야한다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 규칙으로 데이터가 배열 탐색 순서에 맞춰서 dp값이 수정된다고 가정했을때,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dp[i][j] = dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1] 중 가장 작은 값 + 1 이라고 생각할 수 있다&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1586770868510&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[i][j] = min(dp[i-1][j- 1], min(dp[i-1][j], dp[i][j - 1])) + 1;
//dp[i][j] 값을 인접한 세가지 값 중, 가장 작은 값 + 1 으로 변경

ans = max(ans, dp[i][j]);
//결과값 출력을 위한 값 수정&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 이유는 실제로 계산되는 과정을 보면 알 수 있다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;*1&lt;/b&gt;&lt;/span&gt; 은 당연하게도 앞서 언급된 세가지 값이 모두 2이므로 dp[i][j] = 3 이 되는 것을 볼&amp;nbsp; 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;b&gt;*1&lt;/b&gt;&lt;/span&gt; 은 비록 dp[i - 1][j - 1] = 3 이지만, 나머지 두 값이 1이므로 가장 작은 값에 1을 더한 dp[i][j] = 2 가 되는 것을 확인할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다이나믹 프로그래밍 문제 관점에 보면 2차원 배열을 사용하는 기본적인 개념의 문제였다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-04-13 오후 6.47.16.png&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMcD8o/btqDn0P0uSM/Abw8qsk6oMF7WUB7GtSUWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMcD8o/btqDn0P0uSM/Abw8qsk6oMF7WUB7GtSUWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMcD8o/btqDn0P0uSM/Abw8qsk6oMF7WUB7GtSUWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMcD8o%2FbtqDn0P0uSM%2FAbw8qsk6oMF7WUB7GtSUWK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-04-13 오후 6.47.16.png&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;146&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: right;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;개발환경&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;C++@Xcode&lt;br /&gt;macOS 10.14 Mojave&lt;/span&gt;&lt;/p&gt;</description>
      <category>BAEKJOON/DP</category>
      <category>1915번</category>
      <category>1915번 백준</category>
      <category>백준</category>
      <category>백준 1915번</category>
      <category>백준 dp</category>
      <category>백준 알고리즘</category>
      <author>우아한 컴공인</author>
      <guid isPermaLink="true">https://meeenomino.tistory.com/5</guid>
      <comments>https://meeenomino.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 13 Apr 2020 18:24:31 +0900</pubDate>
    </item>
  </channel>
</rss>