<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Devjo의 코딩</title>
    <link>https://devyoseph.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 25 Jun 2026 20:51:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>devyoseph</managingEditor>
    <image>
      <title>Devjo의 코딩</title>
      <url>https://tistory1.daumcdn.net/tistory/4963887/attach/8a1402465c394bc19785fe235213b261</url>
      <link>https://devyoseph.tistory.com</link>
    </image>
    <item>
      <title>[Java] Baekjoon1976: 여행 가자</title>
      <link>https://devyoseph.tistory.com/281</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;여행 가자&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2 초&lt;/td&gt;
&lt;td&gt;128 MB&lt;/td&gt;
&lt;td&gt;19988&lt;/td&gt;
&lt;td&gt;7720&lt;/td&gt;
&lt;td&gt;5718&lt;/td&gt;
&lt;td&gt;37.837%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, E-A의 길이 있고, 동혁이의 여행 계획이 E C B C D 라면 E-A-B-C-B-C-B-D라는 여행경로를 통해 목적을 달성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도시들의 개수와 도시들 간의 연결 여부가 주어져 있고, 동혁이의 여행 계획에 속한 도시들이 순서대로 주어졌을 때 가능한지 여부를 판별하는 프로그램을 작성하시오. 같은 도시를 여러 번 방문하는 것도 가능하다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 줄에 도시의 수 N이 주어진다. N은 200이하이다. 둘째 줄에 여행 계획에 속한 도시들의 수 M이 주어진다. M은 1000이하이다. 다음 N개의 줄에는 N개의 정수가 주어진다. i번째 줄의 j번째 수는 i번 도시와 j번 도시의 연결 정보를 의미한다.&amp;nbsp;1이면 연결된 것이고 0이면 연결이 되지 않은 것이다. A와 B가 연결되었으면 B와 A도 연결되어 있다. 마지막 줄에는 여행 계획이 주어진다. 도시의 번호는 1부터 N까지 차례대로 매겨져 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 줄에 가능하면 YES 불가능하면 NO를 출력한다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvd06z/btrub89GLmP/3m1RISXulOZviLV8IvNKt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvd06z/btrub89GLmP/3m1RISXulOZviLV8IvNKt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvd06z/btrub89GLmP/3m1RISXulOZviLV8IvNKt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvd06z%2Fbtrub89GLmP%2F3m1RISXulOZviLV8IvNKt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1051&quot; height=&quot;254&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결관계만 알아보는 방법에는 크게 두가지가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS를 통해 재귀호출을 통한 방문체크 방식, 유니온 파인드를 이용한 합집합 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값이 많으므로 유니온 파인드 방식을 이용해 구현했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;유니온 파인드 구현 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. find() 메소드 + union() 메서드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645627883713&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static int[] parents;

static int find(int a) { // 현재 집합의 대표값을 구해주는 메소드
    if(parents[a]==a) return a;

    parents[a] = find(parents[a]); //경로 압축 기능
    
    return parents[a]; //부모를 재귀적으로 호출
}

static void union(int a, int b) { // 두 집합을 합치는 메소드
    int aRoot = find(a); //원소 a가 속한 집합의 대표를 찾아서 저장
    int bRoot = find(b); //원소 b가 속한 집합의 대표를 찾아서 저장

    parents[aRoot] = bRoot; // 대표값의 부모만 변경
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거의 암기 수준입니다. 유니온 파인드 구현에 필수인 두 메서드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 초기 집합 : 자기 자신이 대표인 각각의 집합 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니온 파인드의 목적은 서로소인 집합을 빠르게 합치는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 모든 원소를 먼저 집합의 개념으로 만들어주어야 하며 집합의 대표값을 생성해주면 곧 자기 자신이 대표인 집합이됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645628196035&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;parents = new int[N]; // 원소 N개 존재

for(int i=1; i&amp;lt;N; i++) {
   parents[i] = i; // 자기 자신이 곧 대표 = 원소가 1개인 집합들 생성 
}&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;size18&quot;&gt;&lt;b&gt;합치기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결관계가 주어집니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645628285842&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0 1 0   // 0번 도시는 1번 도시와 연결
1 0 1	// 1번 도시는 0번 도시와 연결, 1번 도시는 2번 도시와 연결
0 1 0	// 2번 도시는 1번 도시와 연결&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 경우 연결관계를 주석과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;union 메서드를 이용해 모조리 합쳐줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645628393516&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; N; i++) {
   st = new StringTokenizer(br.readLine()); // 입력값을 라인마다 받아주고
   
   for (int j = 0; j &amp;lt; N; j++) {
       if(st.nextToken().equals(&quot;1&quot;)) { // 1, 즉 연결되어있으면
           union(i,j); // 두 원소가 포함된 집합을 서로 합쳐줌
       }
   }
   
}&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;size18&quot;&gt;&lt;b&gt;결과 구하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 도시를 방문하기 위해선 도시가 서로 연결되어있다는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 말을 집합으로 가져오면 &lt;b&gt;같은 집합 안에 포함&lt;/b&gt;된 도시라는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 각 원소가 가리키는 &lt;b&gt;대표값이 같습&lt;/b&gt;니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제시된 도시 중 첫번째 도시의 대표값을 추출한 다음 이 대표값과 다른 도시의 대표값이 모두 같은지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645628592956&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;boolean judge = true; // 같은 도시인지 판별하는 불린 변수

st = new StringTokenizer(br.readLine());

int root = find(Integer.parseInt(st.nextToken())-1); // 제시된 처음 도시 대표값 추출

while(M--&amp;gt;1) {
   if(root!=find(Integer.parseInt(st.nextToken())-1)) { // 그 뒤의 도시들도 같은 대표인지 확인
       judge = false; // 다르다면? 서로 같은 집합이 아니므로 false
       break;
   }
}
System.out.println(judge?&quot;YES&quot;:&quot;NO&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645628609330&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {
	static int[] parents;
	
	static int find(int a) {
		if(parents[a]==a) return a;
		
		parents[a] = find(parents[a]);
		return parents[a];
	}
	
	static void union(int a, int b) {
		int aRoot = find(a);
		int bRoot = find(b);
		
		parents[aRoot] = bRoot;
	}
	public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   StringTokenizer st;
	   int N = Integer.parseInt(br.readLine());
	   parents = new int[N];
	   for(int i=1; i&amp;lt;N; i++) {
		   parents[i] = i;
	   }
	   int M = Integer.parseInt(br.readLine());
	   
	   for (int i = 0; i &amp;lt; N; i++) {
		   st = new StringTokenizer(br.readLine());
		   for (int j = 0; j &amp;lt; N; j++) {
			   if(st.nextToken().equals(&quot;1&quot;)) {
				   union(i,j);
			   }
		   }
	   }
	   
	   boolean judge = true;
	   
	   st = new StringTokenizer(br.readLine());
	   
	   int root = find(Integer.parseInt(st.nextToken())-1);
	   
	   while(M--&amp;gt;1) {
		   if(root!=find(Integer.parseInt(st.nextToken())-1)) {
			   judge = false;
			   break;
		   }
	   }
	   System.out.println(judge?&quot;YES&quot;:&quot;NO&quot;);
	}   
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7lW38/btrubuE7dNy/twYJgWgBkou3eIo4MBj0p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7lW38/btrubuE7dNy/twYJgWgBkou3eIo4MBj0p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7lW38/btrubuE7dNy/twYJgWgBkou3eIo4MBj0p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7lW38%2FbtrubuE7dNy%2FtwYJgWgBkou3eIo4MBj0p1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;811&quot; height=&quot;59&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>1976 JAVA</category>
      <category>1976 여행 가자</category>
      <category>java 1976</category>
      <category>백준 1976</category>
      <category>백준 java 1976</category>
      <category>백준 자바 1976</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/281</guid>
      <comments>https://devyoseph.tistory.com/281#entry281comment</comments>
      <pubDate>Thu, 24 Feb 2022 00:04:37 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Baekjoon4963: 섬의 개수</title>
      <link>https://devyoseph.tistory.com/280</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;섬의 개수&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 초&lt;/td&gt;
&lt;td&gt;128 MB&lt;/td&gt;
&lt;td&gt;40870&lt;/td&gt;
&lt;td&gt;20479&lt;/td&gt;
&lt;td&gt;14687&lt;/td&gt;
&lt;td&gt;49.051%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램을 작성하시오.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;283&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gj5X3/btrt84yT8LV/ZiaogO898ZG58Bc0SzpK5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gj5X3/btrt84yT8LV/ZiaogO898ZG58Bc0SzpK5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gj5X3/btrt84yT8LV/ZiaogO898ZG58Bc0SzpK5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGj5X3%2Fbtrt84yT8LV%2FZiaogO898ZG58Bc0SzpK5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;283&quot; height=&quot;141&quot; data-origin-width=&quot;283&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;한 정사각형과 가로, 세로 또는 대각선으로 연결되어 있는 사각형은 걸어갈 수 있는 사각형이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 정사각형이 같은 섬에 있으려면, 한 정사각형에서 다른 정사각형으로 걸어서 갈 수 있는 경로가 있어야 한다. 지도는 바다로 둘러싸여 있으며, 지도 밖으로 나갈 수 없다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째 줄부터 h개 줄에는 지도가 주어진다. 1은 땅, 0은 바다이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력의 마지막 줄에는 0이 두 개 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 테스트 케이스에 대해서, 섬의 개수를 출력한다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;686&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpdWLg/btrt3gHDSRQ/b4MWR6pfESGx55aTpqVHBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpdWLg/btrt3gHDSRQ/b4MWR6pfESGx55aTpqVHBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpdWLg/btrt3gHDSRQ/b4MWR6pfESGx55aTpqVHBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpdWLg%2Fbtrt3gHDSRQ%2Fb4MWR6pfESGx55aTpqVHBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1065&quot; height=&quot;686&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로의 포함관계를 구할 수 있는 알고리즘에는 DFS와 유니온 파인드가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원소가 많을수록 유니온 파인드가 유리하지만 배열의 크기가 50x50이므로 DFS로 빠르게 구현할 수 있다고 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지도 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;땅 아니면 바다이므로 값은 2개로 나타낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2차원 불린 배열을 통해 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;w h 순으로 주어지고 0 0을 입력 받는 순간 전체 종료합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특이한 점은 너비 높이 = &lt;b&gt;열 / 행&lt;/b&gt; 으로 주어진다는 점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 순서에 주의해서 반복문을 이용해 값을 넣어줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645576405627&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while(true) { 
    st = new StringTokenizer(br.readLine());
    int w = Integer.parseInt(st.nextToken());
    int h = Integer.parseInt(st.nextToken());

    if(w==0 &amp;amp;&amp;amp; h==0) break;

    boolean[][] map = new boolean[h][w];

    for(int i=0; i&amp;lt;h; i++) { //행은 h
        st = new StringTokenizer(br.readLine());
        for(int j=0; j&amp;lt;w; j++) { // 열은 w 
            if(st.nextToken().equals(&quot;1&quot;)) {
                map[i][j] = true;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DFS&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영역 표시를 위해 섬에 포함된 땅 어느 부분을 밟는 순간 1을 세어주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그와 동시에 연결된 모든 땅을 방문 표시함으로 조사했다라는 표시를 남깁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도를 재활용하지 않기 때문에 방문체크 배열을 만들지 않고 땅을 아예 false로 바꾸어(지워서) 바다로 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변경사항&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검사하다 배열 밖으로 벗어날 수 있으므로 w,h 값을 메소드의 파라미터로 넣어주거나 정적변수로 할당합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645576836405&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static int w,h,cnt; // main메소드 바깥 부분에 정적 변수로 할당하고 

static void dfs(int row, int col) { // 메소드 생성

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바깥 범위라면 현재 메소드를 종료하도록 하고 대각 방향까지 넣어줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645577162456&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	static int[] dx = {0,0,1,-1,1,-1,-1,1}; //8방좌표
	static int[] dy = {1,-1,0,0,1,-1,1,-1};
	
	static void dfs(int row, int col) {
		if(row&amp;lt;0 || row&amp;gt;=h || col&amp;lt;0 || col&amp;gt;=w || !map[row][col]) return;
        //경계값 조건 + 만약 밟은 곳이 바다라면 종료
        
		map[row][col] = false; //현재가 땅이라면 바다로 바꿈
		
		for(int i=0; i&amp;lt;8; i++) {
			dfs(row+dx[i],col+dy[i]);
		}
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;카운트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 땅을 밟는 순간 연결된 모든 구역을 바다로 만들면서 1을 카운트합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 지도를 탐색하면서 이를 반복해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645577308186&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;
public class Main {
	static int w,h,cnt;
	static boolean[][] map;
	
	static int[] dx = {0,0,1,-1,1,-1,-1,1}; //8방좌표
	static int[] dy = {1,-1,0,0,1,-1,1,-1};
	
	static void dfs(int row, int col) {
		if(row&amp;lt;0 || row&amp;gt;=h || col&amp;lt;0 || col&amp;gt;=w || !map[row][col]) return;
		
		map[row][col] = false;
		
		for(int i=0; i&amp;lt;8; i++) {
			dfs(row+dx[i],col+dy[i]);
		}
	}
	

public static void main(String[] args) throws IOException{
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	StringTokenizer st;
	
	while(true) { 
		st = new StringTokenizer(br.readLine());
		w = Integer.parseInt(st.nextToken());
		h = Integer.parseInt(st.nextToken());
		cnt = 0;
		if(w==0 &amp;amp;&amp;amp; h==0) break;
		
		map = new boolean[h][w];
		
		for(int i=0; i&amp;lt;h; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j=0; j&amp;lt;w; j++) {
				if(st.nextToken().equals(&quot;1&quot;)) {
					map[i][j] = true;
				}
			}
		}
		
		for(int i=0; i&amp;lt;h; i++) {
			for(int j=0; j&amp;lt;w; j++) {
				if(map[i][j]) {
					cnt++;
					dfs(i,j);
				}
			}
		}
		System.out.println(cnt);
	}

}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb6W2O/btrt6eV6iUy/6QbCQxjlquxwRlbO4TPF20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb6W2O/btrt6eV6iUy/6QbCQxjlquxwRlbO4TPF20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb6W2O/btrt6eV6iUy/6QbCQxjlquxwRlbO4TPF20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb6W2O%2Fbtrt6eV6iUy%2F6QbCQxjlquxwRlbO4TPF20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;819&quot; height=&quot;59&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>java 4963</category>
      <category>java 섬의 개수 4963</category>
      <category>백준 4963</category>
      <category>백준 4963 java</category>
      <category>백준 자바 4963</category>
      <category>자바 4963</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/280</guid>
      <comments>https://devyoseph.tistory.com/280#entry280comment</comments>
      <pubDate>Wed, 23 Feb 2022 09:50:04 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Baekjoon1717: 집합의 표현</title>
      <link>https://devyoseph.tistory.com/279</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;집합의 표현&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2 초&lt;/td&gt;
&lt;td&gt;128 MB&lt;/td&gt;
&lt;td&gt;54678&lt;/td&gt;
&lt;td&gt;17296&lt;/td&gt;
&lt;td&gt;10487&lt;/td&gt;
&lt;td&gt;28.478%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기에 {0}, {1}, {2}, ... {n} 이 각각 n+1개의 집합을 이루고 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집합을 표현하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 n(1 &amp;le; n &amp;le; 1,000,000), m(1 &amp;le; m &amp;le; 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 a가 포함되어 있는 집합과, b가 포함되어 있는 집합을 합친다는 의미이다. 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산은 1 a b의 형태로 입력이 주어진다. 이는 a와 b가 같은 집합에 포함되어 있는지를 확인하는 연산이다. a와 b는 n 이하의 자연수 또는 0이며 같을 수도 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1로 시작하는 입력에 대해서 한 줄에 하나씩 YES/NO로 결과를 출력한다. (yes/no 를 출력해도 된다)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UtN2i/btrtLV5gx3d/yw1OYXOEpFEK49uBHPI80k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UtN2i/btrtLV5gx3d/yw1OYXOEpFEK49uBHPI80k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UtN2i/btrtLV5gx3d/yw1OYXOEpFEK49uBHPI80k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUtN2i%2FbtrtLV5gx3d%2Fyw1OYXOEpFEK49uBHPI80k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1059&quot; height=&quot;313&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니온 파인드를 이용한 풀이를 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 집합의 대표를 자기 자신으로 설정해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645504287157&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; n = Integer.parseInt(st.nextToken());
 int m = Integer.parseInt(st.nextToken());

 parents = new int[n+1];

 for(int i=0; i&amp;lt;n+1; i++) {
     parents[i] = i; //자기 자신이 대표
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;해당 집합의 대표 찾기 메소드 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니온 파인드의 핵심 메소드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차원 배열에는 해당 원소의 부모가 들어있는데 부모를 연속적으로 호출해서 자기 자신이 부모가 되는 값까지 거슬러 오릅니다.(집합 대표)&lt;/p&gt;
&lt;pre id=&quot;code_1645504406810&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static int find(int a) { //대표찾기
    if(parents[a]==a) return a; //자기 자신이 부모라면 = 곧 이 집합의 대표

    parents[a] = find(parents[a]); // 압축: 현재 원소 a를 대표 가지에 붙여줌
    return parents[a]; //대표를 찾아 반환
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 부모를 찾아 오르면서 좌표압축을 해줄 수 있습니다. (현재 가지를 떼어내서 부모가지에 붙여줌)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;합집합 메소드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 원소가 포함된 집합의 대표를 찾은 다음 한 집합 대표의 부모를 다른 집합 대표로 바꿔주면 서로 합쳐집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 find 메소드를 기반으로 대표 번호를 찾고&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645504515218&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void union(int a, int b) { //합치기
    int aRoot = find(a);
    int bRoot = find(b);
    if(aRoot == bRoot) return; //두 집합이 같은 경우 리턴

    parents[bRoot] = aRoot; // 다르면 한쪽에 합치기
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서로 포함관계 확인하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 합집합 메소드만 안다면 거의 동일한 구성으로 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645504668803&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void isUnited(int a, int b) { //같으면 true

    int aRoot = find(a);
    int bRoot = find(b);

    if(aRoot == bRoot) {//두 집합이 같은 경우
        sb.append(&quot;YES&quot;+&quot;\n&quot;); //스트링 빌더로 저장했습니다
        return;
    }

    sb.append(&quot;NO&quot;+&quot;\n&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645504701541&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;
public class Main {
	
	static int n,parents[];
	static StringBuilder sb = new StringBuilder();
	
	static int find(int a) { //대표찾기
		if(parents[a]==a) return a;
		
		parents[a] = find(parents[a]); // 압축
		return parents[a];
	}
	
	static void isUnited(int a, int b) { //같으면 true
		
		int aRoot = find(a);
		int bRoot = find(b);
		
		if(aRoot == bRoot) {//두 집합이 같은 경우
			sb.append(&quot;YES&quot;+&quot;\n&quot;);
			return;
		}
		
		sb.append(&quot;NO&quot;+&quot;\n&quot;);
	}
	
	static void union(int a, int b) { //합치기
		int aRoot = find(a);
		int bRoot = find(b);
		if(aRoot == bRoot) return; //두 집합이 같은 경우 리턴
		
		parents[bRoot] = aRoot; // 다르면 한쪽에 합치기
	}
	
public static void main(String[] args) throws IOException{
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	StringTokenizer st;
	
	 st = new StringTokenizer(br.readLine());
	 n = Integer.parseInt(st.nextToken());
	 int m = Integer.parseInt(st.nextToken());
	 
	 parents = new int[n+1];
	 
	 for(int i=0; i&amp;lt;n+1; i++) {
		 parents[i] = i; //자기 자신이 대표
	 }
		 
	 while(m--&amp;gt;0) { //m개의 입력값 받아주기
		 st = new StringTokenizer(br.readLine());
		 int command = Integer.parseInt(st.nextToken());
		 int a = Integer.parseInt(st.nextToken());
		 int b = Integer.parseInt(st.nextToken());
		 
		 switch(command) { //0은 합집합, 1은 합집합 확인 연산
		 	case 0: union(a,b); break;
		 	case 1: isUnited(a, b); break;
		 }
	 }
		 
	 System.out.println(sb.toString());
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl5RSm/btrt1IXpOjf/HdCnvN6jqFThfEKnRrkCp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl5RSm/btrt1IXpOjf/HdCnvN6jqFThfEKnRrkCp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl5RSm/btrt1IXpOjf/HdCnvN6jqFThfEKnRrkCp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl5RSm%2Fbtrt1IXpOjf%2FHdCnvN6jqFThfEKnRrkCp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;820&quot; height=&quot;57&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>1717 집합의 표현</category>
      <category>baekjoon 1717</category>
      <category>java 1717</category>
      <category>백준 1717</category>
      <category>백준 java 1717</category>
      <category>백준 자바 1717</category>
      <category>유니온파인드 백준</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/279</guid>
      <comments>https://devyoseph.tistory.com/279#entry279comment</comments>
      <pubDate>Tue, 22 Feb 2022 13:39:54 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Baekjoon1992: 쿼드트리</title>
      <link>https://devyoseph.tistory.com/278</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;쿼드트리&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2 초&lt;/td&gt;
&lt;td&gt;128 MB&lt;/td&gt;
&lt;td&gt;26291&lt;/td&gt;
&lt;td&gt;16169&lt;/td&gt;
&lt;td&gt;12685&lt;/td&gt;
&lt;td&gt;60.909%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흑백 영상을 압축하여 표현하는 데이터 구조로 쿼드 트리(Quad Tree)라는 방법이 있다. 흰 점을 나타내는 0과 검은 점을 나타내는 1로만 이루어진 영상(2차원 배열)에서 같은 숫자의 점들이 한 곳에 많이 몰려있으면, 쿼드 트리에서는 이를 압축하여 간단히 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 영상이 모두 0으로만 되어 있으면 압축 결과는 &quot;0&quot;이 되고, 모두 1로만 되어 있으면 압축 결과는 &quot;1&quot;이 된다. 만약 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축하게 되며, 이 4개의 영역을 압축한 결과를 차례대로 괄호 안에 묶어서 표현한다&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg93G0/btrtDfHEVDp/IqqK4Yn7HDvx1NM0oIDbu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg93G0/btrtDfHEVDp/IqqK4Yn7HDvx1NM0oIDbu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg93G0/btrtDfHEVDp/IqqK4Yn7HDvx1NM0oIDbu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg93G0%2FbtrtDfHEVDp%2FIqqK4Yn7HDvx1NM0oIDbu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;408&quot; height=&quot;186&quot; data-origin-width=&quot;408&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림에서 왼쪽의 영상은 오른쪽의 배열과 같이 숫자로 주어지며, 이 영상을 쿼드 트리 구조를 이용하여 압축하면 &quot;(0(0011)(0(0111)01)1)&quot;로 표현된다.&amp;nbsp; N &amp;times;N 크기의 영상이 주어질 때, 이 영상을 압축한 결과를 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 &amp;le; N &amp;le; 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또는 1의 숫자로 이루어져 있으며, 영상의 각 점들을 나타낸다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영상을 압축한 결과를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;색종이 문제와 비슷한 원리로 풀이할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 차이점은 만약 현재 사각형이 4개로 쪼개지지 않는다면 그냥 숫자로 나타내지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쪼개진다면 (소괄호)로 감싸주어야 한다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력값 받아주기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값은 그냥 문자열 그대로 받아서 리스트에 넣었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645094541516&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;N = int(input())
lst = []

for i in range(N):
    lst.append(input()) # 문자열이 들어갑니다&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;메소드 구성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 영상의 크기 N을 메소드의 인자로 넘겨줍니다. 매 재귀마다 현재 영상의 크기를 바로 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 모두 같은 색인지 확인하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 영상의 맨 왼쪽 위의 한 점을 추출해서 그 값을 저장합니다 (0이거나 1).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 영상의 탐색 시작점을 row, col이라고 했을 때 그 점을 기준으로 N크기만큼 탐색합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음의 추출한 값과 달라진다면 4갈래로 쪼개주어야합니다. 불린 변수를 하나 지정해서 값이 달라지면 값이 바뀌도록 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645094851655&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(row, col, N): # N은 영상의 크기
    global lst # 리스트의 정보를 가져옴

    S = lst[row][col] # 글자 추출
    
    judge = True # 하나라도 다른게 있다면 False로 바꿈
    
    L = '' //초기 문자열
    
    # 모두 같은 색인지 검사하는 부분
    for i in range(N):
        for j in range(N):
            if S != lst[row+i][col+j]:
                judge = False # 다르다면? False
                break&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;2) 소괄호 넣기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 4갈래로 나눌 필요가 없다면? 그냥 0이나 1을 출력하면 됩니다. (judge = True)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;b&gt;나눠야한다면 소괄호로 감싸주고 그 안에서 재귀를 호출&lt;/b&gt;합니다. (judge = False)&lt;/p&gt;
&lt;pre id=&quot;code_1645094887871&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    if judge:
        L = S
    else:
        L = '('+dfs(row, col, N // 2)+dfs(row, col + N // 2, N // 2)+dfs(row + N // 2, col, N // 2)+dfs(row + N // 2, col + N//2, N // 2)+')'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645094432756&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(row, col, N): # L은 글자
    global lst

    S = lst[row][col] # 글자 추출
    judge = True
    L = ''
    # 모두 같은 색인지 검사하는 부분
    for i in range(N):
        for j in range(N):
            if S != lst[row+i][col+j]:
                judge = False
                break
    if judge:
        L = S
    else:
        L = '('+dfs(row, col, N // 2)+dfs(row, col + N // 2, N // 2)+dfs(row + N // 2, col, N // 2)+dfs(row + N // 2, col + N//2, N // 2)+')'

    return L

N = int(input())
lst = []

for i in range(N):
    lst.append(input()) # 문자열이 들어갑니다

print(dfs(0, 0, N))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r59AJ/btrtyfh3HXj/NzO2ZktQkV69zvPy1zUsSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r59AJ/btrtyfh3HXj/NzO2ZktQkV69zvPy1zUsSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r59AJ/btrtyfh3HXj/NzO2ZktQkV69zvPy1zUsSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr59AJ%2Fbtrtyfh3HXj%2FNzO2ZktQkV69zvPy1zUsSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1006&quot; height=&quot;76&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>1992 쿼드트리</category>
      <category>1992 파이썬</category>
      <category>백준 1992</category>
      <category>백준 쿼드트리</category>
      <category>백준 파이썬 1992</category>
      <category>쿼드트리 파이썬</category>
      <category>파이썬 쿼드트리</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/278</guid>
      <comments>https://devyoseph.tistory.com/278#entry278comment</comments>
      <pubDate>Thu, 17 Feb 2022 19:50:37 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Baekjoon1987: 알파벳</title>
      <link>https://devyoseph.tistory.com/277</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;알파벳&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2 초&lt;/td&gt;
&lt;td&gt;256 MB&lt;/td&gt;
&lt;td&gt;64557&lt;/td&gt;
&lt;td&gt;20424&lt;/td&gt;
&lt;td&gt;12535&lt;/td&gt;
&lt;td&gt;29.011%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 지나는 칸은 좌측 상단의 칸도 포함된다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 R과 C가 빈칸을 사이에 두고 주어진다. (1 &amp;le; R,C &amp;le; 20) 둘째 줄부터 R개의 줄에 걸쳐서 보드에 적혀 있는 C개의 대문자 알파벳들이 빈칸 없이 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 말이 지날 수 있는 최대의 칸 수를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말은 (1,1)부터 움직이고 지금까지 지나온 모든 알파벳과는 다른 알파벳을 밟을 수 있다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;움직일 수 있는 최대값을 구해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;방문 체크 배열&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파벳을 인덱싱 해야합니다. A는 0으로 B는 1로... Z는 25로 나타낼 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java의 형변환을 통해 대문자를 아스키코드로 변환할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645087534387&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int idx = (int)'A'%65; // 0 = A의 번호를 0으로 시작하기 위해서 65로 나눈 나머지를 구합니다
int idx = (int)'Z'%65; // 25&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;백트래킹&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가지치기를 통해 이미 경계값을 벗어나거나 방문한 곳이라면 바로 종료시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 가지치기를 통과했다면 방문해도 된다는 뜻이므로 방문체크를 해주고 다음 재귀로 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나왔을 때 방문해제를 해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645089050195&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static void dfs(int row,int col,int cnt) {
		if(row&amp;lt;0 || row &amp;gt;= R || col&amp;lt;0 || col&amp;gt;=C || v[(int)arr[row][col]%65]) {
			return;
		} // 가지치기를 이용해 경계값을 벗어나면 종료시키고 이미 방문한 곳이라도 종료시킵니다.
		
		
		v[(int)arr[row][col]%65] = true; //방문체크
		
		// 다음 재귀호출
		
		v[(int)arr[row][col]%65] = false; //방문해제
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이동&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일일히 쓸 수 있지만 반복문을 이용해 코드를 단순화했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645089157375&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static int[] dx = {0,0,1,-1}; //반복문으로 돌리기 위한 방향 배열입니다
static int[] dy = {1,-1,0,0};&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1645089177366&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i=0; i&amp;lt;4; i++) {
	dfs(row+dx[i],col+dy[i],cnt); // 다음 재귀 호출
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645088993777&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package workplace;
import java.util.*;

public class Main {
	/** 알파벳을 숫자 표현 = 아스키 코드를 65로 나눈 나머지로 표현했습니다 */
	
	static int R,C,MAX=0; //변수들을 dfs 메소드에서 사용합니다
	static boolean[] v; //방문체크 배열
	static char arr[][]; //알파벳을 기록할 배열입니다
	static int[] dx = {0,0,1,-1}; //반복문으로 돌리기 위한 방향 배열입니다
	static int[] dy = {1,-1,0,0};
	
	static void dfs(int row,int col,int cnt) {
		if(row&amp;lt;0 || row &amp;gt;= R || col&amp;lt;0 || col&amp;gt;=C || v[(int)arr[row][col]%65]) {
			return;
		} // 가지치기를 이용해 경계값을 벗어나면 종료시키고 이미 방문한 곳이라도 종료시킵니다.
		
		cnt += 1; // 방문을 확정합니다. 현재까지 움직인 거리(cnt)에 1을 더합니다
		v[(int)arr[row][col]%65] = true; //방문체크
		
		MAX = Math.max(MAX, cnt); //최대값을 갱신합니다
		
		for(int i=0; i&amp;lt;4; i++) {
			dfs(row+dx[i],col+dy[i],cnt);
		}
		
		v[(int)arr[row][col]%65] = false; //방문해제
	}
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		R = sc.nextInt();
		C = sc.nextInt();
		v = new boolean[26]; //방문 체크 배열: 알파벳 체크
		arr = new char[R][C];
		
		for(int i=0; i&amp;lt;R; i++) {
			String s = sc.next();
			for(int j=0; j&amp;lt;C; j++) {
				arr[i][j] = s.charAt(j);
			}
		}
		
		dfs(0,0,0); // (1, 1)부터 시작이지만 배열 상으론 (0, 0) 입니다
		System.out.println(MAX);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csDVdD/btrtwHZXPZq/KjGDySLJh1iZCkmq6haHsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csDVdD/btrtwHZXPZq/KjGDySLJh1iZCkmq6haHsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csDVdD/btrtwHZXPZq/KjGDySLJh1iZCkmq6haHsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsDVdD%2FbtrtwHZXPZq%2FKjGDySLJh1iZCkmq6haHsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1007&quot; height=&quot;72&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>1987 알파벳</category>
      <category>java 1987</category>
      <category>java 1987 알파벳</category>
      <category>java 백준 1987</category>
      <category>백준 java 1987</category>
      <category>알파벳 1987 java</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/277</guid>
      <comments>https://devyoseph.tistory.com/277#entry277comment</comments>
      <pubDate>Thu, 17 Feb 2022 18:14:16 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Baekjoon2630: 색종이 만들기</title>
      <link>https://devyoseph.tistory.com/276</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;색종이 만들기&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 초&lt;/td&gt;
&lt;td&gt;128 MB&lt;/td&gt;
&lt;td&gt;18801&lt;/td&gt;
&lt;td&gt;12673&lt;/td&gt;
&lt;td&gt;10423&lt;/td&gt;
&lt;td&gt;69.556%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 &amp;lt;그림 1&amp;gt;과 같이 여러개의 정사각형칸들로 이루어진 정사각형 모양의 종이가 주어져 있고, 각 정사각형들은 하얀색으로 칠해져 있거나 파란색으로 칠해져 있다. 주어진 종이를 일정한 규칙에 따라 잘라서 다양한 크기를 가진 정사각형 모양의 하얀색 또는 파란색 색종이를 만들려고 한다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;215&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bunOPb/btrtzaAvmBX/8cHkl5XVKT8OdmTcpTIG9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bunOPb/btrtzaAvmBX/8cHkl5XVKT8OdmTcpTIG9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bunOPb/btrtzaAvmBX/8cHkl5XVKT8OdmTcpTIG9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbunOPb%2FbtrtzaAvmBX%2F8cHkl5XVKT8OdmTcpTIG9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;215&quot; height=&quot;221&quot; data-origin-width=&quot;215&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;전체 종이의 크기가 N&amp;times;N(N=2k, k는 1 이상 7 이하의 자연수) 이라면 종이를 자르는 규칙은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 종이가 모두 같은 색으로 칠해져 있지 않으면 가로와 세로로 중간 부분을 잘라서 &amp;lt;그림 2&amp;gt;의 I, II, III, IV와 같이 똑같은 크기의 네 개의 N/2 &amp;times; N/2색종이로 나눈다. 나누어진 종이 I, II, III, IV 각각에 대해서도 앞에서와 마찬가지로 모두 같은 색으로 칠해져 있지 않으면 같은 방법으로 똑같은 크기의 네 개의 색종이로 나눈다. 이와 같은 과정을 잘라진 종이가 모두 하얀색 또는 모두 파란색으로 칠해져 있거나, 하나의 정사각형 칸이 되어 더 이상 자를 수 없을 때까지 반복한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 규칙에 따라 잘랐을 때 &amp;lt;그림 3&amp;gt;은 &amp;lt;그림 1&amp;gt;의 종이를 처음 나눈 후의 상태를, &amp;lt;그림 4&amp;gt;는 두 번째 나눈 후의 상태를, &amp;lt;그림 5&amp;gt;는 최종적으로 만들어진 다양한 크기의 9장의 하얀색 색종이와 7장의 파란색 색종이를 보여주고 있다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcRZbg/btrtCTYQ6HA/kegkPBvO7kIV3Sj6VXZNrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcRZbg/btrtCTYQ6HA/kegkPBvO7kIV3Sj6VXZNrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcRZbg/btrtCTYQ6HA/kegkPBvO7kIV3Sj6VXZNrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcRZbg%2FbtrtCTYQ6HA%2FkegkPBvO7kIV3Sj6VXZNrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;487&quot; height=&quot;488&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;입력으로 주어진 종이의 한 변의 길이 N과 각 정사각형칸의 색(하얀색 또는 파란색)이 주어질 때 잘라진 하얀색 색종이와 파란색 색종이의 개수를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. 하얀색으로 칠해진 칸은 0, 파란색으로 칠해진 칸은 1로 주어지며, 각 숫자 사이에는 빈칸이 하나씩 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 잘라진 햐얀색 색종이의 개수를 출력하고, 둘째 줄에는 파란색 색종이의 개수를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRE4ul/btrtCUwIokW/REdPeJtj15yWKks4ankeb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRE4ul/btrtCUwIokW/REdPeJtj15yWKks4ankeb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRE4ul/btrtCUwIokW/REdPeJtj15yWKks4ankeb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRE4ul%2FbtrtCUwIokW%2FREdPeJtj15yWKks4ankeb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;375&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사각형 검사&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 사각형을 기준으로 맨 왼쪽, 위 원소를 추출합니다. 그 원소를 기준으로 이제 비교를 시작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 첫번째 원소랑 달리지는 순간? 반복문을 멈추고 4방향으로 쪼갭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사각형 방향 통과&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문 끝에 다다른 경우 사각형을 더 이상 쪼개지 않고 첫번째 원소가 0인지 1인지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 원소가 0이라면 하얀색 색종이에 +1, 첫번째 원소가 1이라면 파란색 색종이에 +1 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체코드1&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645085806302&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(row,col,n):
    global N,lst,white,blue

    first = lst[row][col]

    judge = True # 일단 색종이가 전부 같은 색이라고 가정

    # 모두 같은 색인지 검사하는 부분
    for i in range(row,row+n):
        for j in range(col,col+n):
            if lst[i][j] != first:
                judge = False   # 하나라도 다른 색이 있다면
                break           # 반복문 종료
        if not judge:
            break

    if not judge:
        dfs(row, col, int(n/2))  # 1 번째
        dfs(row, col + int(n/2),int(n/2))  # 2 번째
        dfs(row + int(n/2), col, int(n/2))  # 3 번째
        dfs(row + int(n/2), col + int(n/2), int(n/2))  # 4 번째
    else:
        if first: # first가 1이었을 때
            blue += 1
        else:
            white += 1


N = int(input())
white = blue = 0
lst = []

for i in range(N):
    lst.append(list(map(int,input().split())))

dfs(0,0,N)

print(white)
print(blue)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 너무 자바 느낌이 나서 Pythonic하게 수정해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체코드2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간에 false를 통해 빠져나오는 것과 사각형 내부 원소 모두의 합을 구해서 판단하는 것의 효율이 비슷했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두의 합이 0이라면 내부 사각형의 원소들은 모두 0이라는 뜻이며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두의 합이 nxn이라면 모두의 합이 1로 파악할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645086456821&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(row, col, n):
    global N, lst, white, blue

    S = 0

    # 모두 같은 색인지 검사하는 부분
    for i in range(n):
        for j in range(n):
            S += lst[row+i][col+j]

    if S == 0:
        white += 1
    elif S == n * n:
        blue += 1
    else:
        dfs(row, col, n // 2)  # 1 번째
        dfs(row, col + n // 2, n // 2)  # 2 번째
        dfs(row + n // 2, col, n // 2)  # 3 번째
        dfs(row + n // 2, col + n // 2, n // 2)  # 4 번째


N = int(input())
white = blue = 0
lst = []

for i in range(N):
    lst.append(list(map(int, input().split())))

dfs(0, 0, N)

print(white)
print(blue)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;995&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oVPlY/btrtxmBwUgO/icCct4JKidYUWq7if2c3OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oVPlY/btrtxmBwUgO/icCct4JKidYUWq7if2c3OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oVPlY/btrtxmBwUgO/icCct4JKidYUWq7if2c3OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoVPlY%2FbtrtxmBwUgO%2FicCct4JKidYUWq7if2c3OK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;995&quot; height=&quot;74&quot; data-origin-width=&quot;995&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>2630 python</category>
      <category>2630 파이썬 색종이</category>
      <category>python 색종이 2630</category>
      <category>백준 2630 파이썬</category>
      <category>백준 색종이 파이썬</category>
      <category>색종이 2630</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/276</guid>
      <comments>https://devyoseph.tistory.com/276#entry276comment</comments>
      <pubDate>Thu, 17 Feb 2022 17:29:19 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Baekjoon14696: 딱지놀이</title>
      <link>https://devyoseph.tistory.com/275</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;딱지놀이&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2 초&lt;/td&gt;
&lt;td&gt;512 MB&lt;/td&gt;
&lt;td&gt;4594&lt;/td&gt;
&lt;td&gt;2720&lt;/td&gt;
&lt;td&gt;2177&lt;/td&gt;
&lt;td&gt;63.193%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 어린이 A, B가 딱지놀이를 한다. 딱지놀이 규칙은 다음과 같다. 두 어린이는 처음에 여러 장의 딱지를 가지고 있고, 매 라운드마다 각자 자신이 가진 딱지 중 하나를 낸다. 딱지에는 별(★), 동그라미(●), 네모(■), 세모(▲), 네 가지 모양 중 하나 이상의 모양이 표시되어 있다. 두 어린이가 낸 딱지 중 어느 쪽이 더 강력한 것인지는 다음 규칙을 따른다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약 두 딱지의 별의 개수가 다르다면, 별이 많은 쪽의 딱지가 이긴다.&lt;/li&gt;
&lt;li&gt;별의 개수가 같고 동그라미의 개수가 다르다면, 동그라미가 많은 쪽의 딱지가 이긴다.&lt;/li&gt;
&lt;li&gt;별, 동그라미의 개수가 각각 같고 네모의 개수가 다르다면, 네모가 많은 쪽의 딱지가 이긴다.&lt;/li&gt;
&lt;li&gt;별, 동그라미, 네모의 개수가 각각 같고 세모의 개수가 다르다면, 세모가 많은 쪽의 딱지가 이긴다.&lt;/li&gt;
&lt;li&gt;별, 동그라미, 네모, 세모의 개수가 각각 모두 같다면 무승부이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 두 어린이 A, B가 낸 딱지가 다음 그림과 같다고 하자.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ9ET3/btrtsFBcRxB/0VIpHiHoplhFNvxvugkFwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ9ET3/btrtsFBcRxB/0VIpHiHoplhFNvxvugkFwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ9ET3/btrtsFBcRxB/0VIpHiHoplhFNvxvugkFwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ9ET3%2FbtrtsFBcRxB%2F0VIpHiHoplhFNvxvugkFwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;372&quot; height=&quot;254&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;위 규칙을 따르면 A의 딱지는 별 하나를 가지고 있고 B의 딱지는 별이 없으므로 승자는 A이다. 위의 그림이 라운드 1의 상황이었고, 라운드 2, 3, 4, 5의 상황이 아래 표와 같을 때, 라운드 2, 3, 4의 승자는 각각 B, B, A이며, 라운드 5에서는 무승부가 되어 이를 D로 표현하였다.&lt;/p&gt;
라운드A의 딱지B의 딱지결과
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;★&lt;/td&gt;
&lt;td&gt;●●■▲&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;■★●■▲&lt;/td&gt;
&lt;td&gt;★●●▲&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;●■▲▲&lt;/td&gt;
&lt;td&gt;■●■▲&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;★●■▲&lt;/td&gt;
&lt;td&gt;★●■&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;★★■●▲&lt;/td&gt;
&lt;td&gt;★■★▲●&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별, 동그라미, 네모, 세모를 각각 숫자 4, 3, 2, 1로 표현한다. 예를 들어, 라운드 1의 경우 어린이 A가 낸 딱지의 그림 ★는 4로 표현할 수 있고, 어린이 B가 낸 딱지의 그림 ●●■▲는 3 3 2 1 로 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라운드의 수 N과 두 어린이가 순서대로 내는 딱지의 정보가 주어졌을 때, 각 라운드별로 딱지놀이의 결과를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 딱지놀이의 총 라운드 수를 나타내는 자연수 N이 주어진다. N 은 1 이상 1,000 이하이다. 다음 줄에는 라운드 1에서 어린이 A가 내는 딱지에 나온 그림의 총 개수 a가 주어진다. a는 1 이상 100 이하이다. 뒤따라 나오는 a개의 정수는 어린이 A가 낸 딱지의 그림을 나타내는데, 각각 4, 3, 2, 1 중 하나의 값이다. 4, 3, 2, 1의 순서대로 주어지지 않을 수 있음에 주의하라. 다음 줄에는 라운드 1에서 어린이 B가 내는 딱지에 나온 그림의 총 개수 b가 주어진다. b도 1 이상 100 이하이다. 뒤따라 나오는 b개의 정수는 어린이 B가 낸 딱지의 그림을 나타내는데, 역시 4, 3, 2, 1 중 하나의 값이다. 역시 4, 3, 2, 1의 순서대로 주어지지 않을 수 있음에 주의하라. 다음 두 줄에는 라운드 2에서 어린이 A, B가 낸 딱지의 그림들을 같은 식으로 표현한다. 위와 같은 식으로 매 라운드마다 두 어린이가 낸 딱지의 정보는 두 줄에 표현되며, N 라운드의 딱지 정보는 차례대로 총 2N 개의 줄에 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준 출력으로 총 N 줄을 출력한다. 출력의 i번째 (1&amp;nbsp;&amp;le; i &amp;le; N) 줄에 정확히 한 글자를 출력하는데, 출력하는 글자는 A, B, D 중 하나로 라운드 i의 결과를 나타낸다. 각 라운드의 결과는 A가 승자라면 A, B가 승자라면 B, 무승부라면 D이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별 &amp;gt; 동그라미 &amp;gt; 네모 &amp;gt; 세모 순으로 승리를 판단합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제상 숫자로는&lt;b&gt; 4 &amp;gt; 3 &amp;gt; 2 &amp;gt; 1&amp;nbsp;&lt;/b&gt; 순으로 승리를 판단합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;카운팅 배열 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모양들을 모두 숫자로 나타내지만 순서가 뒤죽박죽이므로 1부터 4를 입력할 수 있도록 5크기의 배열을 만듭니다.&lt;/p&gt;
&lt;pre id=&quot;code_1645070873897&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] A = new int[5];
int[] B = new int[5];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 모양들을 입력받을 때마다 여기에 기록해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비교&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별이 4부터 시작하므로 배열의 끝부터 서로 비교합니다. 4 &amp;gt; 3 &amp;gt; 2 &amp;gt; 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;승부가 결정되면 반복문을 종료합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 반복문이 끝나도록 승부가 나지 않으면 D를 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645071007700&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		while(N--&amp;gt;0) {
			int[] A = new int[5];
			int[] B = new int[5]; //카운팅 배열
			char result = 'D';
			
			int num = sc.nextInt();
			while(num--&amp;gt;0) {
				A[sc.nextInt()]++;
			}
			
			num = sc.nextInt();
			while(num--&amp;gt;0) {
				B[sc.nextInt()]++;
			}
			
			for(int i=4; i&amp;gt;=0; i--) {
				if(A[i]&amp;gt;B[i]) {
					result = 'A';
					i = -1; //반복문 종료
				}else if(A[i]&amp;lt;B[i]) {
					result = 'B';
					i = -1;
				}
			}
			System.out.println(result);
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PwHsR/btrtwkDiUZ3/HFixKGP9NN1i8IjdwpTrW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PwHsR/btrtwkDiUZ3/HFixKGP9NN1i8IjdwpTrW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PwHsR/btrtwkDiUZ3/HFixKGP9NN1i8IjdwpTrW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPwHsR%2FbtrtwkDiUZ3%2FHFixKGP9NN1i8IjdwpTrW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;996&quot; height=&quot;69&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>14696 JAVA</category>
      <category>14696 딱지</category>
      <category>14696 백준</category>
      <category>java 14696</category>
      <category>딱지놀이 14696</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/275</guid>
      <comments>https://devyoseph.tistory.com/275#entry275comment</comments>
      <pubDate>Thu, 17 Feb 2022 13:11:01 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Baekjoon2851: 슈퍼 마리오</title>
      <link>https://devyoseph.tistory.com/274</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;슈퍼 마리오&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 초&lt;/td&gt;
&lt;td&gt;128 MB&lt;/td&gt;
&lt;td&gt;11633&lt;/td&gt;
&lt;td&gt;4578&lt;/td&gt;
&lt;td&gt;4047&lt;/td&gt;
&lt;td&gt;40.010%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여져 있다. 이 버섯을 먹으면 점수를 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;슈퍼 마리오는 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다. 중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다. 따라서 첫 버섯을 먹지 않았다면, 그 이후 버섯도 모두 먹을 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버섯의 점수가 주어졌을 때, 마리오가 받는 점수를 출력하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 10개의 줄에 각각의 버섯의 점수가 주어진다. 이 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스 내부에서 100이 넘을 때까지 더하고 이전값과 현재값을 비교해 100과의 차이가 더 적은 수를 반환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;100을 기준으로 100보다 작은 값, 큰 값 구하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구하는 값이 두 개므로 변수를 두 개 사용해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 변수는 100을 넘기 전까지의 합을 기록해야하고 한 변수는 100을 넘었을 때의 합을 기록해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100을 처음 넘었을 때 그 값을 구한 다음 다시 그 값에서 더해줬던 값을 빼서 100을 넘기 전의 값을 구할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두개를 비교해 100에 가장 가까운 수를 고르고 출력하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 풀이에서는 위 방법과 조금은 다르게 이전항에 현재항을 대입하고 현재항에 값을 더하는 식으로 구현했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645069518780&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int prev=0,now=0;
        
		for(int i=0; i&amp;lt;10; i++) { //10개의 입력값
			prev = now; //현재 now 값을 이전값 prev에 저장합니다
            
			now += sc.nextInt(); //그리고 now에 다음 값을 더합니다
            
			if(now&amp;gt;=100) { // now가 100을 넘기는 순간: prev에는 100보다 작은 값, now에는 100보다 큰 값이 저장
				i=10; //반복문을 종료합니다.
			}
		}
		if(now-100&amp;lt;=Math.abs(100-prev)) { // 그 둘을 비교하고 100과의 차이가 적은 수를 내보냅니다
			System.out.println(now);
		}else {
			System.out.println(prev);
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1003&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5AYVF/btrtrrwre7k/8S8GMF3PgTKJb0NUen01Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5AYVF/btrtrrwre7k/8S8GMF3PgTKJb0NUen01Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5AYVF/btrtrrwre7k/8S8GMF3PgTKJb0NUen01Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5AYVF%2Fbtrtrrwre7k%2F8S8GMF3PgTKJb0NUen01Dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1003&quot; height=&quot;66&quot; data-origin-width=&quot;1003&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>2851 java 슈퍼마리오</category>
      <category>2851 슈퍼마리오</category>
      <category>java 2851</category>
      <category>백준 Java 슈퍼마리오</category>
      <category>백준 슈퍼마리오</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/274</guid>
      <comments>https://devyoseph.tistory.com/274#entry274comment</comments>
      <pubDate>Thu, 17 Feb 2022 12:51:52 +0900</pubDate>
    </item>
    <item>
      <title>[Java] SW4012: 요리사</title>
      <link>https://devyoseph.tistory.com/273</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #454545;&quot;&gt;시간&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #454545;&quot;&gt;: 50개 테스트케이스를 합쳐서&amp;nbsp;C의 경우 5초&amp;nbsp;/&amp;nbsp;C++의 경우 5초&amp;nbsp;/&amp;nbsp;Java의 경우 5초&amp;nbsp;/&amp;nbsp;Python의 경우 10초&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #454545;&quot;&gt;메모리&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #454545;&quot;&gt;: 힙, 정적 메모리 합쳐서&amp;nbsp;256MB&amp;nbsp;이내, 스택 메모리&amp;nbsp;1MB&amp;nbsp;이내&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;두 명의 손님에게 음식을 제공하려고 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 명의 손님은 식성이 비슷하기 때문에,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;최대한 비슷한 맛의 음식을 만들어 내야 한다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;개의 식재료가 있다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;식재료들을 각각 N / 2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;개씩 나누어 두 개의 요리를 하려고 한다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;. (N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;은 짝수이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;각각의 음식을&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;, B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식이라고 하자&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비슷한 맛의 음식을 만들기 위해서는 A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식과&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식의 맛의 차이가 최소가 되도록 재료를 배분해야 한다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식의 맛은 음식을 구성하는 식재료들의 조합에 따라 다르게 된다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;식재료 i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와 같이 요리하게 되면 궁합이 잘 맞아 시너지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 발생한다&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. (1 &amp;le; i &amp;le; N, 1 &amp;le; j &amp;le; N, i &amp;ne; j)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 음식의 맛은 음식을 구성하는 식재료들로부터 발생하는 시너지 Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;들의 합이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;식재료 i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와 같이 요리하게 되면 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;의 정보가 주어지고&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가지고 있는 식재료를 이용해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식과&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식을 만들 때&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;두 음식 간의 맛의 차이가 최소가 되는 경우를 찾고 그 최솟값을 정답으로 출력하는 프로그램을 작성하라&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;예시&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;N = 4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;인 예를 생각해보자&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[Table 1]&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 같이 주어진다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;세로축으로&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;번째 위치에 있고 가로축으로&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;번째 위치에 있는 값이&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p7fOL/btrtpQJHTIy/8OQLfn7a3PEBHu8pi4A6Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p7fOL/btrtpQJHTIy/8OQLfn7a3PEBHu8pi4A6Pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p7fOL/btrtpQJHTIy/8OQLfn7a3PEBHu8pi4A6Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp7fOL%2FbtrtpQJHTIy%2F8OQLfn7a3PEBHu8pi4A6Pk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;328&quot; height=&quot;325&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[Table 1]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;식재료 1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식으로 만들고 식재료&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식으로 만드는 경우를 생각하자&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;1)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;을 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S12&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;2)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S21&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;3) A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식의 맛은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;5 + 4 = 9&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;4)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;을 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S34&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;5)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S43&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;6) B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식의 맛은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;3 + 3 = 6&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;두 음식 간의 맛의 차이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;|9 &amp;ndash; 6| = 3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;식재료 2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식으로 만들고 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;을&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식으로 만드는 경우를 생각하자&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;7)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S24&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;8)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;를 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S42&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;9) A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식의 전력은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1 + 2 = 3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;10)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;을 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S13&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;11)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;과 식재료&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;을 같이 요리했을 때 발생하는 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S31&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;12) B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식의 맛은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3 + 2 = 5&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;두 음식간의 맛의 차이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;|3 &amp;ndash; 5| = 2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 경우가 A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식과&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식 간의 맛의 차이가 최소인 경우이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다른 경우에서는 맛의 차이가 2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;보다 작을 수 없다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;본 예의 정답은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;제약사항&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;시간 제한&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;최대&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;50&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;개 테스트 케이스를 모두 통과하는 데&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;C / C++ / Java&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;모두&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;초&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;식재료의 수&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;은&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이상&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;16&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이하의 짝수이다&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. (4 &amp;le; N &amp;le; 16)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이상&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;20,000&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이하의 정수이다&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;. (1 &amp;le;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;le; 20,000, i &amp;ne; j)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;4. i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 서로 같은 경우의&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;값은 정의되지 않는다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;입력에서는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;으로 주어진다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;입력&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입력의 맨 첫 줄에는 총 테스트 케이스의 개수 T&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 주어지고&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 다음 줄부터 T&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;개의 테스트 케이스가 주어진다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 테스트 케이스의 첫 번째 줄에는 식재료의 수 N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이 주어진다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;개의 줄에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;N * N&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;개의 시너지&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Sij&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;값들이 주어진다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;. i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;와&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;가 서로 같은 경우는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;으로 주어진다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;출력&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 케이스 개수만큼 T&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;개의 줄에 각각의 테스트 케이스에 대한 답을 출력한다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 줄은 &quot;#t&quot;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;로 시작하고 공백을 하나 둔 다음 정답을 출력한다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;. (t&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;부터 시작하는 테스트 케이스의 번호이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정답은 두 음식 간의 맛의 차이가 최소가 되도록 A&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식과&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;음식을 만들었을 때 그 차이 값이다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N을 입력 받으면 먼저 배열을 만들어서 시너지들을 입력해주어야 합니다. = arr[N][N]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 N/2 만큼 선택해서 시너지를 계산하고 나머지 N/2만큼 선택해 시너지를 계산해서 둘을 비교합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;부분집합&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs를 이용해 부분집합을 생성합니다. 대신 제한조건으로 집합의 크기가 N/2가 되는 집합들만 사용합니다. 그 외에는 계산 처리하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;방문체크&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 풀이방법의 핵심은 방문체크라고 생각합니다. 방문했다면 체크해주고 빠져나올 때 체크를 해지해주면서 현재 누가 체크됐는지 바로 파악할 수 있고 이 정보를 이용해 부분집합의 크기가 N/2가 되는 순간 바로 시너지를 구할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시너지 구하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 방법이 있지만 저는 최대한 코드를 단순화하고 싶어서 방문체크 배열의 길이를 N이라고 했을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N 중의 하나의 원소를 선택한 뒤 다시 그 N 안에서 다른 원소를 선택하는 이중 반복문을 사용했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1644989353118&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    	for(int i=0; i&amp;lt;N; i++) {
    		for(int j=0; j&amp;lt;N; j++) {
    			if(v[i]!=v[j] || i==j) continue; // 서로 다른 팀이거나 같은 번호일 때 넘어가기
    			
    			if(v[i]) { //동일한 팀이고 true면 A팀
    				A += arr[i][j];
    			}else if(!v[i]) {
    				B += arr[i][j];
    			}
    		}
    	}&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;b&gt;전체 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644989114680&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Solution {
    static int N, MIN;
    static int arr[][];
    static boolean[] v; // 방문체크
    
    static void calS() {
    	int A = 0;
    	int B = 0;
    	
    	for(int i=0; i&amp;lt;N; i++) {
    		for(int j=0; j&amp;lt;N; j++) {
    			if(v[i]!=v[j] || i==j) continue;
    			
    			if(v[i]) { //동일한 팀이고 true면 A팀
    				A += arr[i][j];
    			}else if(!v[i]) {
    				B += arr[i][j];
    			}
    		}
    	}
    	MIN = Math.min(MIN, Math.abs(A-B));
    }
    
    static void dfs(int depth, int cnt) {
    	if(cnt&amp;gt;N/2) { //절반 이상 뽑으면 탈락
    		return;
    	} else if(cnt==N/2) {
    		
    			calS();
    		
    		return;
    		
    	} else if(depth==N) {
    		return;
    	}
    	
    	
    	v[depth] = true;
    	dfs(depth+1,cnt+1);
    	v[depth] = false;
    	dfs(depth+1, cnt);
    }
public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        
        for(int t=1; t&amp;lt;=T; t++) {
        	MIN = Integer.MAX_VALUE;
	        N = sc.nextInt(); // 음식의 개수
	        v = new boolean[N];
	        arr = new int[N][N]; // 시너지를 저장할 배열
	        
	        for(int i=0; i&amp;lt;N ; i++) { //시너지 입력 넣어주기
	        	for(int j=0; j&amp;lt;N; j++) {
	        		arr[i][j]= sc.nextInt();
	        	}
	        }
	        
	        dfs(0,0);
	        
	        System.out.println(&quot;#&quot;+t+&quot; &quot;+MIN);
        }
	}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Study/SW Expert</category>
      <category>4012 java 요리사</category>
      <category>4012 요리사</category>
      <category>SWEA 4012</category>
      <category>요리사 4012</category>
      <category>요리사 java 4012</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/273</guid>
      <comments>https://devyoseph.tistory.com/273#entry273comment</comments>
      <pubDate>Wed, 16 Feb 2022 14:30:33 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Baekjoon11723: 집합, 비트마스킹 구현</title>
      <link>https://devyoseph.tistory.com/272</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;집합&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table id=&quot;problem-info&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.5 초&lt;/td&gt;
&lt;td&gt;4 MB (&lt;a href=&quot;https://www.acmicpc.net/problem/11723#&quot;&gt;하단 참고&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;46300&lt;/td&gt;
&lt;td&gt;14373&lt;/td&gt;
&lt;td&gt;10103&lt;/td&gt;
&lt;td&gt;29.682%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;add x: S에 x를 추가한다. (1&amp;nbsp;&amp;le; x &amp;le; 20) S에 x가 이미 있는 경우에는 연산을 무시한다.&lt;/li&gt;
&lt;li&gt;remove&amp;nbsp;x: S에서 x를 제거한다. (1&amp;nbsp;&amp;le; x &amp;le; 20)&amp;nbsp;S에 x가 없는 경우에는 연산을 무시한다.&lt;/li&gt;
&lt;li&gt;check x: S에 x가 있으면 1을, 없으면 0을 출력한다.&amp;nbsp;(1 &amp;le; x &amp;le; 20)&lt;/li&gt;
&lt;li&gt;toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1&amp;nbsp;&amp;le; x &amp;le; 20)&lt;/li&gt;
&lt;li&gt;all: S를 {1, 2, ..., 20} 으로 바꾼다.&lt;/li&gt;
&lt;li&gt;empty: S를 공집합으로 바꾼다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수행해야 하는 연산의 수 M (1 &amp;le; M &amp;le; 3,000,000)이 주어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;check&lt;span&gt;&amp;nbsp;&lt;/span&gt;연산이 주어질때마다, 결과를 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1752&quot; data-origin-height=&quot;1228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rg0TR/btrtlUFMyd7/LCfWNJY5kXR3Pqqi8ONCkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rg0TR/btrtlUFMyd7/LCfWNJY5kXR3Pqqi8ONCkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rg0TR/btrtlUFMyd7/LCfWNJY5kXR3Pqqi8ONCkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frg0TR%2FbtrtlUFMyd7%2FLCfWNJY5kXR3Pqqi8ONCkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1752&quot; height=&quot;1228&quot; data-origin-width=&quot;1752&quot; data-origin-height=&quot;1228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부분집합을 비트마스크로 나타낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2의 20승이면&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; 1048576&lt;/b&gt; 로 정수형의 범위를 벗어나지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SHIFT 연산은 기본입니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OR 연산( | ) 을 이용한 &lt;/span&gt;&lt;/b&gt;원소추가 [ add ]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x 번째 원소를 추가하기 위해서는 1을 왼쪽으로 x만큼 Shift 연산한 값과 OR 연산합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644976214006&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;101110 : 현재 부분집합의 상태 -&amp;gt; 4번째 원소가 비어있는데 추가하고 싶다면?

010000 : 1&amp;lt;&amp;lt;4 인 값과 OR 연산

111110&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AND 연산으로 값 체크 [ check ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&amp;lt;&amp;lt;x 를 한 값과 원래 S와 AND 연산하고 만약 그 값이 0이 아니라면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S에서도 x원소가 있다는 뜻이므로 1을 출력합니다. 만약 0이라면 없는 것이므로 0을 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; AND 연산( &amp;amp; ) 을 이용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;원소제거 [ remove ]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x 번째 원소를 제거하기 위해서는 그 부분의 1만 없애주어야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나만 제거하기 위해서는 &amp;amp;연산을 이용해야하는데 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 1&amp;lt;&amp;lt;x 를 하게 되면 1000000의 모습입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;and 연산한다면 뒤 0에 의해 값들이 모두 변경되기 때문에 &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;color: #000000;&quot;&gt;01111111 이런 모습으로 만든다음 and 연산한다면?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0부분이 있는 쪽만 0으로 바뀌고 나머지는 1로 무사할 것입니다.&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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; XOR 연산( ^ ) 을 이용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;원소토글 [ toggle ]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;XOR의 성질을 이해해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 원소가 1일 때 0으로 바꾸기 위해서는? 1과 XOR 연산하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 원소가 0일 때 1로 바꾸기 위해서는? 1과 XOR 연산하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 즉 &lt;b&gt;원래 원소가 1이든 0이든 1과 XOR 연산하면 그 반대가 나옵니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그와 반대로 원소가 무엇이든 0과 XOR 연산하면 그대로 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 성질을 이용해 1&amp;lt;&amp;lt;x 값과 XOR연산을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NOT 연산을 이용한 모든 원소 추가 [ all ]&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원소가 하나도 없는 상태는 0으로 표현합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 원소가 있도록 하려면 0을 뒤집습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S = ~0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 코드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644975954044&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.StringTokenizer;


public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		int M = Integer.parseInt(br.readLine());
		int S = 0;
		while(M--&amp;gt;0) {
			st = new StringTokenizer(br.readLine());
			
			switch(st.nextToken()){
				case &quot;add&quot;: // OR 연산으로 추가합니다
					S |= 1&amp;lt;&amp;lt;Integer.parseInt(st.nextToken());
					break;
				case &quot;remove&quot;: // 비트를 뒤집고 AND 연산
					S &amp;amp;= ~(1&amp;lt;&amp;lt;Integer.parseInt(st.nextToken()));
					break;
				case &quot;check&quot;: // AND 연산으로 확인
					sb.append((S &amp;amp; 1&amp;lt;&amp;lt;Integer.parseInt(st.nextToken()))!=0?1:0).append(&quot;\n&quot;);
					break;
				case &quot;toggle&quot;: // 원래 원소가 1이든 0이든 1과 XOR 연산하면 그 반대가 나옵니다.
					S ^= 1&amp;lt;&amp;lt;Integer.parseInt(st.nextToken());
					break;
				case &quot;all&quot;:
					S |= ~0;
					break;
				case &quot;empty&quot;: S = 0; break;
			}
		}
		System.out.println(sb.toString());
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1992&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpv6b2/btrti4hsxf8/BDlIwYXKnmFHCzGKg3ZBH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpv6b2/btrti4hsxf8/BDlIwYXKnmFHCzGKg3ZBH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpv6b2/btrti4hsxf8/BDlIwYXKnmFHCzGKg3ZBH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdpv6b2%2Fbtrti4hsxf8%2FBDlIwYXKnmFHCzGKg3ZBH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1992&quot; height=&quot;146&quot; data-origin-width=&quot;1992&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Study/Baekjoon</category>
      <category>java 11723</category>
      <category>백준 11723</category>
      <category>백준 자바 11723</category>
      <category>백준 집합</category>
      <category>자바 11723</category>
      <author>devyoseph</author>
      <guid isPermaLink="true">https://devyoseph.tistory.com/272</guid>
      <comments>https://devyoseph.tistory.com/272#entry272comment</comments>
      <pubDate>Wed, 16 Feb 2022 11:10:20 +0900</pubDate>
    </item>
  </channel>
</rss>