<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Study hard</title>
    <link>https://nim-code.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 17 May 2026 22:45:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Nimgnoej</managingEditor>
    <image>
      <title>Study hard</title>
      <url>https://tistory1.daumcdn.net/tistory/3976217/attach/a2ec898af8cb4f219201edebeed4d31a</url>
      <link>https://nim-code.tistory.com</link>
    </image>
    <item>
      <title>프로그래머스 코딩테스트 연습 - 2주차_상호평가</title>
      <link>https://nim-code.tistory.com/308</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/83201#&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/83201#&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1633674060153&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 2주차_상호평가&quot; data-og-description=&quot;[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] &amp;quot;FBABD&amp;quot; [[70,49,90],[68,50,38],[73,31,100]] &amp;quot;CFD&amp;quot;&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/83201#&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/83201&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/POLGi/hyLTttRSx8/bbMZr5xRWN0KO7h9wQvjck/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bCeM3d/hyLTECbcx6/IhAfZu99rwoMkPFYh2AYLK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/83201#&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/83201#&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/POLGi/hyLTttRSx8/bbMZr5xRWN0KO7h9wQvjck/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/bCeM3d/hyLTECbcx6/IhAfZu99rwoMkPFYh2AYLK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 2주차_상호평가&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] &quot;FBABD&quot; [[70,49,90],[68,50,38],[73,31,100]] &quot;CFD&quot;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;691&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpmgSI/btrg8gG2iAc/k1sLczb35kptGCt9bueQg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpmgSI/btrg8gG2iAc/k1sLczb35kptGCt9bueQg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpmgSI/btrg8gG2iAc/k1sLczb35kptGCt9bueQg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpmgSI%2Fbtrg8gG2iAc%2Fk1sLczb35kptGCt9bueQg1%2Fimg.png&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;691&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;558&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQXpSP/btrg9645vJh/alY4u7m3YMzAKK8rKfKGPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQXpSP/btrg9645vJh/alY4u7m3YMzAKK8rKfKGPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQXpSP/btrg9645vJh/alY4u7m3YMzAKK8rKfKGPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQXpSP%2Fbtrg9645vJh%2FalY4u7m3YMzAKK8rKfKGPK%2Fimg.png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;558&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;380&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FS2BS/btrhdvvJThA/WnlhtwDotjfmldKWqaO3qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FS2BS/btrhdvvJThA/WnlhtwDotjfmldKWqaO3qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FS2BS/btrhdvvJThA/WnlhtwDotjfmldKWqaO3qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFS2BS%2FbtrhdvvJThA%2FWnlhtwDotjfmldKWqaO3qk%2Fimg.png&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;380&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;i번 학생이 자신에게 준 점수가 자신이 받은 점수 중 유일한 최저점이거나 유일한 최고점이면 평균을 구하는 식에서 제외한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1633674276978&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;//sort

using namespace std;

string solution(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; scores) {
    string answer = &quot;&quot;;
    int N=scores[0].size();
    for(int i=0;i&amp;lt;N;i++){
        //i번 학생이 자신에게 준 점수
        int mine=scores[i][i];
        vector&amp;lt;int&amp;gt;tmp;
        double score=0;
        int cnt=0;
        for(int j=0;j&amp;lt;N;j++){
            tmp.push_back(scores[j][i]);
            score+=scores[j][i];
            cnt++;
        }
        sort(tmp.begin(),tmp.end());
        //유일한 최소인지
        if(tmp.front()==mine&amp;amp;&amp;amp;mine!=tmp[1]){
            score-=mine;
            cnt--;
        }
        //유일한 최대인지
        else if(tmp.back()==mine&amp;amp;&amp;amp;mine!=tmp[N-2]){
            score-=mine;
            cnt--;
        }
        score/=cnt;
        if(score&amp;gt;=90)
            answer+='A';
        else if(score&amp;gt;=80&amp;amp;&amp;amp;score&amp;lt;90)
            answer+='B';
        else if(score&amp;gt;=70&amp;amp;&amp;amp;score&amp;lt;80)
            answer+='C';
        else if(score&amp;gt;=50&amp;amp;&amp;amp;score&amp;lt;70)
            answer+='D';
        else
            answer+='F';
    }
    return answer;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래머스/위클리 챌린지</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/308</guid>
      <comments>https://nim-code.tistory.com/308#entry308comment</comments>
      <pubDate>Fri, 8 Oct 2021 15:24:52 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 21610번: 마법사 상어와 비바라기</title>
      <link>https://nim-code.tistory.com/306</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21610&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/21610&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631080432045&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;21610번: 마법사 상어와 비바라기&quot; data-og-description=&quot;마법사 상어는&amp;nbsp;파이어볼,&amp;nbsp;토네이도, 파이어스톰, 물복사버그&amp;nbsp;마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/21610&quot; data-og-url=&quot;https://www.acmicpc.net/problem/21610&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmahKI/hyLxvezPP8/rKPZz581vzQt5vaYNwh7p0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21610&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/21610&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmahKI/hyLxvezPP8/rKPZz581vzQt5vaYNwh7p0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;21610번: 마법사 상어와 비바라기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;마법사 상어는&amp;nbsp;파이어볼,&amp;nbsp;토네이도, 파이어스톰, 물복사버그&amp;nbsp;마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;853&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwHw8J/btrelRXZOqw/hMD3b4LMUGEyKbGGCxyyK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwHw8J/btrelRXZOqw/hMD3b4LMUGEyKbGGCxyyK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwHw8J/btrelRXZOqw/hMD3b4LMUGEyKbGGCxyyK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwHw8J%2FbtrelRXZOqw%2FhMD3b4LMUGEyKbGGCxyyK1%2Fimg.png&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;853&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;422&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z7S6g/btreoTnrKaO/8karcNlLF2tgNrj3vQUGC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z7S6g/btreoTnrKaO/8karcNlLF2tgNrj3vQUGC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z7S6g/btreoTnrKaO/8karcNlLF2tgNrj3vQUGC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz7S6g%2FbtreoTnrKaO%2F8karcNlLF2tgNrj3vQUGC1%2Fimg.png&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;422&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;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;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 구름 이동 함수 (d와 s를 받는 즉시 호출) s는 s%N으로 최소화하여 움직이는 시간 줄이기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 각 구름에서 비가 내려 구름이 있는 칸의 바구니에 물+1 함수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;*문제에서는 이 다음에 구름이 사라지지만, 구현할 때는 다음 함수에서 사용하기 위해 구름 위치 정보를 남겨둠&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 물복사버그 함수 -&amp;gt; 구름 위치 정보 삭제(p_Cloud)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.&amp;nbsp; bool Cloud[][]배열에 이전에 구름이 있었던 위치 저장해놓았으므로, c_Cloud[][]에 복사하고, 이전에 구름이 없었고, 물의 양이 2 이상인 모든 칸에 구름 새로 생김 -&amp;gt; 구름 위치정보(p_Cloud), Cloud[][]에 표시&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;pre id=&quot;code_1631081276450&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;deque&amp;gt;
#include &amp;lt;cstring&amp;gt;//memset
using namespace std;

struct Pos {
	int x, y;
};

int N, M;
int A[51][51];
bool Cloud[51][51];
bool c_Cloud[51][51];
deque&amp;lt;Pos&amp;gt;p_Cloud;//구름 위치
const int dxy[][2] = { {0,0},{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1} };

//d방향으로 s칸만큼 구름 이동
void MoveCloud(int d, int s) {
	memset(Cloud, false, sizeof(Cloud));
	int cloud_cnt = p_Cloud.size();
	for (int i = 0; i &amp;lt; cloud_cnt; i++) {
		int x = p_Cloud.front().x;
		int y = p_Cloud.front().y;
		p_Cloud.pop_front();
		//실제 이동하는 칸
		int rs = s % N;
		while (rs--) {
			x += dxy[d][0];
			y += dxy[d][1];
			if (x &amp;gt; N)
				x = 1;
			else if (x &amp;lt;= 0)
				x = N;
			if (y &amp;gt; N)
				y = 1;
			else if (y &amp;lt;= 0)
				y = N;
		}
		p_Cloud.push_back({ x,y });
		Cloud[x][y] = true;
	}
}

//각 구름에서 비가 내려 구름이 있는 칸 바구니에 물+1
void Rain() {
	int cloud_cnt = p_Cloud.size();
	for (int i = 0; i &amp;lt; cloud_cnt; i++) {
		int x = p_Cloud[i].x;
		int y = p_Cloud[i].y;
		A[x][y]++;
	}
}

//물복사 버그 : 대각선 방향으로 거리가 1인 칸에 물이 있는 바구니의 수만큼 (r,c)에 있는 바구니의 물의 양이 증가
void Copy() {
	int cloud_cnt = p_Cloud.size();
	for (int i = 0; i &amp;lt; cloud_cnt; i++) {
		int x = p_Cloud[i].x;
		int y = p_Cloud[i].y;
		int water_cnt = 0;
		for (int d = 2; d &amp;lt;= 8; d += 2) {
			int nx = x + dxy[d][0];
			int ny = y + dxy[d][1];
			//범위 벗어나면 continue
			if (nx &amp;lt;= 0 || nx &amp;gt; N || ny &amp;lt;= 0 || ny &amp;gt; N)
				continue;
			if (A[nx][ny] &amp;gt; 0)
				water_cnt++;
		}
		A[x][y] += water_cnt;
	}
	//구름 사라지기
	p_Cloud.clear();
}

//방금 구름 사라진 칸 제외 물의 양이 2 이상인 모든 칸에 구름이 생김
void makeCloud() {
	for (int i = 1; i &amp;lt;= N; i++) {
		for (int j = 1; j &amp;lt;= N; j++) {
			c_Cloud[i][j] = Cloud[i][j];
			Cloud[i][j] = false;
		}
	}
	for (int i = 1; i &amp;lt;= N; i++) {
		for (int j = 1; j &amp;lt;= N; j++) {
			if (A[i][j] &amp;gt;= 2 &amp;amp;&amp;amp; c_Cloud[i][j] == false) {
				p_Cloud.push_back({ i,j });
				Cloud[i][j] = true;
				A[i][j] -= 2;
			}
		}
	}
}

int main() {
	cin &amp;gt;&amp;gt; N &amp;gt;&amp;gt; M;
	for (int i = 1; i &amp;lt;= N; i++) {
		for (int j = 1; j &amp;lt;= N; j++) {
			cin &amp;gt;&amp;gt; A[i][j];
		}
	}
	//초기 구름
	p_Cloud.push_back({ N,1 });
	p_Cloud.push_back({ N,2 });
	p_Cloud.push_back({ N - 1,1 });
	p_Cloud.push_back({ N - 1,2 });

	int d, s;

	for (int i = 0; i &amp;lt; M; i++) {
		cin &amp;gt;&amp;gt; d &amp;gt;&amp;gt; s;
		MoveCloud(d, s);
		Rain();
		Copy();
		makeCloud();
		/*
		cout &amp;lt;&amp;lt; '\n';
		for (int x = 1; x &amp;lt;= N; x++) {
			for (int y = 1; y &amp;lt;= N; y++) {
				cout &amp;lt;&amp;lt; A[x][y] &amp;lt;&amp;lt; ' ';
			}
			cout &amp;lt;&amp;lt; '\n';
		}
		cout &amp;lt;&amp;lt; '\n';
		*/
	}
	int answer = 0;
	for (int i = 1; i &amp;lt;= N; i++) {
		for (int j = 1; j &amp;lt;= N; j++) {
			answer += A[i][j];
		}
	}
	cout &amp;lt;&amp;lt; answer &amp;lt;&amp;lt; '\n';
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/시뮬레이션,구현</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/306</guid>
      <comments>https://nim-code.tistory.com/306#entry306comment</comments>
      <pubDate>Wed, 8 Sep 2021 15:08:06 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 21609번: 상어 중학교</title>
      <link>https://nim-code.tistory.com/305</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21609&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/21609&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1631069851769&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;21609번: 상어 중학교&quot; data-og-description=&quot;상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N&amp;times;N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/21609&quot; data-og-url=&quot;https://www.acmicpc.net/problem/21609&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cCSnfm/hyLwkeymsm/GKyHTRAJ37EoMk9M5ksgb1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21609&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/21609&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cCSnfm/hyLwkeymsm/GKyHTRAJ37EoMk9M5ksgb1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;21609번: 상어 중학교&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N&amp;times;N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1619&quot; data-origin-height=&quot;786&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eNyiD0/btreoTNSjFS/nQi8SM2BFkmp7p82AicG6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eNyiD0/btreoTNSjFS/nQi8SM2BFkmp7p82AicG6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eNyiD0/btreoTNSjFS/nQi8SM2BFkmp7p82AicG6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeNyiD0%2FbtreoTNSjFS%2FnQi8SM2BFkmp7p82AicG6K%2Fimg.png&quot; data-origin-width=&quot;1619&quot; data-origin-height=&quot;786&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1533&quot; data-origin-height=&quot;658&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpTg1u/btrejVlr5lm/1mbV2xO5eIwOUHspKbL691/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpTg1u/btrejVlr5lm/1mbV2xO5eIwOUHspKbL691/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpTg1u/btrejVlr5lm/1mbV2xO5eIwOUHspKbL691/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpTg1u%2FbtrejVlr5lm%2F1mbV2xO5eIwOUHspKbL691%2Fimg.png&quot; data-origin-width=&quot;1533&quot; data-origin-height=&quot;658&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;693&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzLfwb/btrepu8bfau/5W0dmYKGts7OLljya2T930/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzLfwb/btrepu8bfau/5W0dmYKGts7OLljya2T930/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzLfwb/btrepu8bfau/5W0dmYKGts7OLljya2T930/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzLfwb%2Fbtrepu8bfau%2F5W0dmYKGts7OLljya2T930%2Fimg.png&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;693&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;765&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8Czkx/btretcsacrm/5pmKdxug7yw1o57nf7IDKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8Czkx/btretcsacrm/5pmKdxug7yw1o57nf7IDKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8Czkx/btretcsacrm/5pmKdxug7yw1o57nf7IDKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8Czkx%2Fbtretcsacrm%2F5pmKdxug7yw1o57nf7IDKk%2Fimg.png&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;765&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1597&quot; data-origin-height=&quot;407&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FzXGm/btreo4heZcw/CpaVwx573R1xMvLuBw8nX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FzXGm/btreo4heZcw/CpaVwx573R1xMvLuBw8nX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FzXGm/btreo4heZcw/CpaVwx573R1xMvLuBw8nX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFzXGm%2Fbtreo4heZcw%2FCpaVwx573R1xMvLuBw8nX1%2Fimg.png&quot; data-origin-width=&quot;1597&quot; data-origin-height=&quot;407&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;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;b&gt;1. 블록그룹 정보 저장 함수(bfs)&lt;/b&gt;&lt;b&gt;-&amp;gt; vector에 저장하여 sort 활용하여 가장 큰 그룹 찾기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 가장 큰 블록 삭제하는 함수(bfs)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 블록들을 밑으로 내리는 함수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 시계 반대 방향으로 90도 돌리는 함수(바깥 -&amp;gt; 안 순서로 돌리기)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1631075573476&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;//sort
#include &amp;lt;cstring&amp;gt;//memset
#include &amp;lt;vector&amp;gt;
#include &amp;lt;cmath&amp;gt;//pow
#include &amp;lt;queue&amp;gt;
using namespace std;

struct Pos {
	int x, y;
};

struct Group {
	int x, y;//기준블록 좌표
	int s;//그룹 크기
	int rainbow;//무지개 블록 수
};

bool sortGroup(const Group &amp;amp;A, const Group &amp;amp;B) {
	//크기가 같으면
	if (A.s == B.s) {
		//무지개 블록 수가 같으면
		if (A.rainbow == B.rainbow) {
			//기준 블록 행 같으면
			if (A.x == B.x) {
				//기준 블록 열이 가장 큰 것
				return A.y &amp;gt; B.y;
			}
			else {
				return A.x &amp;gt; B.x;
			}
		}
		else {
			return A.rainbow &amp;gt; B.rainbow;
		}
	}
	return A.s &amp;gt; B.s;
	
}

int N, M;
bool visited[20][20] = {false,};
bool rvisited[20][20] = { false, };
int Map[20][20];
int Score = 0;
vector&amp;lt;Group&amp;gt;group;
const int dx[] = { -1,1,0,0 };
const int dy[] = { 0,0,-1,1 };

//각 그룹의 크기, 무지개 블록 수 구하기
void getInfo(int startx, int starty) {
	queue&amp;lt;Pos&amp;gt;q;
	visited[startx][starty] = true;
	q.push({ startx,starty });
	int color = Map[startx][starty];
	int groupSize = 1;
	int rainbowCnt = 0;
	while (!q.empty()) {
		int x = q.front().x;
		int y = q.front().y;
		q.pop();
		for (int i = 0; i &amp;lt; 4; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx&amp;lt;0 || nx&amp;gt;=N || ny&amp;lt;0 || ny&amp;gt;=N)
				continue;
			//다음 블록이 무지개블록이면
			if (Map[nx][ny] == 0 &amp;amp;&amp;amp; rvisited[nx][ny] == false) {
				rvisited[nx][ny] = true;
				rainbowCnt++;
				groupSize++;
				q.push({ nx,ny });
			}
			//다음 블록이 같은 블록이면
			else if (color == Map[nx][ny] &amp;amp;&amp;amp; visited[nx][ny] == false) {
				visited[nx][ny] = true;
				groupSize++;
				q.push({ nx,ny });
			}
		}
	}
	if(groupSize &amp;gt;= 2)
		group.push_back({ startx,starty,groupSize,rainbowCnt });
}

//블록 제거
void EraseBlock(int startx, int starty) {
	queue&amp;lt;Pos&amp;gt;q;
	q.push({ startx,starty });
	int color = Map[startx][starty];
	Map[startx][starty] = -2;
	while (!q.empty()) {
		int x = q.front().x;
		int y = q.front().y;
		q.pop();
		for (int i = 0; i &amp;lt; 4; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx&amp;lt;0 || nx&amp;gt;=N || ny&amp;lt;0 || ny&amp;gt;=N)
				continue;
			//다음 블록이 무지개블록이거나 같은 블록이면
			if (Map[nx][ny] == 0 || Map[nx][ny] == color) {
				Map[nx][ny] = -2;
				q.push({ nx,ny });
			}
		}
	}
}

//중력 작용
void Gravity() {
	for (int i = N - 2; i &amp;gt;= 0; i--) {
		for (int j = 0; j &amp;lt; N; j++) {
			//검은 블록이거나 없으면
			if (Map[i][j] == -1 || Map[i][j] == -2)
				continue;
			int x = i + 1;
			//다른 블록 있을 때까지
			while (Map[x][j] == -2 &amp;amp;&amp;amp; x &amp;lt; N) {
				x++;
			}
			//다른 블록이 있거나 범위 밖
			x--;
			if (Map[x][j] == -2) {
				Map[x][j] = Map[i][j];
				Map[i][j] = -2;
			}
		}
	}
}

void Rolling() {
	vector&amp;lt;int&amp;gt;tmp;
	int start = 0;
	int dest = N;
	while (start&amp;lt;N/2) {
		//위 블록 저장
		for (int i = start; i &amp;lt; dest ; i++) {
			tmp.push_back(Map[start][i]);
		}
		//오-&amp;gt;위
		for (int i = start; i &amp;lt; dest ; i++) {
			Map[start][i] = Map[i][dest - 1];
		}
		//아래-&amp;gt;오
		for (int i = dest - 1; i &amp;gt;= start; i--) {
			Map[dest - 1 - i+start][dest - 1] = Map[dest - 1][i];
		}
		//왼-&amp;gt;아래
		for (int i = dest - 1; i &amp;gt;= start; i--) {
			Map[dest - 1][i] = Map[i][start];
		}
		//위-&amp;gt;왼
		int d = 0;
		for (int i = dest - 1; i &amp;gt;= start; i--) {
			Map[i][start] = tmp[d++];
		}
		start++;
		dest--;
		tmp.clear();
	}
}

int main() {
	cin &amp;gt;&amp;gt; N &amp;gt;&amp;gt; M;
	for (int i = 0; i &amp;lt; N; i++) {
		for (int j = 0; j &amp;lt; N; j++) {
			cin &amp;gt;&amp;gt; Map[i][j];
		}
	}
	while (1) {
		//블록 그룹 존재하는지도 확인
		//크기 가장 큰 블록 찾기
		for (int i = 0; i &amp;lt; N; i++) {
			for (int j = 0; j &amp;lt; N; j++) {
				memset(rvisited, false, sizeof(rvisited));
				if (Map[i][j] &amp;gt; 0 &amp;amp;&amp;amp; visited[i][j]==false) {
					getInfo(i, j);
				}
			}
		}
		/*
		cout &amp;lt;&amp;lt; &quot;초기&quot; &amp;lt;&amp;lt; '\n' &amp;lt;&amp;lt; '\n';
		for (int i = 0; i &amp;lt; N; i++) {
			for (int j = 0; j &amp;lt; N; j++) {
				cout &amp;lt;&amp;lt; Map[i][j] &amp;lt;&amp;lt; ' ';
			}
			cout &amp;lt;&amp;lt; '\n';
		}cout &amp;lt;&amp;lt; '\n';
		*/
		//그룹 없으면 끝
		if (group.size()==0)
			break;

		//크기 가장 큰 그룹이 앞에 오도록 정렬
		sort(group.begin(), group.end(), sortGroup);

		//가장 큰 그룹 블록 삭제, 점수 획득
		EraseBlock(group[0].x, group[0].y);
		//cout &amp;lt;&amp;lt; group[0].s &amp;lt;&amp;lt; '\n';
		Score += pow(group[0].s, 2);
		//cout &amp;lt;&amp;lt; &quot;score : &quot; &amp;lt;&amp;lt; Score &amp;lt;&amp;lt; '\n' &amp;lt;&amp;lt; '\n';
		/*
		cout &amp;lt;&amp;lt; &quot;제거&quot; &amp;lt;&amp;lt; '\n' &amp;lt;&amp;lt; '\n';
		for (int i = 0; i &amp;lt; N; i++) {
			for (int j = 0; j &amp;lt; N; j++) {
				cout &amp;lt;&amp;lt; Map[i][j] &amp;lt;&amp;lt; ' ';
			}
			cout &amp;lt;&amp;lt; '\n';
		}cout &amp;lt;&amp;lt; '\n';
		*/
		//중력
		Gravity();
		/*
		cout &amp;lt;&amp;lt; &quot;중력&quot; &amp;lt;&amp;lt; '\n' &amp;lt;&amp;lt; '\n';
		for (int i = 0; i &amp;lt; N; i++) {
			for (int j = 0; j &amp;lt; N; j++) {
				cout &amp;lt;&amp;lt; Map[i][j] &amp;lt;&amp;lt; ' ';
			}
			cout &amp;lt;&amp;lt; '\n';
		}cout &amp;lt;&amp;lt; '\n';
		*/
		//90도 반시계 방향 회전
		Rolling();
		/*
		cout &amp;lt;&amp;lt; &quot;회전&quot; &amp;lt;&amp;lt; '\n' &amp;lt;&amp;lt; '\n';
		for (int i = 0; i &amp;lt; N; i++) {
			for (int j = 0; j &amp;lt; N; j++) {
				cout &amp;lt;&amp;lt; Map[i][j] &amp;lt;&amp;lt; ' ';
			}
			cout &amp;lt;&amp;lt; '\n';
		}cout &amp;lt;&amp;lt; '\n';
		*/
		//중력
		Gravity();
		/*
		cout &amp;lt;&amp;lt; &quot;중력2&quot; &amp;lt;&amp;lt; '\n' &amp;lt;&amp;lt; '\n';
		for (int i = 0; i &amp;lt; N; i++) {
			for (int j = 0; j &amp;lt; N; j++) {
				cout &amp;lt;&amp;lt; Map[i][j] &amp;lt;&amp;lt; ' ';
			}
			cout &amp;lt;&amp;lt; '\n';
		}cout &amp;lt;&amp;lt; '\n';
		*/
		memset(visited, false, sizeof(visited));
		group.clear();
	}
	cout &amp;lt;&amp;lt; Score&amp;lt;&amp;lt; '\n';
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>백준/시뮬레이션,구현</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/305</guid>
      <comments>https://nim-code.tistory.com/305#entry305comment</comments>
      <pubDate>Wed, 8 Sep 2021 13:33:02 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 21608번: 상어 초등학교</title>
      <link>https://nim-code.tistory.com/304</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21608&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/21608&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1630819848925&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;21608번: 상어 초등학교&quot; data-og-description=&quot;상어 초등학교에는 교실이 하나 있고, 교실은 N&amp;times;N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/21608&quot; data-og-url=&quot;https://www.acmicpc.net/problem/21608&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/7ZNdI/hyLuY9Mw6r/GVA3WSewzFmkcme5TRpQLk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/21608&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/21608&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/7ZNdI/hyLuY9Mw6r/GVA3WSewzFmkcme5TRpQLk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;21608번: 상어 초등학교&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;상어 초등학교에는 교실이 하나 있고, 교실은 N&amp;times;N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;840&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWiLVG/btrd1ed5Xma/DPnE8aM7T1Kvl81BNKTREK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWiLVG/btrd1ed5Xma/DPnE8aM7T1Kvl81BNKTREK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWiLVG/btrd1ed5Xma/DPnE8aM7T1Kvl81BNKTREK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWiLVG%2Fbtrd1ed5Xma%2FDPnE8aM7T1Kvl81BNKTREK%2Fimg.png&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;840&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1309&quot; data-origin-height=&quot;861&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b79gWT/btrd0F4AVlj/bLQoQDPRKstxOenccD5ask/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b79gWT/btrd0F4AVlj/bLQoQDPRKstxOenccD5ask/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b79gWT/btrd0F4AVlj/bLQoQDPRKstxOenccD5ask/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb79gWT%2Fbtrd0F4AVlj%2FbLQoQDPRKstxOenccD5ask%2Fimg.png&quot; data-origin-width=&quot;1309&quot; data-origin-height=&quot;861&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;879&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5dlML/btrd9lbYxw3/z0CEt7K8RBXYVUlqLvGhx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5dlML/btrd9lbYxw3/z0CEt7K8RBXYVUlqLvGhx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5dlML/btrd9lbYxw3/z0CEt7K8RBXYVUlqLvGhx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5dlML%2Fbtrd9lbYxw3%2Fz0CEt7K8RBXYVUlqLvGhx0%2Fimg.png&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;879&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;|r&lt;/span&gt;1&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- r&lt;/span&gt;2&lt;span style=&quot;color: #555555;&quot;&gt;| + |c&lt;/span&gt;1&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- c&lt;/span&gt;2&lt;span style=&quot;color: #555555;&quot;&gt;| = 1&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;을 만족하는 두 칸 (r&lt;/span&gt;1&lt;span style=&quot;color: #555555;&quot;&gt;, c&lt;/span&gt;1&lt;span style=&quot;color: #555555;&quot;&gt;)과 (r&lt;/span&gt;2&lt;span style=&quot;color: #555555;&quot;&gt;, c&lt;/span&gt;2&lt;span style=&quot;color: #555555;&quot;&gt;)를 인접한 칸이라고 한다. =&amp;gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;어떤 칸의 상하좌우에 있는 칸&lt;/span&gt;이 인접한 칸이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;학생의 번호와 그 학생이 좋아하는 학생들의 번호를 저장하는 struct 자료구조를 만들어 입력을 받아 순서대로 어디에 자리를 배치할지 탐색한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;빈칸들마다 주변에 좋아하는 학생 수, 빈칸 수를 저장하여 조건에 맞게 정렬한다. 정렬했을 때 제일 앞에 있는 좌표에 해당 학생을 배치시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #555555;&quot;&gt;모든 학생을 배치시키고 각 학생의 주변 학생을 확인한&amp;nbsp; 다음 만족도의 총 합을 구한다.&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: #555555;&quot;&gt;[코드]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1630822510234&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;//sort
#include &amp;lt;vector&amp;gt;
#include &amp;lt;map&amp;gt;
#include &amp;lt;cmath&amp;gt;//pow
using namespace std;

struct Stu {
	int num;//학생 번호
	int favorite[4];//좋아하는 4명
};

struct Loc {
	int x, y;//좌표
	int fav;//인접한 칸에 좋아하는 학생 수
	int blank;//인접한 비어있는 칸 수
};

bool sortLoc(Loc &amp;amp;A, Loc &amp;amp;B) {
	//좋아하는 학생 수가 같으면
	if (A.fav == B.fav) {
		//빈칸 개수가 같으면
		if (A.blank == B.blank) {
			//행이 같으면
			if (A.x == B.x) {
				//열이 작은 칸
				return A.y &amp;lt; B.y;
			}
			//행이 작은 칸
			else
				return A.x &amp;lt; B.x;
		}
		//빈칸 개수가 많은 칸
		return A.blank &amp;gt; B.blank;
	}
	//좋아하는 학생 수가 많은 칸
	return A.fav &amp;gt; B.fav;
}

int N;
int Map[21][21] = {0,};
Stu student[400];
vector&amp;lt;Loc&amp;gt;Class;
bool filled[21][21] = { false, };
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
map&amp;lt;int, int&amp;gt;m;

//학생 배치하기
void Place(int num, int favorite[4]) {
	Class.clear();
	//자리 차있으면 pass
	//각각 빈칸의 인접한 칸에 좋아하는 학생 몇명인지, 빈칸 몇개인지 세기
	for (int i = 1; i &amp;lt;= N; i++) {
		for (int j = 1; j &amp;lt;= N; j++) {
			if (Map[i][j] != 0)
				continue;
			int fav_cnt = 0;
			int blank_cnt = 0;
			for (int d = 0; d &amp;lt; 4; d++) {
				int nx = i + dx[d];
				int ny = j + dy[d];
				//범위 확인
				if (nx &amp;lt;= 0 || nx &amp;gt; N || ny &amp;lt;= 0 || ny &amp;gt; N)
					continue;
				//빈칸이면
				if (Map[nx][ny] == 0)
					blank_cnt++;
				//아니면 좋아하는 학생인지 확인
				else {
					for (int n = 0; n &amp;lt; 4; n++) {
						if (Map[nx][ny] == favorite[n]) {
							fav_cnt++;
							break;
						}
					}
				}
			}
			Class.push_back({ i,j,fav_cnt,blank_cnt });
		}
	}
	sort(Class.begin(), Class.end(), sortLoc);
	int x = Class[0].x;
	int y = Class[0].y;
	Map[x][y] = num;
	return;
}

int main() {
	cin &amp;gt;&amp;gt; N;
	int num;
	int fav[4];
	for (int i = 0; i &amp;lt; N*N; i++) {
		cin &amp;gt;&amp;gt; student[i].num;
		//배열 student의 몇 번째 칸에 num의 좋아하는 학생 배열 있는지 저장
		m.insert(make_pair(student[i].num, i));
		for (int j = 0; j &amp;lt; 4; j++) {
			cin &amp;gt;&amp;gt; student[i].favorite[j];
		}
	}
	for (int i = 0; i &amp;lt; N*N; i++) {
		Place(student[i].num,student[i].favorite);
	}
	int answer = 0;
	//만족도 구하기
	for (int i = 1; i &amp;lt;= N; i++) {
		for (int j = 1; j &amp;lt;= N; j++) {
			int num = Map[i][j];
			int fav_cnt = 0;
			for (int d = 0; d &amp;lt; 4; d++) {
				int nx = i + dx[d];
				int ny = j + dy[d];
				if (nx &amp;lt;= 0 || nx &amp;gt; N || ny &amp;lt;= 0 || ny &amp;gt; N)
					continue;
				for (int n = 0; n &amp;lt; 4; n++) {
					if (Map[nx][ny] == student[m[num]].favorite[n]) {
						fav_cnt++;
						break;
					}
				}
			}
			if (fav_cnt == 0)
				continue;
			answer += pow(10, fav_cnt - 1);
		}
	}
	cout &amp;lt;&amp;lt; answer &amp;lt;&amp;lt; '\n';
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/시뮬레이션,구현</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/304</guid>
      <comments>https://nim-code.tistory.com/304#entry304comment</comments>
      <pubDate>Sun, 5 Sep 2021 15:15:20 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 2671번: 잠수함식별</title>
      <link>https://nim-code.tistory.com/297</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2671&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/2671&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1625829517480&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2671번: 잠수함식별&quot; data-og-description=&quot;입력에 들어있는 스트링을 읽고, 이것이 잠수함의 엔진소리를 나타내는 스트링인지 아니면 그냥 물속의 잡음인지를 판정한 후, 잠수함의 엔진 소리에 해당하는 스트링이면 &amp;quot;SUBMARINE&amp;quot;을 출력하고&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2671&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2671&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbW4BC/hyKQqx6fWT/6wXJmaI5kQ97nN8NlWVnkk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2671&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2671&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbW4BC/hyKQqx6fWT/6wXJmaI5kQ97nN8NlWVnkk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2671번: 잠수함식별&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;입력에 들어있는 스트링을 읽고, 이것이 잠수함의 엔진소리를 나타내는 스트링인지 아니면 그냥 물속의 잡음인지를 판정한 후, 잠수함의 엔진 소리에 해당하는 스트링이면 &quot;SUBMARINE&quot;을 출력하고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;810&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFfCNo/btq9gRs1Q0S/Kfyy8pNGK1kRFVzWkKx1C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFfCNo/btq9gRs1Q0S/Kfyy8pNGK1kRFVzWkKx1C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFfCNo/btq9gRs1Q0S/Kfyy8pNGK1kRFVzWkKx1C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFfCNo%2Fbtq9gRs1Q0S%2FKfyy8pNGK1kRFVzWkKx1C0%2Fimg.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;810&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;253&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6TuiR/btq9fvYx3k7/3vLgHN73F5DbJJbTUUtiF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6TuiR/btq9fvYx3k7/3vLgHN73F5DbJJbTUUtiF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6TuiR/btq9fvYx3k7/3vLgHN73F5DbJJbTUUtiF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6TuiR%2Fbtq9fvYx3k7%2F3vLgHN73F5DbJJbTUUtiF1%2Fimg.png&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;253&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;regex정규표현식&lt;/span&gt;을 사용하여 문제를 풀었다. 문제의 엔진소리 패턴을 문자열로 정의해두고, 입력된 문자열이 패턴과 같으면 &quot;SUBMARINE&quot;을, 그렇지 않으면 &quot;NOISE&quot;를 출력하도록 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1625829724394&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;regex&amp;gt;//정규표현식
#include &amp;lt;string&amp;gt;
using namespace std;

string str;

int main() {
	cin &amp;gt;&amp;gt; str;
	string engine = &quot;(100+1+|01)+&quot;;
	if (regex_match(str, regex(engine)))
		cout &amp;lt;&amp;lt; &quot;SUBMARINE\n&quot;;
	else
		cout &amp;lt;&amp;lt; &quot;NOISE\n&quot;;
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/여러가지 문제들</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/297</guid>
      <comments>https://nim-code.tistory.com/297#entry297comment</comments>
      <pubDate>Fri, 9 Jul 2021 20:22:32 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 1920번: 수 찾기</title>
      <link>https://nim-code.tistory.com/296</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1920&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1920&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1625745620125&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1920번: 수 찾기&quot; data-og-description=&quot;첫째 줄에 자연수 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], &amp;hellip;, A[N]이 주어진다. 다음 줄에는 M(1 &amp;le; M &amp;le; 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1920&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1920&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dK5SUO/hyKPwepaw6/kRKX5GGO9uPsvsYte8txZ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1920&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1920&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dK5SUO/hyKPwepaw6/kRKX5GGO9uPsvsYte8txZ1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1920번: 수 찾기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 자연수 N(1 &amp;le; N &amp;le; 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], &amp;hellip;, A[N]이 주어진다. 다음 줄에는 M(1 &amp;le; M &amp;le; 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;645&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/77juk/btq89dc1ZYe/2GoR3DSIwuOTPGK0ku9yc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/77juk/btq89dc1ZYe/2GoR3DSIwuOTPGK0ku9yc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/77juk/btq89dc1ZYe/2GoR3DSIwuOTPGK0ku9yc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F77juk%2Fbtq89dc1ZYe%2F2GoR3DSIwuOTPGK0ku9yc0%2Fimg.png&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;645&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&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;span style=&quot;background-color: #f6e199;&quot;&gt;※이분탐색을 하려면 배열 A를 정렬시켜야 하므로 vector자료구조를 사용하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1625745739777&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;//sort
using namespace std;

int N, M;
vector&amp;lt;int&amp;gt;A;

void Search(int n) {
	int front = 0, rear = N - 1;
	while (front &amp;lt;= rear) {
		int mid = (front + rear) / 2;
		
		if (A[mid] == n) {
			cout &amp;lt;&amp;lt; 1 &amp;lt;&amp;lt; '\n';
			return;
		}
		else if (A[mid] &amp;lt; n) {
			front = mid + 1;
		}
		else if (A[mid] &amp;gt; n) {
			rear = mid - 1;
		}
	}
	cout &amp;lt;&amp;lt; 0 &amp;lt;&amp;lt; '\n';
	return;
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin &amp;gt;&amp;gt; N;
	for (int i = 0; i &amp;lt; N; i++) {
		cin &amp;gt;&amp;gt; n;
		A.push_back(n);
	}
	//이분탐색을 하려면 정렬되어 있어야 한다!
	sort(A.begin(), A.end());
	cin &amp;gt;&amp;gt; M;
	for (int i = 0; i &amp;lt; M; i++) {
		cin &amp;gt;&amp;gt; n;
		Search(n);
	}
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/이분, 삼분탐색</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/296</guid>
      <comments>https://nim-code.tistory.com/296#entry296comment</comments>
      <pubDate>Thu, 8 Jul 2021 21:02:33 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 2003번: 수들의 합 2</title>
      <link>https://nim-code.tistory.com/289</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2003&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.acmicpc.net/problem/2003&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1619169690243&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2003번: 수들의 합 2&quot; data-og-description=&quot;첫째 줄에 N(1 &amp;le; N &amp;le; 10,000), M(1 &amp;le; M &amp;le; 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], &amp;hellip;, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2003&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2003&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lnCKd/hyJZbhty5a/tnuaJKQCX5rT9HiaW7v5J0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2003&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2003&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lnCKd/hyJZbhty5a/tnuaJKQCX5rT9HiaW7v5J0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;2003번: 수들의 합 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫째 줄에 N(1 &amp;le; N &amp;le; 10,000), M(1 &amp;le; M &amp;le; 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], &amp;hellip;, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z1eTq/btq3is8TlyU/Y24TShKLzNr4iIep4IHNe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z1eTq/btq3is8TlyU/Y24TShKLzNr4iIep4IHNe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z1eTq/btq3is8TlyU/Y24TShKLzNr4iIep4IHNe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz1eTq%2Fbtq3is8TlyU%2FY24TShKLzNr4iIep4IHNe0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;투포인터&lt;/span&gt;로 풀 수 있는 문제였다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;투포인터는 하나의 배열에 두 개의 포인터를 사용하는 알고리즘으로, 배열의 원소가 모두 자연수이므로 사용할 수 있었다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;1. start와 end포인터를 0으로 초기화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;2. 합이 M보다 작으면 end포인터를 이동시켜 값을 크게 해주기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;3. M보다 크면 start포인터를 이동시켜 값을 작게 해주기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;4. M과 같으면 count + 1, start포인터 이동시키기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1619170574788&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;

int N, M;
int A[10001];

int countM() {
	int cnt = 0;
	int startx = 0;
	int endx = 0;
	int sum = 0;
	while (endx &amp;lt;= N) {
		if (sum &amp;lt; M) {
			sum += A[endx];
			endx++;
		}
		if (sum &amp;gt;= M) {
			if (sum == M)
				cnt++;
			sum -= A[startx];
			startx++;
		}
	}
	return cnt;
}

int main() {
	cin &amp;gt;&amp;gt; N &amp;gt;&amp;gt; M;
	for (int i = 0; i &amp;lt; N; i++) {
		cin &amp;gt;&amp;gt; A[i];
	}
	cout &amp;lt;&amp;lt; countM() &amp;lt;&amp;lt; '\n';
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;+ 투포인터 말고 dfs로도 풀 수 있었다. (투포인터 방법보다 시간복잡도가 더 큰 방법)(투포인터 : 4ms, dfs : 32ms)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1619170608937&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//dfs조합으로 풀어보기
#include &amp;lt;iostream&amp;gt;
using namespace std;

int N, M;
int A[10001];
bool check[10001];
int cnt = 0;

void dfs(int x, int sum) {
	if (sum &amp;gt; M)
		return;
	if (sum == M) {
		cnt++;
		return;
	}
	if (x &amp;gt;= N)
		return;
	dfs(x + 1, sum + A[x]);
}

int main() {
	cin &amp;gt;&amp;gt; N &amp;gt;&amp;gt; M;
	for (int i = 0; i &amp;lt; N; i++) {
		cin &amp;gt;&amp;gt; A[i];
	}
	for (int i = 0; i &amp;lt; N; i++) {
		dfs(i, 0);
	}
	cout &amp;lt;&amp;lt; cnt &amp;lt;&amp;lt; '\n';
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/여러가지 문제들</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/289</guid>
      <comments>https://nim-code.tistory.com/289#entry289comment</comments>
      <pubDate>Fri, 23 Apr 2021 18:39:22 +0900</pubDate>
    </item>
    <item>
      <title>(C++)백준 20061번: 모노미노도미노 2</title>
      <link>https://nim-code.tistory.com/288</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/20061&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.acmicpc.net/problem/20061&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618991245205&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;20061번: 모노미노도미노 2&quot; data-og-description=&quot;모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다.&amp;nbsp;게임에서 사용하는 좌표 (x, y)에서 x는 행, &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/20061&quot; data-og-url=&quot;https://www.acmicpc.net/problem/20061&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qw7pw/hyJWzj3omK/yRlEFhBA6Gki7ogq83V7rk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/gCn1u/hyJXLwoTIo/gNgeZJKWxw6C0QJYCQkoIK/img.png?width=1222&amp;amp;height=1248&amp;amp;face=0_0_1222_1248,https://scrap.kakaocdn.net/dn/1zsB7/hyJWvvb16p/VFkHL9Z7Umm5IIHVujP8Q1/img.png?width=1230&amp;amp;height=1230&amp;amp;face=0_0_1230_1230&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/20061&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/20061&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qw7pw/hyJWzj3omK/yRlEFhBA6Gki7ogq83V7rk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/gCn1u/hyJXLwoTIo/gNgeZJKWxw6C0QJYCQkoIK/img.png?width=1222&amp;amp;height=1248&amp;amp;face=0_0_1222_1248,https://scrap.kakaocdn.net/dn/1zsB7/hyJWvvb16p/VFkHL9Z7Umm5IIHVujP8Q1/img.png?width=1230&amp;amp;height=1230&amp;amp;face=0_0_1230_1230');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;20061번: 모노미노도미노 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다.&amp;nbsp;게임에서 사용하는 좌표 (x, y)에서 x는 행,&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcjNte/btq3czZntb4/t0x0dsZM323oImv4JeFXPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcjNte/btq3czZntb4/t0x0dsZM323oImv4JeFXPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcjNte/btq3czZntb4/t0x0dsZM323oImv4JeFXPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcjNte%2Fbtq3czZntb4%2Ft0x0dsZM323oImv4JeFXPk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DdV1U/btq26EH74lA/NzUZGJAoSlOqXItfALudz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DdV1U/btq26EH74lA/NzUZGJAoSlOqXItfALudz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DdV1U/btq26EH74lA/NzUZGJAoSlOqXItfALudz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDdV1U%2Fbtq26EH74lA%2FNzUZGJAoSlOqXItfALudz0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nbd2p/btq26m8FYln/xsoBKkzKi3NwqRvspbfNCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nbd2p/btq26m8FYln/xsoBKkzKi3NwqRvspbfNCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nbd2p/btq26m8FYln/xsoBKkzKi3NwqRvspbfNCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnbd2p%2Fbtq26m8FYln%2FxsoBKkzKi3NwqRvspbfNCk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czjILr/btq285ZgNLv/WiIdrPoQMnr1Y4RP5WFb21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czjILr/btq285ZgNLv/WiIdrPoQMnr1Y4RP5WFb21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czjILr/btq285ZgNLv/WiIdrPoQMnr1Y4RP5WFb21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczjILr%2Fbtq285ZgNLv%2FWiIdrPoQMnr1Y4RP5WFb21%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2JUV4/btq26DJc8A7/XBI1MDBV3xtm0zjuKwaKq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2JUV4/btq26DJc8A7/XBI1MDBV3xtm0zjuKwaKq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2JUV4/btq26DJc8A7/XBI1MDBV3xtm0zjuKwaKq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2JUV4%2Fbtq26DJc8A7%2FXBI1MDBV3xtm0zjuKwaKq1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1NYWI/btq26DWJAA5/VB0H9KFnvn9DplWTQWWkv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1NYWI/btq26DWJAA5/VB0H9KFnvn9DplWTQWWkv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1NYWI/btq26DWJAA5/VB0H9KFnvn9DplWTQWWkv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1NYWI%2Fbtq26DWJAA5%2FVB0H9KFnvn9DplWTQWWkv1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgpOpD/btq3caZG99d/lsLqrdjqmHr6grbXSKuXlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgpOpD/btq3caZG99d/lsLqrdjqmHr6grbXSKuXlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgpOpD/btq3caZG99d/lsLqrdjqmHr6grbXSKuXlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgpOpD%2Fbtq3caZG99d%2FlsLqrdjqmHr6grbXSKuXlK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r16W3/btq3auEAkEO/cCDjRyayO8KrbalSoNzZWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r16W3/btq3auEAkEO/cCDjRyayO8KrbalSoNzZWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r16W3/btq3auEAkEO/cCDjRyayO8KrbalSoNzZWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr16W3%2Fbtq3auEAkEO%2FcCDjRyayO8KrbalSoNzZWk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;문제에 적힌 조건들을 구현하는 문제였다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;빨간색 보드와 초록색, 파란색 보드를 모두 한 배열로 구현하지 않고, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;6*4초록색보드 배열과 4*6파란색보드 배열을 따로 만들어 사용했다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;블록을 놓은 위치를 받아 먼저 초록색 보드와 파란색 보드에 블록을 옮겨줬다. 그리고 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;while문을 두 개 중첩하여 먼저 해이나 열이 타일로 가득 찬 경우가 없을 때까지 점수를 획득하도록 하였다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;꽉찬 행이나 열이 없으면 특별한 칸에 블록이 있는지, 있으면 몇행 또는 몇열을 차지하는지 반환하여 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;초록색 보드의 경우는 5-(연한칸의 블록이 있는 행 개수)행부터 그 행의 개수만큼 아래로 내려줬고, 파란색 보드는 같은 연산을 행을 열로 바꾸어서 해주었다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;※특별한 칸에 블록이 있는 경우 그 개수를 세서 모든 행이나 열에 대해 한번에 내려주지 않으면 시간초과가 난다!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1618991874397&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

struct Pos {
	int t;
	int x, y;
};

int N;
int Green[6][4];
int Blue[4][6];
vector&amp;lt;Pos&amp;gt;Block;//블록 놓은 정보
int score = 0;

void greenBlock(int t, int y) {
	//1*1
	if (t == 1) {
		int gx = 0;
		while (gx &amp;lt; 6) {
			if (Green[gx][y] != 0)
				break;
			gx++;
		}
		gx--;
		Green[gx][y] = 1;
	}
	//1*2
	else if (t == 2) {
		int gx = 0;
		while (gx &amp;lt; 6) {
			if (Green[gx][y] != 0 || Green[gx][y + 1] != 0)
				break;
			gx++;
		}
		gx--;
		Green[gx][y] = 1;
		Green[gx][y + 1] = 1;
	}
	//2*1
	else if (t == 3) {
		int gx = 0;
		while (gx &amp;lt; 5) {
			if (Green[gx][y] != 0 || Green[gx + 1][y] != 0)
				break;
			gx++;
		}
		gx--;
		Green[gx][y] = 1;
		Green[gx + 1][y] = 1;
	}
}

void blueBlock(int t,int x) {
	//1*1
	if (t == 1) {
		int gy = 0;
		while (gy &amp;lt; 6) {
			if (Blue[x][gy] != 0)
				break;
			gy++;
		}
		gy--;
		Blue[x][gy] = 1;
	}
	//1*2
	else if (t == 2) {
		int gy = 0;
		while (gy &amp;lt; 5) {
			if (Blue[x][gy] != 0 || Blue[x][gy + 1] != 0)
				break;
			gy++;
		}
		gy--;
		Blue[x][gy] = 1;
		Blue[x][gy + 1] = 1;
	}
	//2*1
	else if (t == 3) {
		int gy = 0;
		while (gy &amp;lt; 6) {
			if (Blue[x][gy] != 0 || Blue[x + 1][gy] != 0)
				break;
			gy++;
		}
		gy--;
		Blue[x][gy] = 1;
		Blue[x + 1][gy] = 1;
	}
}

//초록색보드에서 타일로 가득 찬 행 찾기
int greenFull() {
	bool go_next = false;
	for (int i = 0; i &amp;lt; 6; i++) {
		go_next = false;
		for (int j = 0; j &amp;lt; 4; j++) {
			if (Green[i][j] == 0) {
				go_next = true;
				break;
			}
		}
		if(go_next==false)
			return i;
	}
	return -1;
}

int blueFull() {
	bool go_next = false;
	for (int i = 0; i &amp;lt; 6; i++) {
		go_next = false;
		for (int j = 0; j &amp;lt; 4; j++) {
			if (Blue[j][i] == 0) {
				go_next = true;
				break;
			}
		}
		if (go_next == false)
			return i;
	}
	return -1;
}

void greenRemove(int r) {
	for (int i = 0; i &amp;lt; 4; i++) {
		Green[r][i] = 0;
	}
	//밑으로 내리기
	for (int i = r - 1; i &amp;gt;= 0; i--) {
		for (int j = 0; j &amp;lt; 4; j++) {
			Green[i + 1][j] = Green[i][j];
		}
	}
}

void blueRemove(int c) {
	for (int i = 0; i &amp;lt; 4; i++) {
		Blue[i][c] = 0;
	}
	//밑으로 내리기
	for (int i = c - 1; i &amp;gt;= 0; i--) {
		for (int j = 0; j &amp;lt; 4; j++) {
			Blue[j][i + 1] = Blue[j][i];
		}
	}
}

//초록색 보드의 연한 칸에 블록이 있는지
int greenSpecial() {
	int cnt = 0;
	for (int i = 0; i &amp;lt;= 1; i++) {
		for (int j = 0; j &amp;lt; 4; j++) {
			if (Green[i][j] == 1) {
				cnt++;
				break;
			}
		}
	}
	return cnt;
}

//파란색 보드의 연한 칸에 블록이 있는지
int blueSpecial() {
	int cnt = 0;
	for (int i = 0; i &amp;lt;= 1; i++) {
		for (int j = 0; j &amp;lt; 4; j++) {
			if (Blue[j][i] == 1) {
				cnt++;
				break;
			}
		}
	}
	return cnt;
}

void putBlock() {
	for (int i = 0; i &amp;lt; N; i++) {
		int t = Block[i].t;
		int x = Block[i].x;
		int y = Block[i].y;
		//초록색 보드에 블럭 내리기
		greenBlock(t, y);
		//파란색 보드에 블럭 내리기
		blueBlock(t, x);
		while (1) {
			//초록색 보드에서 행이 가득 찬 경우가 없을 때까지 점수 획득
			while (1) {
				int r = greenFull();
				//꽉 찬 행이 없으면
				if (r == -1)
					break;
				score++;
				greenRemove(r);
			}
			//초록색 보드의 연한 칸에 블록이 있는지
			int cnt = greenSpecial();
			if (cnt == 0)
				break;
			for (int row = 5 - cnt; row &amp;gt;= 0; row--) {
				for (int col = 0; col &amp;lt; 4; col++) {
					Green[row + cnt][col] = Green[row][col];
					Green[row][col] = 0; 
				}
			}
		}
		//파란색 보드
		while (1) {
			//파란색 보드에서 행이 가득 찬 경우가 없을 때까지 점수 획득
			while (1) {
				int c = blueFull();
				//꽉 찬 열이 없으면
				if (c == -1)
					break;
				score++;
				blueRemove(c);
			}
			//파란색 보드의 연한 칸에 블록이 있는지
			int cnt = blueSpecial();
			if (cnt == 0)
				break;
			for (int col = 5 - cnt; col &amp;gt;= 0; col--) {
				for (int row = 0; row &amp;lt; 4; row++) {
					Blue[row][col + cnt] = Blue[row][col];
					Blue[row][col] = 0;
				}
			}
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);
	cout.tie(NULL);
	cin &amp;gt;&amp;gt; N;
	int t, x, y;
	for (int i = 0; i &amp;lt; N; i++) {
		cin &amp;gt;&amp;gt; t &amp;gt;&amp;gt; x &amp;gt;&amp;gt; y;
		Block.push_back({ t,x,y });
	}
	putBlock();
	cout &amp;lt;&amp;lt; score &amp;lt;&amp;lt; '\n';
	int block_cnt = 0;
	for (int i = 0; i &amp;lt; 6; i++) {
		for (int j = 0; j &amp;lt; 4; j++) {
			if (Green[i][j] == 1)
				block_cnt++;
			if (Blue[j][i] == 1)
				block_cnt++;
		}
	}
	cout &amp;lt;&amp;lt; block_cnt &amp;lt;&amp;lt; '\n';
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/시뮬레이션,구현</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/288</guid>
      <comments>https://nim-code.tistory.com/288#entry288comment</comments>
      <pubDate>Wed, 21 Apr 2021 16:58:22 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 15686번: 치킨 배달</title>
      <link>https://nim-code.tistory.com/286</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15686&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.acmicpc.net/problem/15686&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618020265175&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;15686번: 치킨 배달&quot; data-og-description=&quot;크기가 N&amp;times;N인 도시가 있다. 도시는 1&amp;times;1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15686&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15686&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/z74Zt/hyJQJSJc23/Bkxp7vDahrPPHmqysPhm1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15686&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15686&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/z74Zt/hyJQJSJc23/Bkxp7vDahrPPHmqysPhm1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;15686번: 치킨 배달&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;크기가 N&amp;times;N인 도시가 있다. 도시는 1&amp;times;1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bljC6j/btq2gX2A42D/bBGgePfrPk2Xf3GwF0Dg6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bljC6j/btq2gX2A42D/bBGgePfrPk2Xf3GwF0Dg6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bljC6j/btq2gX2A42D/bBGgePfrPk2Xf3GwF0Dg6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbljC6j%2Fbtq2gX2A42D%2FbBGgePfrPk2Xf3GwF0Dg6K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkibRR/btq2gDpMSPz/aEJhW5tlmY0TiEP3Ug7iv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkibRR/btq2gDpMSPz/aEJhW5tlmY0TiEP3Ug7iv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkibRR/btq2gDpMSPz/aEJhW5tlmY0TiEP3Ug7iv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkibRR%2Fbtq2gDpMSPz%2FaEJhW5tlmY0TiEP3Ug7iv0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;치킨집 M개 조합을 구하여 각각 집에 대해 가장 작은 치킨거리를 더하는 문제였다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;처음에 치킨집 M개 위치를 dfs조합으로 구하고, bfs로 각 집에서 시작하여 가장 가까운 치킨집을 구하려고 했는데 시간초과가 나왔다..&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;알고보니 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;각각 집에 대해서 M개의 치킨집까지의 치킨거리를 모두 구하여 가장 작은 수를 더해&lt;/span&gt;주면 되는 거였다..!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1618020516132&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;queue&amp;gt;
#include &amp;lt;algorithm&amp;gt;//min
#include &amp;lt;cstring&amp;gt;//memset
#include &amp;lt;cmath&amp;gt;//abs
using namespace std;

struct Pos {
	int x, y;
};

int N, M;
bool check[13];
vector&amp;lt;Pos&amp;gt;House;//입력받은 집
vector&amp;lt;Pos&amp;gt;Pick;//선택받은 치킨집
vector&amp;lt;Pos&amp;gt;Chicken;//입력받은 치킨집
int Min = 987654321;


//M개 치킨집 조합 구하기
void getChicken(int x, int cnt) {
	if (cnt == M) {
		int res = 0;
		for (int i = 0; i &amp;lt; House.size(); i++) {
			int min_dist = 987654321;
			//각 집에서 가장 가까운 치킨집 찾기
			for (int j = 0; j &amp;lt; Pick.size(); j++) {
				min_dist = min(min_dist, abs(House[i].x - Pick[j].x) + abs(House[i].y - Pick[j].y));
			}
			res += min_dist;
		}
		Min = min(Min, res);
		return;
	}
	for (int i = x; i &amp;lt; Chicken.size(); i++) {
		if (check[i] == true)
			continue;
		check[i] = true;
		Pick.push_back({ Chicken[i].x,Chicken[i].y });
		getChicken(i, cnt + 1);
		check[i] = false;
		Pick.pop_back();
	}
}

int main() {
	cin &amp;gt;&amp;gt; N &amp;gt;&amp;gt; M;
	for (int i = 0; i &amp;lt; N; i++) {
		for (int j = 0; j &amp;lt; N; j++) {
			int n;
			cin &amp;gt;&amp;gt; n;
			if (n == 1)
				House.push_back({ i,j });
			else if (n == 2)
				Chicken.push_back({ i,j });
		}
	}
	getChicken(0, 0);
	cout &amp;lt;&amp;lt; Min &amp;lt;&amp;lt; '\n';
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/시뮬레이션,구현</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/286</guid>
      <comments>https://nim-code.tistory.com/286#entry286comment</comments>
      <pubDate>Sat, 10 Apr 2021 11:08:56 +0900</pubDate>
    </item>
    <item>
      <title>(c++)백준 15685번: 드래곤 커브</title>
      <link>https://nim-code.tistory.com/285</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15685&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.acmicpc.net/problem/15685&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617946318761&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;15685번: 드래곤 커브&quot; data-og-description=&quot;첫째 줄에 드래곤 커브의 개수 N(1 &amp;le; N &amp;le; 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네&amp;nbsp;정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/15685&quot; data-og-url=&quot;https://www.acmicpc.net/problem/15685&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/N38z2/hyJPv8ZhpV/Yo3lKlx512aIZsMsl0CXhk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dtqjI6/hyJPti0A69/JwRSrEQDLIMPZ4mhKau3kk/img.png?width=2201&amp;amp;height=2141&amp;amp;face=0_0_2201_2141,https://scrap.kakaocdn.net/dn/dPmaY8/hyJPoouiiK/dt5PPC83sopxt31aBL4JI1/img.png?width=1643&amp;amp;height=1532&amp;amp;face=0_0_1643_1532&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/15685&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/15685&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/N38z2/hyJPv8ZhpV/Yo3lKlx512aIZsMsl0CXhk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dtqjI6/hyJPti0A69/JwRSrEQDLIMPZ4mhKau3kk/img.png?width=2201&amp;amp;height=2141&amp;amp;face=0_0_2201_2141,https://scrap.kakaocdn.net/dn/dPmaY8/hyJPoouiiK/dt5PPC83sopxt31aBL4JI1/img.png?width=1643&amp;amp;height=1532&amp;amp;face=0_0_1643_1532');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;15685번: 드래곤 커브&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫째 줄에 드래곤 커브의 개수 N(1 &amp;le; N &amp;le; 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네&amp;nbsp;정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMRZLs/btq2fd4L8hr/atKts5fNsfGAe6THu82Kp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMRZLs/btq2fd4L8hr/atKts5fNsfGAe6THu82Kp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMRZLs/btq2fd4L8hr/atKts5fNsfGAe6THu82Kp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMRZLs%2Fbtq2fd4L8hr%2FatKts5fNsfGAe6THu82Kp0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ds12Th/btq2c4f9E2D/4q5HB3hDFti2TMJPxW5ttK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ds12Th/btq2c4f9E2D/4q5HB3hDFti2TMJPxW5ttK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ds12Th/btq2c4f9E2D/4q5HB3hDFti2TMJPxW5ttK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fds12Th%2Fbtq2c4f9E2D%2F4q5HB3hDFti2TMJPxW5ttK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beilqf/btq2gKgzGn5/AeV6ipAMzuoS97jMfC7QgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beilqf/btq2gKgzGn5/AeV6ipAMzuoS97jMfC7QgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beilqf/btq2gKgzGn5/AeV6ipAMzuoS97jMfC7QgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbeilqf%2Fbtq2gKgzGn5%2FAeV6ipAMzuoS97jMfC7QgK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UC2xX/btq2cnNM2DT/70i9DFjRn5CEiMbS0O6Ksk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UC2xX/btq2cnNM2DT/70i9DFjRn5CEiMbS0O6Ksk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UC2xX/btq2cnNM2DT/70i9DFjRn5CEiMbS0O6Ksk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUC2xX%2Fbtq2cnNM2DT%2F70i9DFjRn5CEiMbS0O6Ksk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;처음 문제를 봤을 때 참 난감한 문제였다.. 시뮬레이션 구현 문제는 규칙이 있기 마련이기에 손으로 그려보면서 규칙을 찾았다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;먼저 각 방향이 다음세대를 그릴 때 어떻게 바뀌는지 찾았다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;방향은 아래와 같이 바뀐다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;0 &amp;rarr; 1 (&amp;rarr; &amp;uarr;)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;1 &lt;b&gt;&amp;rarr; 2 (&amp;uarr; &amp;larr;)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;b&gt;2 &lt;b&gt;&amp;rarr; 3 (&amp;larr; &amp;darr;)&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;3 &lt;b&gt;&amp;rarr; 0 (&amp;darr; &amp;rarr;)&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;그리고 다음세대에 새로 그려지는 드래곤 커브가 어떤 순서로 그려지는 지 찾았다. 앞세대의 드래곤 커브를 복사하여 끝 부분에 붙인다고 했을 때, 앞 세대에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;가장 마지막에 그려진 것부터 역순으로 그려진다.&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;아래 그림과 같이 대응된다.&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;470&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KC70h/btq2gKVfoIn/OJTK4CFyUaerLr21UKFMZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KC70h/btq2gKVfoIn/OJTK4CFyUaerLr21UKFMZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KC70h/btq2gKVfoIn/OJTK4CFyUaerLr21UKFMZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKC70h%2Fbtq2gKVfoIn%2FOJTK4CFyUaerLr21UKFMZK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;470&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;위의 규칙들을 따라서 드래곤 커브를 그릴때마다 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;그 방향들을 다음세대를 위해 저장하고&lt;/span&gt;, 다음 세대를 그릴 때 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;가장 마지막에 저장된 방향부터&lt;/span&gt; 방향 규칙에 따라 변경후 드래곤 커브를 그려주면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617947596043&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

int N;
int Grid[101][101] = { 0, };
const int dxy[][2] = { {0,1},{-1,0},{0,-1},{1,0} };//0:오른쪽, 1:위, 2:왼쪽, 3:아래
int convert[] = { 1,2,3,0 };
vector&amp;lt;int&amp;gt;dir;

void DragonCurve(int cnt, int g, int x, int y) {
	if (cnt == g + 1) {
		return;
	}
	int nx = x;
	int ny = y;
	int dir_size = dir.size();
	for (int d = dir_size - 1; d &amp;gt;= 0; d--) {
		int nd = convert[dir[d]];
		nx += dxy[nd][0];
		ny += dxy[nd][1];
		dir.push_back(nd);//다음 세대 위해 현재 방향 정보 저장
		Grid[nx][ny] = 1;//드래곤 커브 지나감
	}
	DragonCurve(cnt + 1, g, nx, ny);
}

int getSquare() {
	int cnt = 0;
	/*
	cout &amp;lt;&amp;lt; '\n';
	for (int i = 0; i &amp;lt; 10; i++) {
		for (int j = 0; j &amp;lt; 10; j++) {
			cout &amp;lt;&amp;lt; Grid[i][j] &amp;lt;&amp;lt; ' ';
		}
		cout &amp;lt;&amp;lt; '\n';
	}
	*/
	for (int i = 0; i &amp;lt; 100; i++) {
		for (int j = 0; j &amp;lt; 100; j++) {
			if (Grid[i][j] == 1 &amp;amp;&amp;amp; Grid[i][j + 1] == 1 &amp;amp;&amp;amp; Grid[i + 1][j] == 1 &amp;amp;&amp;amp; Grid[i + 1][j + 1] == 1)
				cnt++;
		}
	}
	return cnt;
}

int main() {
	cin &amp;gt;&amp;gt; N;
	int x, y, d, g;
	while (N--) {
		dir.clear();
		cin &amp;gt;&amp;gt; y &amp;gt;&amp;gt; x &amp;gt;&amp;gt; d &amp;gt;&amp;gt; g;
		//0세대 미리 해주기(두 칸 칠해줘야 하므로!)
		Grid[x][y] = 1;
		x += dxy[d][0];
		y += dxy[d][1];
		Grid[x][y] = 1;
		if (g == 0)
			continue;
		dir.push_back(d);
		//1세대부터 시작
		DragonCurve(1, g, x, y);
	}
	cout &amp;lt;&amp;lt; getSquare() &amp;lt;&amp;lt; '\n';
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준/시뮬레이션,구현</category>
      <author>Nimgnoej</author>
      <guid isPermaLink="true">https://nim-code.tistory.com/285</guid>
      <comments>https://nim-code.tistory.com/285#entry285comment</comments>
      <pubDate>Fri, 9 Apr 2021 14:54:17 +0900</pubDate>
    </item>
  </channel>
</rss>