<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>programmers Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<atom:link href="https://lycos7560.com/category/cpp/programmers/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>생각의 흐름을 타고 다니며 만드는 블로그</description>
	<lastBuildDate>Sun, 02 Jul 2023 22:15:59 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://lycos7560.com/wp-content/uploads/2022/11/cropped-cropped-cropped-log-1-150x150-1-80x80.png</url>
	<title>programmers Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Programmers 121690 4번 보물 지도 [PCCP 모의고사 2회]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-121690-4%eb%b2%88-%eb%b3%b4%eb%ac%bc-%ec%a7%80%eb%8f%84-pccp-%eb%aa%a8%ec%9d%98%ea%b3%a0%ec%82%ac-2%ed%9a%8c/35629/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-121690-4%eb%b2%88-%eb%b3%b4%eb%ac%bc-%ec%a7%80%eb%8f%84-pccp-%eb%aa%a8%ec%9d%98%ea%b3%a0%ec%82%ac-2%ed%9a%8c/35629/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sun, 02 Jul 2023 22:15:56 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[PCCP 모의고사 2]]]></category>
		<category><![CDATA[121690]]></category>
		<category><![CDATA[121690번]]></category>
		<category><![CDATA[BFS]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[PCCP]]></category>
		<category><![CDATA[Programmers 121690]]></category>
		<category><![CDATA[Programmers 121690번]]></category>
		<category><![CDATA[Programmers Certified Coding Professional]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[그래프]]></category>
		<category><![CDATA[기본]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[깊이]]></category>
		<category><![CDATA[깊이 우선 탐색]]></category>
		<category><![CDATA[모의고사]]></category>
		<category><![CDATA[보물 지도]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[코딩전문역량인증]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[탐색]]></category>
		<category><![CDATA[프로그래머스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35629</guid>

					<description><![CDATA[<p>programmers 121690번 '보물 지도' 문제에 대한 글입니다. BFS 탐색을 이용하여 해결하였습니다. (This article is about the problem of 'Treasure Map' in programmers 121690. It was solved using BFS Search.) [PCCP]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-121690-4%eb%b2%88-%eb%b3%b4%eb%ac%bc-%ec%a7%80%eb%8f%84-pccp-%eb%aa%a8%ec%9d%98%ea%b3%a0%ec%82%ac-2%ed%9a%8c/35629/">Programmers 121690 4번 보물 지도 [PCCP 모의고사 2회]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-8bbbaa18      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#보물-지도" class="uagb-toc-link__trigger">보물 지도</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">보물 지도</h1>



<p class="has-small-font-size"><a href="https://school.programmers.co.kr/learn/courses/15009/lessons/121690" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/15009/lessons/121690</a></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading has-large-font-size">문제 설명</h3>



<p>진수는 보물이 묻힌 장소와 함정이 표시된 보물 지도를 이용해 보물을 찾으려 합니다. </p>



<p>보물지도는 가로 길이가 <code>n</code>, 세로 길이가 <code>m</code>인 직사각형 모양입니다.</p>



<p>맨 왼쪽 아래 칸의 좌표를 (1, 1)으로, 맨 오른쪽 위 칸의 좌표를 (n, m)으로 나타냈을 때, 보물은 (n, m) 좌표에 묻혀있습니다. </p>



<p>또한, 일부 칸에는 함정이 있으며, 해당 칸으로는 지나갈 수 없습니다.</p>



<p>진수는 처음에 (1, 1) 좌표에서 출발해 보물이 있는 칸으로 이동하려 합니다. </p>



<p>이동할 때는 [상,하,좌,우]로 인접한 네 칸 중 한 칸으로 걸어서 이동합니다. </p>



<p>한 칸을 걸어서 이동하는 데 걸리는 시간은 1입니다.</p>



<p>진수는 보물이 위치한 칸으로 수월하게 이동하기 위해 신비로운 신발을 하나 준비했습니다. </p>



<p>이 신발을 신고 뛰면 한 번에 두 칸을 이동할 수 있으며, 함정이 있는 칸도 넘을 수 있습니다. </p>



<p>하지만, 이 신발은 한 번밖에 사용할 수 없습니다. </p>



<p>신비로운 신발을 사용하여 뛰어서 두 칸을 이동하는 시간도 1입니다.</p>



<p>이때 진수가 출발점에서 보물이 위치한 칸으로 이동하는데 필요한 최소 시간을 구해야 합니다.</p>



<p>예를 들어, 진수의 보물지도가 아래 그림과 같을 때, 진수가 걸어서 오른쪽으로 3칸, </p>



<p>걸어서 위쪽으로 3칸 이동하면 6의 시간에 보물이 위치한 칸으로 이동할 수 있습니다. </p>



<p>만약, 오른쪽으로 걸어서 1칸, 위쪽으로 걸어서 1칸, 신비로운 신발을 사용하여 위로 뛰어 2칸, </p>



<p>오른쪽으로 걸어서 2칸 이동한다면 총 5의 시간에 보물이 위치한 칸으로 이동할 수 있으며, </p>



<p>이보다 빠른 시간 내에 보물이 있는 위치에 도착할 수 없습니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="460" height="461" src="https://lycos7560.com/wp-content/uploads/2023/07/image-1.png" alt="" class="wp-image-35631" srcset="https://lycos7560.com/wp-content/uploads/2023/07/image-1.png 460w, https://lycos7560.com/wp-content/uploads/2023/07/image-1-300x300.png 300w, https://lycos7560.com/wp-content/uploads/2023/07/image-1-150x150.png 150w" sizes="(max-width: 460px) 100vw, 460px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>진수의 보물지도가 표현하는 지역의 가로 길이를 나타내는 정수 <code>n</code>, </p>



<p>세로 길이를 나타내는 정수 <code>m</code>, 함정의 위치를 나타내는 2차원 정수 배열 <code>hole</code>이 주어졌을 때, </p>



<p>진수가 보물이 있는 칸으로 이동하는데 필요한 최소 시간을 return 하는 solution 함수를 완성해주세요. </p>



<p><strong>단, 보물이 있는 칸으로 이동할 수 없다면, -1을 return 해야 합니다.</strong></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading has-large-font-size">제한사항</h3>



<ul class="wp-block-list">
<li>1 ≤ <code>n</code>, <code>m</code> ≤ 1,000
<ul class="wp-block-list">
<li>단,&nbsp;<code>n</code>&nbsp;*&nbsp;<code>m</code>이 3 이상인 경우만 입력으로 주어집니다.</li>
</ul>
</li>



<li>1 ≤ <code>hole</code>의 길이 ≤ <code>n</code> * <code>m</code> &#8211; 2
<ul class="wp-block-list">
<li><code>hole[i]</code>는 [a, b]의 형태이며, (a, b) 칸에 함정이 존재한다는 의미이며, 1 ≤ a ≤&nbsp;<code>n</code>, 1 ≤ b ≤&nbsp;<code>m</code>을 만족합니다.</li>



<li>같은 함정에 대한 정보가 중복해서 들어있지 않습니다.</li>
</ul>
</li>



<li>(1, 1) 칸과 (n, m) 칸은 항상 함정이 없습니다.</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading has-large-font-size">입출력 예</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">n</th><th class="has-text-align-left" data-align="left">m</th><th class="has-text-align-left" data-align="left">hole</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">[[2, 3], [3, 3]]</td><td class="has-text-align-left" data-align="left">5</td></tr><tr><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">[[1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 3], [4, 1], [4, 3], [5, 3]]</td><td class="has-text-align-left" data-align="left">-1</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-default" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h3 class="wp-block-heading has-large-font-size">입출력 예 설명</h3>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<ul class="wp-block-list">
<li>본문의 예시와 같습니다.</li>
</ul>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<ul class="wp-block-list">
<li>보물지도를 그림으로 나타내면 아래와 같으며, 보물이 위치한 칸으로 이동할 수 없습니다. <br>따라서, -1을 return 해야 합니다.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="619" height="466" src="https://lycos7560.com/wp-content/uploads/2023/07/image-2.png" alt="" class="wp-image-35637" srcset="https://lycos7560.com/wp-content/uploads/2023/07/image-2.png 619w, https://lycos7560.com/wp-content/uploads/2023/07/image-2-300x226.png 300w" sizes="(max-width: 619px) 100vw, 619px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h2 class="wp-block-heading has-large-font-size">통과된 코드</h2>



<p>신발은 구멍과 상관없이 사용해도 된다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;tuple>
#include &lt;queue>
bool _Map[1001][1001];
bool _IsVisted[1001][1001][2]; // 배열의 마지막은 신발의 사용 유무
int _dxdy[8][2] = { {1,0},{0,1},{-1,0},{0,-1}, {2,0},{0,2},{-2,0},{0,-2} };
using namespace std;
int solution(int n, int m, vector&lt;vector&lt;int>> holeVector) {
    int answer = -1;
	for (auto&amp; hole : holeVector)
		_Map[hole[0]][hole[1]] = true;
	tuple&lt;int, int, bool, int> _CntPos = make_tuple(1, 1, true, 0);
	queue&lt;tuple&lt;int, int, bool, int>> _MyQueue;
	_IsVisted[1][1][1] = true;
	_MyQueue.push(_CntPos);
	while (!_MyQueue.empty()) {
		_CntPos = _MyQueue.front();
		_MyQueue.pop();
		int _cntX = get&lt;0>(_CntPos);
		int _cntY = get&lt;1>(_CntPos);
		bool _shoes = get&lt;2>(_CntPos);
		int _cnt = get&lt;3>(_CntPos);	

		// 목적지에 도착
		if (_cntX == n &amp;&amp; _cntY == m) {
				answer = _cnt;
				break;
		}

		// 총 8가지의 경우를 탐색
		// 0 ~ 3 상,하,좌,우
		// 4 ~ 7 신발을 사용하여 상,하,좌,우를 2칸씩 이동
		// 꼭 구멍이 있어야 신발을 사용하는 것이 아니다.
		for (int i = 0; i &lt; 8; i++) {
			if (!_shoes &amp;&amp; i >= 4) break;
			int _dx = _cntX + _dxdy[i][0];
			int _dy = _cntY + _dxdy[i][1];
			// 맵의 범위를 벗어나는 경우
			if (_dx > n || _dy > m || _dx &lt;= 0 || _dy &lt;= 0 ) 
				continue;
			// 이동을 하려던 곳이 구멍 &amp;&amp; 신발이 없음 || 이미 방문한 적이 있다.
			if (_Map[_dx][_dy] || _IsVisted[_dx][_dy][_shoes])
				continue;

			if (i >= 4) { // 신발을 사용하여 이동하는 경우
				_MyQueue.push(make_tuple(_dx, _dy, false, _cnt + 1));
				_IsVisted[_dx][_dy][false] = true;
			}
			else { // 신발을 사용하지 않는 경우
				_MyQueue.push(make_tuple(_dx, _dy, _shoes, _cnt + 1));
				_IsVisted[_dx][_dy][_shoes] = true;
			}

		}
	}

	return answer;
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="554" height="590" src="https://lycos7560.com/wp-content/uploads/2023/07/image-3.png" alt="" class="wp-image-35640" srcset="https://lycos7560.com/wp-content/uploads/2023/07/image-3.png 554w, https://lycos7560.com/wp-content/uploads/2023/07/image-3-282x300.png 282w" sizes="(max-width: 554px) 100vw, 554px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-121690-4%eb%b2%88-%eb%b3%b4%eb%ac%bc-%ec%a7%80%eb%8f%84-pccp-%eb%aa%a8%ec%9d%98%ea%b3%a0%ec%82%ac-2%ed%9a%8c/35629/">Programmers 121690 4번 보물 지도 [PCCP 모의고사 2회]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-121690-4%eb%b2%88-%eb%b3%b4%eb%ac%bc-%ec%a7%80%eb%8f%84-pccp-%eb%aa%a8%ec%9d%98%ea%b3%a0%ec%82%ac-2%ed%9a%8c/35629/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 150369 택배 배달과 수거하기 [2023 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-150369-%ed%83%9d%eb%b0%b0-%eb%b0%b0%eb%8b%ac%ea%b3%bc-%ec%88%98%ea%b1%b0%ed%95%98%ea%b8%b0-2023-kakao-blind-recruitment/35501/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-150369-%ed%83%9d%eb%b0%b0-%eb%b0%b0%eb%8b%ac%ea%b3%bc-%ec%88%98%ea%b1%b0%ed%95%98%ea%b8%b0-2023-kakao-blind-recruitment/35501/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Fri, 16 Jun 2023 04:20:23 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2023 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[150369]]></category>
		<category><![CDATA[150369번]]></category>
		<category><![CDATA[2023 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 150369]]></category>
		<category><![CDATA[Programmers 150369번]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[반례]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[예제]]></category>
		<category><![CDATA[추가 반례]]></category>
		<category><![CDATA[추가 예제]]></category>
		<category><![CDATA[추가반례]]></category>
		<category><![CDATA[추가예제]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[택배 배달과 수거하기]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35501</guid>

					<description><![CDATA[<p>Programmers 150369번 '택배 배달과 수거하기' 문제에 대한 글입니다. (This article is about the issue of 'Delivery and Collection' in Programmers Number 150369) [2023 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-150369-%ed%83%9d%eb%b0%b0-%eb%b0%b0%eb%8b%ac%ea%b3%bc-%ec%88%98%ea%b1%b0%ed%95%98%ea%b8%b0-2023-kakao-blind-recruitment/35501/">Programmers 150369 택배 배달과 수거하기 [2023 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-2ad27311      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#택배-배달과-수거하기" class="uagb-toc-link__trigger">택배 배달과 수거하기</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#더-효율적인-코드" class="uagb-toc-link__trigger">더 효율적인 코드</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#추가-반례" class="uagb-toc-link__trigger">추가 반례</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">택배 배달과 수거하기</h1>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/150369">https://school.programmers.co.kr/learn/courses/30/lessons/150369</a></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="930" height="271" src="https://lycos7560.com/wp-content/uploads/2023/06/image-33.png" alt="" class="wp-image-35504" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-33.png 930w, https://lycos7560.com/wp-content/uploads/2023/06/image-33-300x87.png 300w, https://lycos7560.com/wp-content/uploads/2023/06/image-33-768x224.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>당신은 일렬로 나열된 <code>n</code>개의 집에 택배를 배달하려 합니다. </p>



<p>배달할 물건은 모두 크기가 같은 재활용 택배 상자에 담아 배달하며, 배달을 다니면서 빈 재활용 택배 상자들을 수거하려 합니다.</p>



<p>배달할 택배들은 모두 재활용 택배 상자에 담겨서 물류창고에 보관되어 있고, <code>i</code>번째 집은 물류창고에서 거리 <code>i</code>만큼 떨어져 있습니다. </p>



<p>또한 <code>i</code>번째 집은 <code>j</code>번째 집과 거리 <code>j - i</code>만큼 떨어져 있습니다. (1 ≤ <code>i</code> ≤ <code>j</code> ≤ <code>n</code>)</p>



<p>트럭에는 재활용 택배 상자를 최대 <code>cap</code>개 실을 수 있습니다. </p>



<p>트럭은 배달할 재활용 택배 상자들을 실어 물류창고에서 출발해 각 집에 배달하면서, 빈 재활용 택배 상자들을 수거해 물류창고에 내립니다. </p>



<p>각 집마다 배달할 재활용 택배 상자의 개수와 수거할 빈 재활용 택배 상자의 개수를 알고 있을 때, </p>



<p>트럭 하나로 모든 배달과 수거를 마치고 물류창고까지 돌아올 수 있는 최소 이동 거리를 구하려 합니다. </p>



<p><strong>각 집에 배달 및 수거할 때, 원하는 개수만큼 택배를 배달 및 수거할 수 있습니다.</strong></p>



<p>다음은 <code>cap</code>=4 일 때, 최소 거리로 이동하면서 5개의 집에 배달 및 수거하는 과정을 나타낸 예시입니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>배달 및 수거할 재활용 택배 상자 개수</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left"></th><th class="has-text-align-left" data-align="left">집 #1</th><th class="has-text-align-left" data-align="left">집 #2</th><th class="has-text-align-left" data-align="left">집 #3</th><th class="has-text-align-left" data-align="left">집 #4</th><th class="has-text-align-left" data-align="left">집 #5</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">배달</td><td class="has-text-align-left" data-align="left">1개</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">3개</td><td class="has-text-align-left" data-align="left">1개</td><td class="has-text-align-left" data-align="left">2개</td></tr><tr><td class="has-text-align-left" data-align="left">수거</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">3개</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">4개</td><td class="has-text-align-left" data-align="left">0개</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>배달 및 수거 과정</strong></p>



<figure class="wp-block-table"><table><thead><tr><th></th><th>집 #1</th><th>집 #2</th><th>집 #3</th><th>집 #4</th><th>집 #5</th><th>설명</th></tr></thead><tbody><tr><td>남은 배달/수거</td><td>1/0</td><td>0/3</td><td>3/0</td><td>1/4</td><td>2/0</td><td>물류창고에서 택배 3개를 트럭에 실어 출발합니다.</td></tr><tr><td>남은 배달/수거</td><td>1/0</td><td>0/3</td><td>3/0</td><td><strong>0</strong>/4</td><td><strong>0</strong>/0</td><td>물류창고에서 5번째 집까지 이동하면서(거리 5) 4번째 집에 택배 1개를 배달하고, 5번째 집에 택배 2개를 배달합니다.</td></tr><tr><td>남은 배달/수거</td><td>1/0</td><td>0/3</td><td>3/0</td><td>0/<strong>0</strong></td><td>0/0</td><td>5번째 집에서 물류창고까지 이동하면서(거리 5) 4번째 집에서 빈 택배 상자 4개를 수거한 후, 수거한 빈 택배 상자를 물류창고에 내리고 택배 4개를 트럭에 싣습니다.</td></tr><tr><td>남은 배달/수거</td><td><strong>0</strong>/0</td><td>0/3</td><td><strong>0</strong>/0</td><td>0/0</td><td>0/0</td><td>물류창고에서 3번째 집까지 이동하면서(거리 3) 1번째 집에 택배 1개를 배달하고, 3번째 집에 택배 3개를 배달합니다.</td></tr><tr><td>남은 배달/수거</td><td>0/0</td><td>0/<strong>0</strong></td><td>0/0</td><td>0/0</td><td>0/0</td><td>3번째 집에서 물류창고까지 이동하면서(거리 3) 2번째 집에서 빈 택배 상자 3개를 수거한 후, 수거한 빈 택배 상자를 물류창고에 내립니다.</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>16(=5+5+3+3)의 거리를 이동하면서 모든 배달 및 수거를 마쳤습니다. </p>



<p>같은 거리로 모든 배달 및 수거를 마치는 다른 방법이 있지만, </p>



<p>이보다 짧은 거리로 모든 배달 및 수거를 마치는 방법은 없습니다.</p>



<p>트럭에 실을 수 있는 재활용 택배 상자의 최대 개수를 나타내는 정수 <code>cap</code>, 배달할 집의 개수를 나타내는 정수 <code>n</code>, </p>



<p>각 집에 배달할 재활용 택배 상자의 개수를 담은 1차원 정수 배열 <code>deliveries</code>와 </p>



<p>각 집에서 수거할 빈 재활용 택배 상자의 개수를 담은 1차원 정수 배열 <code>pickups</code>가 매개변수로 주어집니다. </p>



<p>이때, 트럭 하나로 모든 배달과 수거를 마치고 물류창고까지 돌아올 수 있는 최소 이동 거리를 return 하도록 solution 함수를 완성해 주세요.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-medium-font-size">제한사항</h5>



<ul class="wp-block-list">
<li>1 ≤&nbsp;<code>cap</code>&nbsp;≤ 50</li>



<li>1 ≤&nbsp;<code>n</code>&nbsp;≤ 100,000</li>



<li><code>deliveries</code>의 길이 = <code>pickups</code>의 길이 = <code>n</code>
<ul class="wp-block-list">
<li><code>deliveries[i]</code>는 i+1번째 집에 배달할 재활용 택배 상자의 개수를 나타냅니다.</li>



<li><code>pickups[i]</code>는 i+1번째 집에서 수거할 빈 재활용 택배 상자의 개수를 나타냅니다.</li>



<li>0 ≤&nbsp;<code>deliveries</code>의 원소 ≤ 50</li>



<li>0 ≤&nbsp;<code>pickups</code>의 원소 ≤ 50</li>
</ul>
</li>



<li>트럭의 초기 위치는 물류창고입니다.</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading">입출력 예</h5>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">cap</th><th class="has-text-align-left" data-align="left">n</th><th class="has-text-align-left" data-align="left">deliveries</th><th class="has-text-align-left" data-align="left">pickups</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">[1, 0, 3, 1, 2]</td><td class="has-text-align-left" data-align="left">[0, 3, 0, 4, 0]</td><td class="has-text-align-left" data-align="left">16</td></tr><tr><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">7</td><td class="has-text-align-left" data-align="left">[1, 0, 2, 0, 1, 0, 2]</td><td class="has-text-align-left" data-align="left">[0, 2, 0, 1, 0, 2, 0]</td><td class="has-text-align-left" data-align="left">30</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h5 class="wp-block-heading has-medium-font-size">입출력 예 설명</h5>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<ul class="wp-block-list">
<li>문제 예시와 동일합니다.</li>
</ul>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<p class="has-medium-font-size"><strong>배달 및 수거할 재활용 택배 상자 개수</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th></th><th class="has-text-align-left" data-align="left">집 #1</th><th class="has-text-align-left" data-align="left">집 #2</th><th class="has-text-align-left" data-align="left">집 #3</th><th class="has-text-align-left" data-align="left">집 #4</th><th class="has-text-align-left" data-align="left">집 #5</th><th class="has-text-align-left" data-align="left">집 #6</th><th class="has-text-align-left" data-align="left">집 #7</th></tr></thead><tbody><tr><td>배달</td><td class="has-text-align-left" data-align="left">1개</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">2개</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">1개</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">2개</td></tr><tr><td>수거</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">2개</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">1개</td><td class="has-text-align-left" data-align="left">0개</td><td class="has-text-align-left" data-align="left">2개</td><td class="has-text-align-left" data-align="left">0개</td></tr></tbody></table></figure>



<p class="has-medium-font-size"><strong>배달 및 수거 과정</strong></p>



<figure class="wp-block-table"><table><thead><tr><th></th><th>집 #1</th><th>집 #2</th><th>집 #3</th><th>집 #4</th><th>집 #5</th><th>집 #6</th><th>집 #7</th><th class="has-text-align-left" data-align="left">설명</th></tr></thead><tbody><tr><td>남은 배달/수거</td><td>1/0</td><td>0/2</td><td>2/0</td><td>0/1</td><td>1/0</td><td>0/2</td><td>2/0</td><td class="has-text-align-left" data-align="left">물류창고에서 택배 2개를 트럭에 실어 출발합니다.</td></tr><tr><td>남은 배달/수거</td><td>1/0</td><td>0/2</td><td>2/0</td><td>0/1</td><td>1/0</td><td>0/2</td><td><strong>0</strong>/0</td><td class="has-text-align-left" data-align="left">물류창고에서 7번째 집까지 이동하면서(거리 7) 7번째 집에 택배 2개를 배달합니다.</td></tr><tr><td>남은 배달/수거</td><td>1/0</td><td>0/2</td><td>2/0</td><td>0/1</td><td>1/0</td><td>0/<strong>0</strong></td><td><strong>0</strong>/0</td><td class="has-text-align-left" data-align="left">7번째 집에서 물류창고까지 이동하면서(거리 7) 6번째 집에서 빈 택배 상자 2개를 수거한 후, 수거한 빈 택배 상자를 물류창고에 내리고 택배 2개를 트럭에 싣습니다.</td></tr><tr><td>남은 배달/수거</td><td>1/0</td><td>0/2</td><td><strong>1</strong>/0</td><td>0/1</td><td><strong>0</strong>/0</td><td>0/0</td><td>0/0</td><td class="has-text-align-left" data-align="left">물류창고에서 5번째 집까지 이동하면서(거리 5) 3번째 집에 택배 1개를 배달하고, 5번째 집에 택배 1개를 배달합니다.</td></tr><tr><td>남은 배달/수거</td><td>1/0</td><td>0/<strong>1</strong></td><td>1/0</td><td>0/<strong>0</strong></td><td>0/0</td><td>0/0</td><td>0/0</td><td class="has-text-align-left" data-align="left">5번째 집에서 물류창고까지 이동하면서(거리 5) 4번째 집에서 빈 택배 상자 1개를 수거하고 2번째 집에서 빈 택배 상자 1개를 수거한 후, 수거한 빈 택배 상자를 물류창고에 내리고 택배 2개를 트럭에 싣습니다.</td></tr><tr><td>남은 배달/수거</td><td><strong>0</strong>/0</td><td>0/1</td><td><strong>0</strong>/0</td><td>0/0</td><td>0/0</td><td>0/0</td><td>0/0</td><td class="has-text-align-left" data-align="left">물류창고에서 3번째 집까지 이동하면서(거리 3) 1번째 집에 택배 1개를 배달하고, 3번째 집에 택배 1개를 배달합니다.</td></tr><tr><td>남은 배달/수거</td><td>0/0</td><td>0/<strong>0</strong></td><td>0/0</td><td>0/0</td><td>0/0</td><td>0/0</td><td>0/0</td><td class="has-text-align-left" data-align="left">3번째 집에서 물류창고까지 이동하면서(거리 3) 2번째 집에서 빈 택배 상자 1개를 수거한 후, 수거한 빈 택배 상자를 물류창고에 내립니다.</td></tr></tbody></table></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>30(=7+7+5+5+3+3)의 거리를 이동하면서 모든 배달 및 수거를 마쳤습니다. </p>



<p>같은 거리로 모든 배달 및 수거를 마치는 다른 방법이 있지만, 이보다 짧은 거리로 모든 배달 및 수거를 마치는 방법은 없습니다.</p>



<p>따라서, 30을 return 하면 됩니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h2 class="wp-block-heading">통과된 코드</h2>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>

using namespace std;

long long solution(int cap, int n, vector&lt;int> deliveries, vector&lt;int> pickups) {
	long long answer = 0;
	int _delP = -1, _picP = -1;

	for (int i = deliveries.size() - 1; i >= 0; i--)
		if (deliveries[i]) {
			_delP = i;
			break;
		}
	for (int i = pickups.size() - 1; i >= 0; i--)
		if (pickups[i]) {
			_picP = i;
			break;
		}

	while (_delP >= 0 || _picP >= 0) {
		answer += (max(_delP, _picP) + 1) * 2;
		int _del = cap, _pic = cap;
		for (int i = _delP; i >= 0; i--) {
			if (_del >= deliveries[i]) _del -= deliveries[i];
			else {
				deliveries[i] -= _del;
				break;
			}
			_delP--;
		}

		for (int i = _picP; i >= 0; i--) {
			if (_pic >= pickups[i]) _pic -= pickups[i];
			else {
				pickups[i] -= _pic;
				break;
			}
			_picP--;
		}
	}
    
	return answer;
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="372" height="491" src="https://lycos7560.com/wp-content/uploads/2023/06/image-34.png" alt="" class="wp-image-35507" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-34.png 372w, https://lycos7560.com/wp-content/uploads/2023/06/image-34-227x300.png 227w" sizes="(max-width: 372px) 100vw, 372px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">더 효율적인 코드</h2>



<p><a href="https://school.programmers.co.kr/questions/43364" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/questions/43364</a></p>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>

using namespace std;

long long solution(int cap, int n, vector&lt;int> deliveries, vector&lt;int> pickups) {
    long long answer = 0;

    int d = 0;
    int p = 0;
    // 역순으로 벡터를 탐색
    for (int i = n - 1; i >= 0; i--) {
        int cnt = 0; // 왕복 횟수 초기화
        d -= deliveries[i]; // 배달
        p -= pickups[i]; // 픽업 

        // 해당 인덱스를 몇번 반복
        while (d &lt; 0 || p &lt; 0) {
            d += cap;
            p += cap;
            // 해당 위치를 반복하는 횟수를 올려준다
            cnt += 1;
        }
        // (인덱스까지의 거리) * 왕복(2) * 왕복횟수
        answer += (i + 1) * 2 * cnt;
    }

    return answer;
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="345" height="464" src="https://lycos7560.com/wp-content/uploads/2023/06/image-35.png" alt="" class="wp-image-35514" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-35.png 345w, https://lycos7560.com/wp-content/uploads/2023/06/image-35-223x300.png 223w" sizes="(max-width: 345px) 100vw, 345px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">출처 : https://school.programmers.co.kr/questions/43364

필자는 생각합니다.

카카오가 코테의 수준을 너무나도 높여버렸습니다.

이젠 레벨2와 레벨3의 구분이라는 것이 있는지 모르겠습니다.

난이도가 다 레벨3이 된 것 같은 기분은 저만 드는 것일까요?

cap만큼의 공간을 사용하여, 배달도 수행하고, 회수도 수행해야 합니다.

이 문제를 풀기위한 당연한 기준들을 한 번 정리해보려고 합니다.

배달할 물건이나, 회수할 물건이 i번째 까지 존재한다면, 당신은 반드시 i번째 까지는 적어도 한 번은 가야합니다.

한 번 출발하여, 물류창고로 돌아오면, cap만큼의 배달을 수행할 수 있고, cap만큼의 물건을 회수 해 올 수 있습니다.

한 곳에서 택배를 전부 배달하지 못했거나, 회수하지 못했다면, 당신은 물류창고로 돌아왔다가, 다시 같은 장소로 떠나야 합니다.

아마, 이 문제들을 심히 고민해보았다면, 3가지의 정의는 내릴 수 있어야 합니다.

그리고 2번 정의에 따라, 물건의 전달이나, 물건의 회수는 항상 최대 cap만큼 수행 할 수 있다는 사실을 알 수 있습니다.

아마, 이해가 되지 않을 수 있습니다. 전달해야 할 물건이 너무 많아서 회수가 불가능한 상황이 생길 수 있지 않느냐고 말이죠.

하지만, 그 문제는 배열을 거꾸로 탐색하면 쉽게 해결 할 수 있습니다.

1번 정의에 따라, 당신은 반드시 전달할 물건이나, 회수할 물건이 있는 장소까지는 도달해야 합니다.

거꾸로 배열을 탐색한다는 의미는, 이미 방문이 가능한 모든 지점들을 왕복했다는 가정하에 문제를 풀게 됩니다.

물류창고에서, 목적지 까지 가는데, 택배가 너무 많아 회수가 불가능 하였다면, 돌아올 때는 이미 모든 장소를 한 번씩 들렸기에,

트럭에 물건이 비어있게 됩니다. 이 때 회수하면 됩니다.

이로써 이런 정의들을 단순화 시켜보자면, 사실 물건을 전달하는 것과, 회수하는 것은 별개로 봐도 상관이 없습니다.

그리고 이 문제는 Greedy한 문제가 됩니다.

트럭이 한 번 떠나게 되면, cap만큼의 물건을 배달할 수 있고, cap만큼의 물건을 회수 할 수 있다는 사실을 이해했다면,

이 문제의 절반을 풀었다고 무방합니다.

이제 배열을 거꾸로 탐색하여, 전달 한 물건이나, 회수 할 물건이 있는지 탐색을 수행합니다.

만약 존재한다면, 해당 값을 어딘가에서 감소 시켜줍니다.

그리고, 전달 할 물건이나 회수 할 물건이 존재하였기에, cap만큼의 배달량, cap만큼의 회수량을 처리 할 수 있다고,

이 값을 증가 시켜줍니다.

만약 한 번 해당 장소에 방문 한 것으로, 커버가 되지 않는다면, 다시 방문하여, cap만큼의 배달량, 회수량을 증가 시켜줍니다.

그 대신에 answer에 추가 할 때는 반복 횟수 만큼 곱해주어야 합니다.

여기서 중요합니다.

cap만큼의 배달량, 회수량을 그대로 사용하여, 다음 값을 계산할 때 그대로 이용합니다.

deliveries[i]가 2, pickups[i]가 3 이고 cap이 3이라고 하면, pickups의 값은 1만큼의 잉여 회수량이 남게 됩니다.

배열을 거꾸로 탐색한다는 의미는, i번째까지 이미 도달하고, 다시 물류창고로 돌아간다는 왕복운동의 기준으로 고려한다는 의미입니다.

이 때 잉여량이 발생하였다면, 어차피 이전 장소에서 한 번 더 사용하면 효율성 높게 업무를 처리 할 수 있게 됩니다.

여기서 주의할 점은, deliveries[i]와 pickups[i]를 가감해도 배달량과 회수량이 남아있다고 하면,

answer에 답을 추가 할 필요가 없습니다. 잉여량이 현재 배달량과 회수량을 커버하므로, 이 경우는 답을 추가하는 실수를 저지르지 맙시다.

설명을 쓰고도 제가 무슨 소리를 하는지 모르는 상황이 되었습니다.

그래도 이 문제를 깊게 고민하였다면, 약간의 도움이 됬으리라고 생각합니다.

감사합니다.</pre>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">추가 반례</h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">cap</th><th class="has-text-align-left" data-align="left">n</th><th class="has-text-align-left" data-align="left">deliveries</th><th class="has-text-align-left" data-align="left">pickups</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">[0, 0]</td><td class="has-text-align-left" data-align="left">[0, 4]</td><td class="has-text-align-left" data-align="left">8</td></tr><tr><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">[0, 0]</td><td class="has-text-align-left" data-align="left">[0, 0]</td><td class="has-text-align-left" data-align="left">0</td></tr><tr><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">[0, 6]</td><td class="has-text-align-left" data-align="left">[0, 0]</td><td class="has-text-align-left" data-align="left">12</td></tr><tr><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">[12, 0]</td><td class="has-text-align-left" data-align="left">[0, 12]</td><td class="has-text-align-left" data-align="left">48</td></tr><tr><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">[25, 24, 51, 0]</td><td class="has-text-align-left" data-align="left">[51, 0, 0, 49]</td><td class="has-text-align-left" data-align="left">140</td></tr><tr><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">3</td><td class="has-text-align-left" data-align="left">[1, 6, 9]</td><td class="has-text-align-left" data-align="left">[5, 10, 20]</td><td class="has-text-align-left" data-align="left">34</td></tr></tbody></table></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-150369-%ed%83%9d%eb%b0%b0-%eb%b0%b0%eb%8b%ac%ea%b3%bc-%ec%88%98%ea%b1%b0%ed%95%98%ea%b8%b0-2023-kakao-blind-recruitment/35501/">Programmers 150369 택배 배달과 수거하기 [2023 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-150369-%ed%83%9d%eb%b0%b0-%eb%b0%b0%eb%8b%ac%ea%b3%bc-%ec%88%98%ea%b1%b0%ed%95%98%ea%b8%b0-2023-kakao-blind-recruitment/35501/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 150366 표 병합 [2023 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-150366-%ed%91%9c-%eb%b3%91%ed%95%a9-2022-kakao-blind-recruitment/35409/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-150366-%ed%91%9c-%eb%b3%91%ed%95%a9-2022-kakao-blind-recruitment/35409/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sun, 11 Jun 2023 13:55:31 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2023 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[150366]]></category>
		<category><![CDATA[150366번]]></category>
		<category><![CDATA[2023 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 150366]]></category>
		<category><![CDATA[Programmers 150366번]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[반례]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[예제]]></category>
		<category><![CDATA[추가 반례]]></category>
		<category><![CDATA[추가 예제]]></category>
		<category><![CDATA[추가반례]]></category>
		<category><![CDATA[추가예제]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[표 병합]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35409</guid>

					<description><![CDATA[<p>Programmers 150366 표 병합 문제에 대한 글입니다.  (This article is about the problem of Merge Tables Programmers Number 150366.) [2022 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-150366-%ed%91%9c-%eb%b3%91%ed%95%a9-2022-kakao-blind-recruitment/35409/">Programmers 150366 표 병합 [2023 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-300073ee      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#표-병합" class="uagb-toc-link__trigger">표 병합</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#추가-반례" class="uagb-toc-link__trigger">추가 반례</a></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">표 병합</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/150366" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/150366</a></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-large-font-size">문제 설명</h5>



<p>당신은 표 편집 프로그램을 작성하고 있습니다.</p>



<p>표의 크기는 50 × 50으로 고정되어있고 초기에 모든 셀은 비어 있습니다.</p>



<p>각 셀은 문자열 값을 가질 수 있고, 다른 셀과 병합될 수 있습니다.</p>



<p>위에서&nbsp;<code>r</code>번째, 왼쪽에서&nbsp;<code>c</code>번째 위치를 (<code>r</code>,&nbsp;<code>c</code>)라고 표현할 때, 당신은 다음 명령어들에 대한 기능을 구현하려고 합니다.</p>



<ol class="wp-block-list">
<li><code>"UPDATE r c value"</code>
<ul class="wp-block-list">
<li>(<code>r</code>,&nbsp;<code>c</code>) 위치의 셀을 선택합니다.</li>



<li>선택한 셀의 값을&nbsp;<code>value</code>로 바꿉니다.</li>
</ul>
</li>



<li><code>"UPDATE value1 value2"</code>
<ul class="wp-block-list">
<li><code>value1</code>을 값으로 가지고 있는 모든 셀을 선택합니다.</li>



<li>선택한 셀의 값을&nbsp;<code>value2</code>로 바꿉니다.</li>
</ul>
</li>



<li><code>"MERGE r1 c1 r2 c2"</code>
<ul class="wp-block-list">
<li>(<code>r1</code>,&nbsp;<code>c1</code>) 위치의 셀과 (<code>r2</code>,&nbsp;<code>c2</code>) 위치의 셀을 선택하여 병합합니다.</li>



<li>선택한 두 위치의 셀이 같은 셀일 경우 무시합니다.</li>



<li>선택한 두 셀은 서로 인접하지 않을 수도 있습니다. 이 경우 (<code>r1</code>,&nbsp;<code>c1</code>) 위치의 셀과 (<code>r2</code>,&nbsp;<code>c2</code>) 위치의 셀만 영향을 받으며, <br>그 사이에 위치한 셀들은 영향을 받지 않습니다.</li>



<li>두 셀 중 한 셀이 값을 가지고 있을 경우 병합된 셀은 그 값을 가지게 됩니다.</li>



<li>두 셀 모두 값을 가지고 있을 경우 병합된 셀은 (<code>r1</code>,&nbsp;<code>c1</code>) 위치의 셀 값을 가지게 됩니다.</li>



<li>이후 (<code>r1</code>,&nbsp;<code>c1</code>) 와 (<code>r2</code>,&nbsp;<code>c2</code>) 중 어느 위치를 선택하여도 병합된 셀로 접근합니다.</li>
</ul>
</li>



<li><code>"UNMERGE r c"</code>
<ul class="wp-block-list">
<li>(<code>r</code>,&nbsp;<code>c</code>) 위치의 셀을 선택하여 해당 셀의 모든 병합을 해제합니다.</li>



<li>선택한 셀이 포함하고 있던 모든 셀은 프로그램 실행 초기의 상태로 돌아갑니다.</li>



<li>병합을 해제하기 전 셀이 값을 가지고 있었을 경우 (<code>r</code>,&nbsp;<code>c</code>) 위치의 셀이 그 값을 가지게 됩니다.</li>
</ul>
</li>



<li><code>"PRINT r c"</code>
<ul class="wp-block-list">
<li>(<code>r</code>,&nbsp;<code>c</code>) 위치의 셀을 선택하여 셀의 값을 출력합니다.</li>



<li>선택한 셀이 비어있을 경우&nbsp;<code>"EMPTY"</code>를 출력합니다.</li>
</ul>
</li>
</ol>



<p>아래는&nbsp;<code>UPDATE</code>&nbsp;명령어를 실행하여 빈 셀에 값을 입력하는 예시입니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">commands</th><th class="has-text-align-left" data-align="left">효과</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">UPDATE 1 1 menu</td><td class="has-text-align-left" data-align="left">(1,1)에&nbsp;<code>"menu"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 1 2 category</td><td class="has-text-align-left" data-align="left">(1,2)에&nbsp;<code>"category"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 2 1 bibimbap</td><td class="has-text-align-left" data-align="left">(2,1)에&nbsp;<code>"bibimbap"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 2 2 korean</td><td class="has-text-align-left" data-align="left">(2,2)에&nbsp;<code>"korean"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 2 3 rice</td><td class="has-text-align-left" data-align="left">(2,3)에&nbsp;<code>"rice"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 3 1 ramyeon</td><td class="has-text-align-left" data-align="left">(3,1)에&nbsp;<code>"ramyeon"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 3 2 korean</td><td class="has-text-align-left" data-align="left">(3,2)에&nbsp;<code>"korean"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 3 3 noodle</td><td class="has-text-align-left" data-align="left">(3,3)에&nbsp;<code>"noodle"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 3 4 instant</td><td class="has-text-align-left" data-align="left">(3,4)에&nbsp;<code>"instant"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 4 1 pasta</td><td class="has-text-align-left" data-align="left">(4,1)에&nbsp;<code>"pasta"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 4 2 italian</td><td class="has-text-align-left" data-align="left">(4,2)에&nbsp;<code>"italian"</code>&nbsp;입력</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 4 3 noodle</td><td class="has-text-align-left" data-align="left">(4,3)에&nbsp;<code>"noodle"</code>&nbsp;입력</td></tr></tbody></table></figure>



<p>위 명령어를 실행하면 아래 그림과 같은 상태가 됩니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="960" height="471" src="https://lycos7560.com/wp-content/uploads/2023/06/image-18.png" alt="" class="wp-image-35410" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-18.png 960w, https://lycos7560.com/wp-content/uploads/2023/06/image-18-300x147.png 300w, https://lycos7560.com/wp-content/uploads/2023/06/image-18-768x377.png 768w" sizes="(max-width: 960px) 100vw, 960px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>아래는&nbsp;<code>MERGE</code>&nbsp;명령어를 실행하여 셀을 병합하는 예시입니다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">commands</th><th class="has-text-align-left" data-align="left">효과</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">MERGE 1 2 1 3</td><td class="has-text-align-left" data-align="left">(1,2)와 (1,3) 병합</td></tr><tr><td class="has-text-align-left" data-align="left">MERGE 1 3 1 4</td><td class="has-text-align-left" data-align="left">(1,3)과 (1,4) 병합</td></tr></tbody></table></figure>



<p>위 명령어를 실행하면 아래와 같은 상태가 됩니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="959" height="471" src="https://lycos7560.com/wp-content/uploads/2023/06/image-19.png" alt="" class="wp-image-35411" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-19.png 959w, https://lycos7560.com/wp-content/uploads/2023/06/image-19-300x147.png 300w, https://lycos7560.com/wp-content/uploads/2023/06/image-19-768x377.png 768w" sizes="(max-width: 959px) 100vw, 959px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>병합한 셀은&nbsp;<code>"category"</code>&nbsp;값을 가지게 되며 (1,2), (1,3), (1,4) 중 어느 위치를 선택하더라도 접근할 수 있습니다.</p>



<p>아래는&nbsp;<code>UPDATE</code>&nbsp;명령어를 실행하여 셀의 값을 변경하는 예시입니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">commands</th><th class="has-text-align-left" data-align="left">효과</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">UPDATE korean hansik</td><td class="has-text-align-left" data-align="left"><code>"korean"</code>을&nbsp;<code>"hansik"</code>으로 변경</td></tr><tr><td class="has-text-align-left" data-align="left">UPDATE 1 3 group</td><td class="has-text-align-left" data-align="left">(1,3) 위치의 셀 값을&nbsp;<code>"group"</code>으로 변경</td></tr></tbody></table></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>위 명령어를 실행하면 아래와 같은 상태가 됩니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="961" height="472" src="https://lycos7560.com/wp-content/uploads/2023/06/image-20.png" alt="" class="wp-image-35412" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-20.png 961w, https://lycos7560.com/wp-content/uploads/2023/06/image-20-300x147.png 300w, https://lycos7560.com/wp-content/uploads/2023/06/image-20-768x377.png 768w" sizes="(max-width: 961px) 100vw, 961px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>아래는&nbsp;<code>UNMERGE</code>&nbsp;명령어를 실행하여 셀의 병합을 해제하는 예시입니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">commands</th><th class="has-text-align-left" data-align="left">효과</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">UNMERGE 1 4</td><td class="has-text-align-left" data-align="left">셀 병합 해제 후 원래 값은 (1,4)가 가짐</td></tr></tbody></table></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>위 명령어를 실행하면 아래와 같은 상태가 됩니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="959" height="471" src="https://lycos7560.com/wp-content/uploads/2023/06/image-21.png" alt="" class="wp-image-35413" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-21.png 959w, https://lycos7560.com/wp-content/uploads/2023/06/image-21-300x147.png 300w, https://lycos7560.com/wp-content/uploads/2023/06/image-21-768x377.png 768w" sizes="(max-width: 959px) 100vw, 959px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>실행할 명령어들이 담긴 1차원 문자열 배열&nbsp;<code>commands</code>가 매개변수로 주어집니다.&nbsp;<code>commands</code>의 명령어들을 순서대로 실행하였을 때,&nbsp;</p>



<p><code>"PRINT r c"</code>&nbsp;명령어에 대한 실행결과를 순서대로 1차원 문자열 배열에 담아 return 하도록 solution 함수를 완성해주세요.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h5 class="wp-block-heading has-large-font-size">제한사항</h5>



<ul class="wp-block-list">
<li>1 ≤&nbsp;<code>commands</code>의 길이 ≤ 1,000</li>



<li><code>commands</code>의 각 원소는 아래 5가지 형태 중 하나입니다.
<ol class="wp-block-list">
<li><code>"UPDATE r c value"</code>
<ul class="wp-block-list">
<li><code>r</code>,&nbsp;<code>c</code>는 선택할 셀의 위치를 나타내며, 1~50 사이의 정수입니다.</li>



<li><code>value</code>는 셀에 입력할 내용을 나타내며, 알파벳 소문자와 숫자로 구성된 길이 1~10 사이인 문자열입니다.</li>
</ul>
</li>



<li><code>"UPDATE value1 value2"</code>
<ul class="wp-block-list">
<li><code>value1</code>은 선택할 셀의 값,&nbsp;<code>value2</code>는 셀에 입력할 내용을 나타내며, 알파벳 소문자와 숫자로 구성된 길이 1~10 사이인 문자열입니다.</li>
</ul>
</li>



<li><code>"MERGE r1 c1 r2 c2"</code>
<ul class="wp-block-list">
<li><code>r1</code>,&nbsp;<code>c1</code>,&nbsp;<code>r2</code>,&nbsp;<code>c2</code>는 선택할 셀의 위치를 나타내며, 1~50 사이의 정수입니다.</li>
</ul>
</li>



<li><code>"UNMERGE r c"</code>
<ul class="wp-block-list">
<li><code>r</code>,&nbsp;<code>c</code>는 선택할 셀의 위치를 나타내며, 1~50 사이의 정수입니다.</li>
</ul>
</li>



<li><code>"PRINT r c"</code>
<ul class="wp-block-list">
<li><code>r</code>,&nbsp;<code>c</code>는 선택할 셀의 위치를 나타내며, 1~50 사이의 정수입니다.</li>
</ul>
</li>
</ol>
</li>



<li><code>commands</code>는 1개 이상의&nbsp;<code>"PRINT r c"</code>&nbsp;명령어를 포함하고 있습니다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h5 class="wp-block-heading has-large-font-size">입출력 예</h5>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">commands</th><th>result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left"><code>["UPDATE 1 1 menu", "UPDATE 1 2 category", "UPDATE 2 1 bibimbap", "UPDATE 2 2 korean", "UPDATE 2 3 rice", "UPDATE 3 1 ramyeon", "UPDATE 3 2 korean", "UPDATE 3 3 noodle", "UPDATE 3 4 instant", "UPDATE 4 1 pasta", "UPDATE 4 2 italian", "UPDATE 4 3 noodle", "MERGE 1 2 1 3", "MERGE 1 3 1 4", "UPDATE korean hansik", "UPDATE 1 3 group", "UNMERGE 1 4", "PRINT 1 3", "PRINT 1 4"]</code></td><td><code>["EMPTY", "group"]</code></td></tr><tr><td class="has-text-align-left" data-align="left"><code>["UPDATE 1 1 a", "UPDATE 1 2 b", "UPDATE 2 1 c", "UPDATE 2 2 d", "MERGE 1 1 1 2", "MERGE 2 2 2 1", "MERGE 2 1 1 1", "PRINT 1 1", "UNMERGE 2 2", "PRINT 1 1"]</code></td><td><code>["d", "EMPTY"]</code></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h5 class="wp-block-heading has-large-font-size">입출력 예 설명</h5>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<ul class="wp-block-list">
<li>문제 예시와 같습니다. (1,3) 위치의 셀은 비어있고 (1,4) 위치의 셀 값은&nbsp;<code>"group"</code>입니다. <br>따라서&nbsp;<code>["EMPTY", "group"]</code>을 return 해야 합니다.</li>
</ul>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<ul class="wp-block-list">
<li>모든&nbsp;<code>UPDATE</code>&nbsp;명령어를 실행하면 아래와 같은 상태가 됩니다.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="639" height="347" src="https://lycos7560.com/wp-content/uploads/2023/06/image-22.png" alt="" class="wp-image-35415" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-22.png 639w, https://lycos7560.com/wp-content/uploads/2023/06/image-22-300x163.png 300w" sizes="(max-width: 639px) 100vw, 639px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><code>"MERGE 1 1 1 2"</code>&nbsp;명령어를 실행하면 아래와 같은 상태가 됩니다.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="640" height="350" src="https://lycos7560.com/wp-content/uploads/2023/06/image-23.png" alt="" class="wp-image-35416" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-23.png 640w, https://lycos7560.com/wp-content/uploads/2023/06/image-23-300x164.png 300w" sizes="(max-width: 640px) 100vw, 640px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><code>"MERGE 2 2 2 1"</code>&nbsp;명령어를 실행하면 아래와 같은 상태가 됩니다.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="642" height="347" src="https://lycos7560.com/wp-content/uploads/2023/06/image-24.png" alt="" class="wp-image-35417" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-24.png 642w, https://lycos7560.com/wp-content/uploads/2023/06/image-24-300x162.png 300w" sizes="(max-width: 642px) 100vw, 642px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><code>"MERGE 2 1 1 1"</code>&nbsp;명령어를 실행하면 아래와 같은 상태가 됩니다.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="642" height="348" src="https://lycos7560.com/wp-content/uploads/2023/06/image-25.png" alt="" class="wp-image-35418" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-25.png 642w, https://lycos7560.com/wp-content/uploads/2023/06/image-25-300x163.png 300w" sizes="(max-width: 642px) 100vw, 642px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><code>"UNMERGE 2 2"</code>&nbsp;명령어를 실행하면 아래와 같은 상태가 됩니다.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="641" height="348" src="https://lycos7560.com/wp-content/uploads/2023/06/image-26.png" alt="" class="wp-image-35419" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-26.png 641w, https://lycos7560.com/wp-content/uploads/2023/06/image-26-300x163.png 300w" sizes="(max-width: 641px) 100vw, 641px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h2 class="wp-block-heading">통과된 코드</h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;sstream>
#include &lt;cstdlib>
#include &lt;map>

using namespace std;

string _StrArr[51][51];
string* _PtrArr[51][51];
pair&lt;int, int> _MergeArr[51][51];
map&lt;pair&lt;int, int>, vector&lt;pair&lt;int, int>>> _MergeMap;
vector&lt;string> _Answer;

void CommandProcessing(string&amp; _command)
{
	istringstream iss(_command);
	string buffer;
	vector&lt;string> res;
	while (getline(iss, buffer, ' '))
		res.push_back(buffer);

	if (res[0] == "UPDATE") {
		if (res.size() > 3) {  // "UPDATE r c value"
			pair&lt;int, int> _MPair = _MergeArr[atoi(res[1].c_str())][atoi(res[2].c_str())];
			*_PtrArr[_MPair.first][_MPair.second] = res[3];
		}
		else {	// "UPDATE value1 value2"
			for (int i = 1; i &lt;= 50; i++)
				for (int j = 1; j &lt;= 50; j++) {
					if (_StrArr[i][j] == "" || _StrArr[i][j] != res[1])
						continue;
					_StrArr[i][j] = res[2];
				}
		}
	}
	else if (res[0] == "MERGE") { // "UNMERGE r c"
		// 같은 좌표일 경우 넘어간다.
		if (res[1] == res[3] &amp;&amp; res[2] == res[4])
			return;

		pair&lt;int, int> _MPair = _MergeArr[atoi(res[1].c_str())][atoi(res[2].c_str())];
		pair&lt;int, int> _TPair = _MergeArr[atoi(res[3].c_str())][atoi(res[4].c_str())];

		// 같은 좌표를 가르키고 있으면 넘어간다.
		if (_MPair == _TPair) 
			return;

		auto _Main = _MergeMap.find(_MPair);
		auto _Target = _MergeMap.find(_TPair);
		if (_Main == _MergeMap.end()) {
			vector&lt;pair&lt;int, int>> _Temp;
			_MergeMap.insert({ _MPair, _Temp });
			_Main = _MergeMap.find(_MPair);
		}

		_Main->second.push_back(_TPair);

		if (*_PtrArr[_MPair.first][_MPair.second] == "" &amp;&amp; *_PtrArr[_TPair.first][_TPair.second] != "") {
			*_PtrArr[_MPair.first][_MPair.second] = "";
			_PtrArr[_MPair.first][_MPair.second] = _PtrArr[_TPair.first][_TPair.second];
			for (auto&amp; it : _Main->second)
				_PtrArr[it.first][it.second] = _PtrArr[_TPair.first][_TPair.second];
		}

		_PtrArr[_TPair.first][_TPair.second] = _PtrArr[_MPair.first][_MPair.second];
		_MergeArr[_TPair.first][_TPair.second] = _MPair;

		if (_Target != _MergeMap.end()) {
			for (auto&amp; it : _Target->second) {
				_Main->second.push_back(it);
				_MergeArr[it.first][it.second] = _MPair;
				_PtrArr[it.first][it.second] = _PtrArr[_MPair.first][_MPair.second];
			}
			_MergeMap.erase(_Target);
		}
	}
	else if (res[0] == "UNMERGE") { // "UNMERGE r c"
		pair&lt;int, int> _MPair = _MergeArr[atoi(res[1].c_str())][atoi(res[2].c_str())];
		string str = *_PtrArr[_MPair.first][_MPair.second];
		_MergeArr[_MPair.first][_MPair.second] = _MPair;
		_PtrArr[_MPair.first][_MPair.second] = &amp;_StrArr[_MPair.first][_MPair.second];
		*_PtrArr[_MPair.first][_MPair.second] = "";

		auto _Main = _MergeMap.find(_MPair);
		if (_Main != _MergeMap.end()) {
			for (auto&amp; it : _Main->second) {
				_MergeArr[it.first][it.second] = make_pair(it.first, it.second);
				_PtrArr[it.first][it.second] = &amp;_StrArr[it.first][it.second];
				*_PtrArr[it.first][it.second] = "";
			}
			_MergeMap.erase(_Main);
		}
		_StrArr[atoi(res[1].c_str())][atoi(res[2].c_str())] = str;
	}
	else {// "PRINT r c"
		pair&lt;int, int> _MPair = _MergeArr[atoi(res[1].c_str())][atoi(res[2].c_str())];
		string str = *_PtrArr[_MPair.first][_MPair.second];
		if (str == "") _Answer.push_back("EMPTY");
		else _Answer.push_back(str);
	}
}


vector&lt;string> solution(vector&lt;string> commands) {
	// 포인터 배열 초기화
	for (int i = 1; i &lt;= 50; i++)
		for (int j = 1; j &lt;= 50; j++) {
			_PtrArr[i][j] = &amp;_StrArr[i][j];
			_MergeArr[i][j] = make_pair(i, j);
			_StrArr[i][j] = "";
		}

	// 명령어 처리
	for (auto&amp; it : commands)
		CommandProcessing(it);
	
	return _Answer;
}</pre>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">추가 반례</h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 입력 1</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["UPDATE 1 1 menu", "MERGE 1 1 1 2", "MERGE 1 1 1 3", "MERGE 1 1 1 4", "MERGE 1 2 1 3", "UPDATE 1 1 hansik", "PRINT 1 1", "PRINT 1 2", "PRINT 1 3", "PRINT 1 4"]</pre>



<div style="height:31px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 출력 1</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["hansik", "hansik", "hansik", "hansik"]</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 입력 2</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["MERGE 1 1 2 2", "UPDATE 1 1 A", "UNMERGE 1 1", "PRINT 1 1", "PRINT 2 2"]</pre>



<div style="height:31px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 출력 2</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["A", "EMPTY"]</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 입력 3</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["UPDATE 1 1 A", "UPDATE 2 2 B", "UPDATE 3 3 C", "UPDATE 4 4 D", "MERGE 1 1 2 2", "MERGE 3 3 4 4", "MERGE 1 1 4 4", "UNMERGE 3 3", "PRINT 1 1", "PRINT 2 2", "PRINT 3 3", "PRINT 4 4"]</pre>



<div style="height:31px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 출력 3</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["EMPTY", "EMPTY", "A", "EMPTY"]</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 입력 4</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["UPDATE 1 1 1", "UPDATE 1 2 2", "UPDATE 2 1 3", "UPDATE 2 2 4", "MERGE 1 1 1 2", "MERGE 2 2 2 1", "MERGE 2 1 1 1", "PRINT 1 1", "UNMERGE 2 2", "PRINT 1 1"]</pre>



<div style="height:31px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">예제 출력 4</h3>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["4", "EMPTY"]</pre>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<p></p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-150366-%ed%91%9c-%eb%b3%91%ed%95%a9-2022-kakao-blind-recruitment/35409/">Programmers 150366 표 병합 [2023 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-150366-%ed%91%9c-%eb%b3%91%ed%95%a9-2022-kakao-blind-recruitment/35409/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 92342 양궁대회 [2022 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-92342-%ec%96%91%ea%b6%81%eb%8c%80%ed%9a%8c-2022-kakao-blind-recruitment/35277/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-92342-%ec%96%91%ea%b6%81%eb%8c%80%ed%9a%8c-2022-kakao-blind-recruitment/35277/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Fri, 02 Jun 2023 12:22:01 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2022 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2022 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[92342]]></category>
		<category><![CDATA[92342번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 92342]]></category>
		<category><![CDATA[Programmers 92342번]]></category>
		<category><![CDATA[Recursive]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[양궁대회]]></category>
		<category><![CDATA[완전 탐색]]></category>
		<category><![CDATA[재귀]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[프로그래머스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35277</guid>

					<description><![CDATA[<p>Programmers 92342번 '양궁대회' 문제에 대한 글입니다. 재귀를 이용한 완전 탐색으로 해결하였습니다. (This article is about the issue of 'Archery Competition' in Programmers 92342. It was solved by a complete search using recursive. [2022 KAKAO BLIND RECRUITMENT]) [2022 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-92342-%ec%96%91%ea%b6%81%eb%8c%80%ed%9a%8c-2022-kakao-blind-recruitment/35277/">Programmers 92342 양궁대회 [2022 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-abaa38ce      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#양궁대회" class="uagb-toc-link__trigger">양궁대회</a><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">양궁대회</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/92342" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/92342</a></p>



<div style="height:39px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-large-font-size">문제 설명</h5>



<p class="has-medium-font-size">카카오배 양궁대회가 열렸습니다.</p>



<p class="has-medium-font-size"><code>라이언</code>은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. </p>



<p class="has-medium-font-size">결승전 상대는&nbsp;<code>어피치</code>입니다.</p>



<p class="has-medium-font-size">카카오배 양궁대회 운영위원회는 한 선수의 연속 우승보다는 다양한 선수들이 양궁대회에서 우승하기를 원합니다. </p>



<p class="has-medium-font-size">따라서, 양궁대회 운영위원회는 결승전 규칙을 전 대회 우승자인 라이언에게 불리하게 다음과 같이 정했습니다.</p>



<ol class="wp-block-list">
<li>어피치가 화살&nbsp;<code>n</code>발을 다 쏜 후에 라이언이 화살&nbsp;<code>n</code>발을 쏩니다.</li>



<li>점수를 계산합니다.


<ol class="wp-block-list">
<li>과녁판은 아래 사진처럼 생겼으며 가장 작은 원의 과녁 점수는 10점이고 가장 큰 원의 바깥쪽은 과녁 점수가 0점입니다.&nbsp;</li>



<li>만약, k(k는 1~10사이의 자연수)점을 어피치가 a발을 맞혔고 라이언이 b발을 맞혔을 경우 더 많은 화살을 k점에 맞힌 선수가 k 점을 가져갑니다. <br>단, a = b일 경우는 어피치가 k점을 가져갑니다.&nbsp;<strong>k점을 여러 발 맞혀도 k점 보다 많은 점수를 가져가는 게 아니고 k점만 가져가는 것을 유의하세요. </strong><br><strong>또한 a = b = 0 인 경우, 즉, 라이언과 어피치 모두 k점에 단 하나의 화살도 맞히지 못한 경우는 어느 누구도 k점을 가져가지 않습니다.</strong></li>
</ol>



<ul class="wp-block-list">
<li>예를 들어, 어피치가 10점을 2발 맞혔고 라이언도 10점을 2발 맞혔을 경우 어피치가 10점을 가져갑니다.</li>



<li>다른 예로, 어피치가 10점을 0발 맞혔고 라이언이 10점을 2발 맞혔을 경우 라이언이 10점을 가져갑니다.</li>



<li>모든 과녁 점수에 대하여 각 선수의 최종 점수를 계산합니다.</li>
</ul>
</li>



<li>최종 점수가 더 높은 선수를 우승자로 결정합니다. <br>단, 최종 점수가 같을 경우&nbsp;어피치를 우승자로 결정합니다.</li>
</ol>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="723" height="678" src="https://lycos7560.com/wp-content/uploads/2023/06/image-1.png" alt="" class="wp-image-35279" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-1.png 723w, https://lycos7560.com/wp-content/uploads/2023/06/image-1-300x281.png 300w" sizes="(max-width: 723px) 100vw, 723px" /></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">현재 상황은 어피치가 화살&nbsp;<code>n</code>발을 다 쏜 후이고 라이언이 화살을 쏠 차례입니다.</p>



<p class="has-medium-font-size">라이언은 어피치를 가장 큰 점수 차이로 이기기 위해서&nbsp;<code>n</code>발의 화살을 어떤 과녁 점수에 맞혀야 하는지를 구하려고 합니다.</p>



<p class="has-medium-font-size">화살의 개수를 담은 자연수&nbsp;<code>n</code>, 어피치가 맞힌 과녁 점수의 개수를 10점부터 0점까지 순서대로 담은 정수 배열&nbsp;<code>info</code>가 매개변수로 주어집니다. </p>



<p class="has-medium-font-size">이때, 라이언이 가장 큰 점수 차이로 우승하기 위해&nbsp;<code>n</code>발의 화살을 어떤 과녁 점수에 맞혀야 하는지를 </p>



<p class="has-medium-font-size">10점부터 0점까지 순서대로 정수 배열에 담아 return 하도록 solution 함수를 완성해 주세요. </p>



<p class="has-medium-font-size">만약, 라이언이 우승할 수 없는 경우(무조건 지거나 비기는 경우)는&nbsp;<code>[-1]</code>을 return 해주세요.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-large-font-size">제한사항</h5>



<ul class="wp-block-list">
<li>1 ≤&nbsp;<code>n</code>&nbsp;≤ 10</li>



<li><code>info</code>의 길이 = 11
<ul class="wp-block-list">
<li>0 ≤&nbsp;<code>info</code>의 원소 ≤&nbsp;<code>n</code></li>



<li><code>info</code>의 원소 총합 =&nbsp;<code>n</code></li>



<li><code>info</code>의 i번째 원소는 과녁의&nbsp;<code>10 - i</code>&nbsp;점을 맞힌 화살 개수입니다. ( i는 0~10 사이의 정수입니다.)</li>
</ul>
</li>



<li>라이언이 우승할 방법이 있는 경우, return 할 정수 배열의 길이는 11입니다.
<ul class="wp-block-list">
<li>0 ≤ return할 정수 배열의 원소 ≤&nbsp;<code>n</code></li>



<li>return할 정수 배열의 원소 총합 =&nbsp;<code>n</code>&nbsp;(꼭 n발을 다 쏴야 합니다.)</li>



<li>return할 정수 배열의 i번째 원소는 과녁의&nbsp;<code>10 - i</code>&nbsp;점을 맞힌 화살 개수입니다. ( i는 0~10 사이의 정수입니다.)</li>



<li><strong>라이언이 가장 큰 점수 차이로 우승할 수 있는 방법이 여러 가지 일 경우, 가장 낮은 점수를 더 많이 맞힌 경우를 return 해주세요.</strong>
<ul class="wp-block-list">
<li>가장 낮은 점수를 맞힌 개수가 같을 경우 계속해서 그다음으로 낮은 점수를 더 많이 맞힌 경우를 return 해주세요.</li>



<li>예를 들어,&nbsp;<code>[2,3,1,0,0,0,0,1,3,0,0]</code>과&nbsp;<code>[2,1,0,2,0,0,0,2,3,0,0]</code>를 비교하면&nbsp;<code>[2,1,0,2,0,0,0,2,3,0,0]</code>를 return 해야 합니다.</li>



<li>다른 예로,&nbsp;<code>[0,0,2,3,4,1,0,0,0,0,0]</code>과&nbsp;<code>[9,0,0,0,0,0,0,0,1,0,0]</code>를 비교하면<code>[9,0,0,0,0,0,0,0,1,0,0]</code>를 return 해야 합니다.</li>
</ul>
</li>
</ul>
</li>



<li>라이언이 우승할 방법이 없는 경우, return 할 정수 배열의 길이는 1입니다.
<ul class="wp-block-list">
<li>라이언이 어떻게 화살을 쏘든&nbsp;<strong>라이언의 점수가 어피치의 점수보다 낮거나 같으면&nbsp;<code>[-1]</code>을 return 해야 합니다.</strong></li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-large-font-size">입출력 예</h5>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">n</th><th class="has-text-align-left" data-align="left">info</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">[2,1,1,1,0,0,0,0,0,0,0]</td><td class="has-text-align-left" data-align="left">[0,2,2,0,1,0,0,0,0,0,0]</td></tr><tr><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">[1,0,0,0,0,0,0,0,0,0,0]</td><td class="has-text-align-left" data-align="left">[-1]</td></tr><tr><td class="has-text-align-left" data-align="left">9</td><td class="has-text-align-left" data-align="left">[0,0,1,2,0,1,1,1,1,1,1]</td><td class="has-text-align-left" data-align="left">[1,1,2,0,1,2,2,0,0,0,0]</td></tr><tr><td class="has-text-align-left" data-align="left">10</td><td class="has-text-align-left" data-align="left">[0,0,0,0,0,0,0,0,3,4,3]</td><td class="has-text-align-left" data-align="left">[1,1,1,1,1,1,1,1,0,0,2]</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-large-font-size">입출력 예 설명</h5>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<p class="has-medium-font-size">어피치와 라이언이 아래와 같이 화살을 맞힐 경우,</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">과녁 점수</th><th class="has-text-align-left" data-align="left">어피치가 맞힌 화살 개수</th><th class="has-text-align-left" data-align="left">라이언이 맞힌 화살 개수</th><th class="has-text-align-left" data-align="left">결과</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">10</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">3</td><td class="has-text-align-left" data-align="left">라이언이 10점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">9</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">라이언이 9점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">8</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 8점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">7</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 7점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">6</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">3</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">어피치의 최종 점수는 15점, 라이언의 최종 점수는 19점입니다. 4점 차이로 라이언이 우승합니다.</p>



<p class="has-medium-font-size">하지만, 라이언이 아래와 같이 화살을 맞힐 경우 더 큰 점수 차로 우승할 수 있습니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table><thead><tr><th>과녁 점수</th><th>어피치가 맞힌 화살 개수</th><th>라이언이 맞힌 화살 개수</th><th>결과</th></tr></thead><tbody><tr><td>10</td><td>2</td><td>0</td><td>어피치가 10점 획득</td></tr><tr><td>9</td><td>1</td><td>2</td><td>라이언이 9점 획득</td></tr><tr><td>8</td><td>1</td><td>2</td><td>라이언이 8점 획득</td></tr><tr><td>7</td><td>1</td><td>0</td><td>어피치가 7점 획득</td></tr><tr><td>6</td><td>0</td><td>1</td><td>라이언이 6점 획득</td></tr><tr><td>5</td><td>0</td><td>0</td><td></td></tr><tr><td>4</td><td>0</td><td>0</td><td></td></tr><tr><td>3</td><td>0</td><td>0</td><td></td></tr><tr><td>2</td><td>0</td><td>0</td><td></td></tr><tr><td>1</td><td>0</td><td>0</td><td></td></tr><tr><td>0</td><td>0</td><td>0</td><td></td></tr></tbody></table></figure>



<p class="has-medium-font-size">어피치의 최종 점수는 17점, 라이언의 최종 점수는 23점입니다. 6점 차이로 라이언이 우승합니다.</p>



<p class="has-medium-font-size">따라서&nbsp;<code>[0,2,2,0,1,0,0,0,0,0,0]</code>을 return 해야 합니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<p class="has-medium-font-size">라이언이 10점을 맞혀도 어피치가 10점을 가져가게 됩니다.</p>



<p class="has-medium-font-size">따라서, 라이언은 우승할 수 없기 때문에&nbsp;<code>[-1]</code>을 return 해야 합니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #3</strong></p>



<p class="has-medium-font-size">어피치와 라이언이 아래와 같이 화살을 맞힐 경우,</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">과녁 점수</th><th class="has-text-align-left" data-align="left">어피치가 맞힌 화살 개수</th><th class="has-text-align-left" data-align="left">라이언이 맞힌 화살 개수</th><th class="has-text-align-left" data-align="left">결과</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">10</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">라이언이 10점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">9</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">라이언이 9점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">8</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">라이언이 8점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">7</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">3</td><td class="has-text-align-left" data-align="left">라이언이 7점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">6</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left"></td></tr><tr><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">라이언이 5점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 4점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">3</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 3점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 2점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 1점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 0점 획득</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">어피치의 최종 점수는 10점, 라이언의 최종 점수는 39점입니다. </p>



<p class="has-medium-font-size">29점 차이로 라이언이 우승합니다.</p>



<p class="has-medium-font-size">하지만 라이언이 아래와 같이 화살을 맞힐 경우,</p>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">과녁 점수</th><th class="has-text-align-left" data-align="left">어피치가 맞힌 화살 개수</th><th class="has-text-align-left" data-align="left">라이언이 맞힌 화살 개수</th><th class="has-text-align-left" data-align="left">결과</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">10</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">라이언이 10점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">9</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">라이언이 9점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">8</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">라이언이 8점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">7</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 7점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">6</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">라이언이 6점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">라이언이 5점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">4</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">라이언이 4점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">3</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 3점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 2점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 1점 획득</td></tr><tr><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">0</td><td class="has-text-align-left" data-align="left">어피치가 0점 획득</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>어피치의 최종 점수는 13점, 라이언의 최종 점수는 42점입니다. </p>



<p>이 경우도 29점 차이로 라이언이 우승합니다.</p>



<p>하지만, 첫 번째 경우와 두 번째 경우를 비교했을 때, </p>



<p>두 번째 경우가 두 경우 중 가장 낮은 점수인 4점을 더 많이 맞혔기 때문에&nbsp;</p>



<p><code>[1,1,2,3,0,2,0,0,0,0,0]</code>이 아닌&nbsp;<code>[1,1,2,0,1,2,2,0,0,0,0]</code>을 return 해야 합니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #4</strong></p>



<p class="has-medium-font-size">가장 큰 점수 차이로 이기는 경우 중에서 가장 낮은 점수를 가장 많이 맞힌, </p>



<p class="has-medium-font-size">10~3점을 한 발씩 맞히고 나머지 두 발을 0점에 맞히는 경우인&nbsp;<code>[1,1,1,1,1,1,1,1,0,0,2]</code>를 return 해야 합니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading">제한시간 안내</h5>



<ul class="wp-block-list">
<li>정확성 테스트 : 10초</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h1 class="wp-block-heading">통과된 코드</h1>



<p class="has-medium-font-size">재귀를 이용한 완전 탐색으로 문제를 해결하였다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>

using namespace std;

int _N, _LionRes, _ApeachRes, _Maxdiff;

vector&lt;int> _Answer = { -1 };

bool Check(vector&lt;int>&amp; _Answer, vector&lt;int>&amp; _ComparisonV)
{
    for (int i = 10; i >= 0; i--) {
        if (_Answer[i] &lt; _ComparisonV[i]) return true;
        else if (_Answer[i] > _ComparisonV[i]) return false;
    }
    return false;
}

// 완전 탐색
void Search(vector&lt;int>&amp; _apeachV, vector&lt;int>&amp; _ryanV, int _cnt, int _pivot)
{
    if (_cnt == _N) {
        _ApeachRes = 0; _LionRes = 0;
        for (int i = 0; i &lt; 10; i++) {
            if (_apeachV[i] &lt; _ryanV[i]) _LionRes += (10 - i);
            else if (_apeachV[i] > 0) _ApeachRes += (10 - i);
        }

        int _DiffValue = _LionRes - _ApeachRes;
        if ((_DiffValue > 0 &amp;&amp; _Maxdiff &lt;= _DiffValue)) {
            if (_Maxdiff == _DiffValue &amp;&amp; !Check(_Answer, _ryanV)) return;
            _Maxdiff = _DiffValue;
            _Answer = _ryanV;
        }
        return;
    }

    // 피봇을 이용하여 중복을 제거
    for (int i = _pivot; i &lt;= 10; i++) {
        _ryanV[i]++;
        Search(_apeachV, _ryanV, _cnt + 1, i);
        _ryanV[i]--;
    }

}

vector&lt;int> solution(int n, vector&lt;int> info) {
    _N = n;
    vector&lt;int> _BaseV = { 0,0,0,0,0,0,0,0,0,0,0 };
    Search(info, _BaseV, 0, 0);
    return _Answer;
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="393" height="705" src="https://lycos7560.com/wp-content/uploads/2023/06/image-3.png" alt="" class="wp-image-35287" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-3.png 393w, https://lycos7560.com/wp-content/uploads/2023/06/image-3-167x300.png 167w" sizes="(max-width: 393px) 100vw, 393px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-92342-%ec%96%91%ea%b6%81%eb%8c%80%ed%9a%8c-2022-kakao-blind-recruitment/35277/">Programmers 92342 양궁대회 [2022 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-92342-%ec%96%91%ea%b6%81%eb%8c%80%ed%9a%8c-2022-kakao-blind-recruitment/35277/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 92335 k진수에서 소수 개수 구하기 [2022 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-92335-k%ec%a7%84%ec%88%98%ec%97%90%ec%84%9c-%ec%86%8c%ec%88%98-%ea%b0%9c%ec%88%98-%ea%b5%ac%ed%95%98%ea%b8%b0-2022-kakao-blind-recruitment/35239/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-92335-k%ec%a7%84%ec%88%98%ec%97%90%ec%84%9c-%ec%86%8c%ec%88%98-%ea%b0%9c%ec%88%98-%ea%b5%ac%ed%95%98%ea%b8%b0-2022-kakao-blind-recruitment/35239/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Tue, 30 May 2023 05:52:02 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2022 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2022 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[92335]]></category>
		<category><![CDATA[92335번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[k진수에서 소수 개수 구하기]]></category>
		<category><![CDATA[Programmers 92335]]></category>
		<category><![CDATA[Programmers 92335번]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[에라토스테네스의 체]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35239</guid>

					<description><![CDATA[<p>Programmers 92335번 'k진수에서 소수 개수 구하기' 문제에 대한 글입니다. (This article is about Programmers #92335 'Getting prime numbers from k-number' problem.)</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-92335-k%ec%a7%84%ec%88%98%ec%97%90%ec%84%9c-%ec%86%8c%ec%88%98-%ea%b0%9c%ec%88%98-%ea%b5%ac%ed%95%98%ea%b8%b0-2022-kakao-blind-recruitment/35239/">Programmers 92335 k진수에서 소수 개수 구하기 [2022 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-04536ce7      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#k진수에서-소수-개수-구하기" class="uagb-toc-link__trigger">k진수에서 소수 개수 구하기</a><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">k진수에서 소수 개수 구하기</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/92335" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/92335</a></p>



<div style="height:39px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">문제 설명</h2>



<p class="has-medium-font-size">양의 정수 <code>n</code>이 주어집니다. </p>



<p class="has-medium-font-size">이 숫자를 <code>k</code>진수로 바꿨을 때, </p>



<p class="has-medium-font-size">변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><code>0P0</code>처럼 소수 양쪽에 0이 있는 경우</li>



<li><code>P0</code>처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우</li>



<li><code>0P</code>처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우</li>



<li><code>P</code>처럼 소수 양쪽에 아무것도 없는 경우</li>



<li>단, <code>P</code>는 각 자릿수에 0을 포함하지 않는 소수입니다.
<ul class="wp-block-list">
<li>예를 들어, 101은&nbsp;<code>P</code>가 될 수 없습니다.</li>
</ul>
</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">예를 들어, 437674을 3진수로 바꾸면 <code>211</code>0<code>2</code>01010<code>11</code>입니다. </p>



<p class="has-medium-font-size">여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다. </p>



<p class="has-medium-font-size">(211, 2, 11을 <code>k</code>진법으로 보았을 때가 아닌, 10진법으로 보았을 때 소수여야 한다는 점에 주의합니다.) </p>



<p class="has-medium-font-size">211은 <code>P0</code> 형태에서 찾을 수 있으며, 2는 <code>0P0</code>에서, 11은 <code>0P</code>에서 찾을 수 있습니다.</p>



<p class="has-medium-font-size">정수 <code>n</code>과 <code>k</code>가 매개변수로 주어집니다. </p>



<p class="has-medium-font-size"><code>n</code>을 <code>k</code>진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는 <strong>위 조건에 맞는 소수</strong>의 개수를 return 하도록 solution 함수를 완성해 주세요.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h2 class="wp-block-heading">제한사항</h2>



<ul class="wp-block-list">
<li>1 ≤&nbsp;<code>n</code>&nbsp;≤ 1,000,000</li>



<li>3 ≤&nbsp;<code>k</code>&nbsp;≤ 10</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h2 class="wp-block-heading">입출력 예</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">n</th><th class="has-text-align-left" data-align="left">k</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">437674</td><td class="has-text-align-left" data-align="left">3</td><td class="has-text-align-left" data-align="left">3</td></tr><tr><td class="has-text-align-left" data-align="left">110011</td><td class="has-text-align-left" data-align="left">10</td><td class="has-text-align-left" data-align="left">2</td></tr></tbody></table></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">입출력 예 설명</h2>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<p>문제 예시와 같습니다.</p>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<p>110011을 10진수로 바꾸면 110011입니다. </p>



<p>여기서 찾을 수 있는 조건에 맞는 소수는 11, 11 2개입니다. </p>



<p>이와 같이, 중복되는 소수를 발견하더라도 모두 따로 세어야 합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h1 class="wp-block-heading">통과된 코드</h1>



<p class="has-medium-font-size">처음에 소수를 판별하는 방법으로 <a href="https://namu.wiki/w/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98%20%EC%B2%B4" target="_blank" rel="noreferrer noopener">에라토스테네스의 체</a> 를 이용하려고 했지만</p>



<p class="has-medium-font-size">N이 524288일 경우 이진수의 값은 10000000000000000000으로 매우 비효율적인 코드가 된다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;algorithm>
#include &lt;sstream>
#include &lt;cstdlib>

using namespace std;

// 10진수를 N진수로 변환
string DecimalToN(int decimalNum, int n) {
    if (decimalNum == 0) return "0";
    string str;
    while (decimalNum != 0) {
        int remainder = decimalNum % n;
        str.push_back(remainder + 48);
        decimalNum /= n;
    }
    reverse(str.begin(), str.end());
    return str;
}

// 소수 판별
bool IsPrime(long long int n) {
    if (n &lt; 2) return false;
    for (long long int i = 2; i * i &lt;= n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int solution(int n, int k) {
    int answer = 0;
    istringstream iss(DecimalToN(n, k));
    string buffer;

    vector&lt;string> result;
    while (getline(iss, buffer, '0')) {
        if (buffer == "") continue; // 00 인 경우를 생각
        result.push_back(buffer);
    }

    for (auto&amp; it : result) {
        long long int _Temp = stoll(it.c_str());
        if (IsPrime(_Temp)) {
            answer++;
        }
    }

    return answer;
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="476" height="445" src="https://lycos7560.com/wp-content/uploads/2023/05/image-158.png" alt="" class="wp-image-35243" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-158.png 476w, https://lycos7560.com/wp-content/uploads/2023/05/image-158-300x280.png 300w" sizes="(max-width: 476px) 100vw, 476px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-92335-k%ec%a7%84%ec%88%98%ec%97%90%ec%84%9c-%ec%86%8c%ec%88%98-%ea%b0%9c%ec%88%98-%ea%b5%ac%ed%95%98%ea%b8%b0-2022-kakao-blind-recruitment/35239/">Programmers 92335 k진수에서 소수 개수 구하기 [2022 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-92335-k%ec%a7%84%ec%88%98%ec%97%90%ec%84%9c-%ec%86%8c%ec%88%98-%ea%b0%9c%ec%88%98-%ea%b5%ac%ed%95%98%ea%b8%b0-2022-kakao-blind-recruitment/35239/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 92343 양과 늑대 [2022 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-92343-%ec%96%91%ea%b3%bc-%eb%8a%91%eb%8c%80-2022-kakao-blind-recruitment/35211/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-92343-%ec%96%91%ea%b3%bc-%eb%8a%91%eb%8c%80-2022-kakao-blind-recruitment/35211/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sun, 28 May 2023 08:33:46 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2022 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2022 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[92343]]></category>
		<category><![CDATA[92343번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 92343]]></category>
		<category><![CDATA[Programmers 92343번]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[양과 늑대]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[프로그래머스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35211</guid>

					<description><![CDATA[<p>Programmers 92343번 '양과 늑대' 문제에 대한 글입니다. DFS를 통한 완전 탐색을 이용하여 문제를 해결하였습니다. (This article is about the issue of "Sheep and Wolf" in Programmers Number 92343. We solved the problem by using full search through DFS.)<br />
[2022 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-92343-%ec%96%91%ea%b3%bc-%eb%8a%91%eb%8c%80-2022-kakao-blind-recruitment/35211/">Programmers 92343 양과 늑대 [2022 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-7b82b3f0      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#양과-늑대" class="uagb-toc-link__trigger">양과 늑대</a><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">양과 늑대</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/92343" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/92343</a></p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">문제 설명</h2>



<p class="has-medium-font-size">2진 트리 모양 초원의 각 노드에 늑대와 양이 한 마리씩 놓여 있습니다. </p>



<p class="has-medium-font-size">이 초원의 루트 노드에서 출발하여 각 노드를 돌아다니며 양을 모으려 합니다. </p>



<p class="has-medium-font-size">각 노드를 방문할 때 마다 해당 노드에 있던 양과 늑대가 당신을 따라오게 됩니다. </p>



<p class="has-medium-font-size">이때, 늑대는 양을 잡아먹을 기회를 노리고 있으며, </p>



<p class="has-medium-font-size">당신이 모은 양의 수보다 늑대의 수가 같거나 더 많아지면 바로 모든 양을 잡아먹어 버립니다. </p>



<p class="has-medium-font-size">당신은 중간에 양이 늑대에게 잡아먹히지 않도록 하면서 최대한 많은 수의 양을 모아서 다시 루트 노드로 돌아오려 합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1000" height="1000" src="https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_01.png" alt="" class="wp-image-35213" srcset="https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_01.png 1000w, https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_01-300x300.png 300w, https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_01-150x150.png 150w, https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_01-768x768.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">예를 들어, 위 그림의 경우(루트 노드에는 항상 양이 있습니다) 0번 노드(루트 노드)에서 출발하면 양을 한마리 모을 수 있습니다. </p>



<p class="has-medium-font-size">다음으로 1번 노드로 이동하면 당신이 모은 양은 두 마리가 됩니다. 이때, 바로 4번 노드로 이동하면 늑대 한 마리가 당신을 따라오게 됩니다. </p>



<p class="has-medium-font-size">아직은 양 2마리, 늑대 1마리로 양이 잡아먹히지 않지만, 이후에 갈 수 있는 아직 방문하지 않은 모든 노드(2, 3, 6, 8번)에는 늑대가 있습니다. </p>



<p class="has-medium-font-size">이어서 늑대가 있는 노드로 이동한다면(예를 들어 바로 6번 노드로 이동한다면) 양 2마리, 늑대 2마리가 되어 양이 모두 잡아먹힙니다. </p>



<p class="has-medium-font-size">여기서는 0번, 1번 노드를 방문하여 양을 2마리 모은 후, 8번 노드로 이동한 후(양 2마리 늑대 1마리) 이어서 7번, 9번 노드를 방문하면 양 4마리 늑대 1마리가 됩니다. </p>



<p class="has-medium-font-size">이제 4번, 6번 노드로 이동하면 양 4마리, 늑대 3마리가 되며, 이제 5번 노드로 이동할 수 있게 됩니다. 따라서 양을 최대 5마리 모을 수 있습니다.</p>



<p class="has-medium-font-size">각 노드에 있는 양 또는 늑대에 대한 정보가 담긴 배열&nbsp;<code>info</code>, 2진 트리의 각 노드들의 연결 관계를 담은 2차원 배열&nbsp;<code>edges</code>가 매개변수로 주어질 때, </p>



<p class="has-medium-font-size">문제에 제시된 조건에 따라 각 노드를 방문하면서 모을 수 있는 양은 최대 몇 마리인지 return 하도록 solution 함수를 완성해주세요.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">제한사항</h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>2 ≤&nbsp;<code>info</code>의 길이 ≤ 17
<ul class="wp-block-list">
<li><code>info</code>의 원소는 0 또는 1 입니다.</li>



<li>info[i]는 i번 노드에 있는 양 또는 늑대를 나타냅니다.</li>



<li>0은 양, 1은 늑대를 의미합니다.</li>



<li>info[0]의 값은 항상 0입니다. 즉, 0번 노드(루트 노드)에는 항상 양이 있습니다.</li>
</ul>
</li>



<li><code>edges</code>의 세로(행) 길이 =&nbsp;<code>info</code>의 길이 &#8211; 1
<ul class="wp-block-list">
<li><code>edges</code>의 가로(열) 길이 = 2</li>



<li><code>edges</code>의 각 행은 [부모 노드 번호, 자식 노드 번호] 형태로, 서로 연결된 두 노드를 나타냅니다.</li>



<li>동일한 간선에 대한 정보가 중복해서 주어지지 않습니다.</li>



<li>항상 하나의 이진 트리 형태로 입력이 주어지며, 잘못된 데이터가 주어지는 경우는 없습니다.</li>



<li>0번 노드는 항상 루트 노드입니다.</li>
</ul>
</li>
</ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">입출력 예</h2>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">info</th><th class="has-text-align-left" data-align="left">edges</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">[0,0,1,1,1,0,1,0,1,0,1,1]</td><td class="has-text-align-left" data-align="left">[[0,1],[1,2],[1,4],[0,8],[8,7],[9,10],[9,11],[4,3],[6,5],[4,6],[8,9]]</td><td class="has-text-align-left" data-align="left">5</td></tr><tr><td class="has-text-align-left" data-align="left">[0,1,0,1,1,0,1,0,0,1,0]</td><td class="has-text-align-left" data-align="left">[[0,1],[0,2],[1,3],[1,4],[2,5],[2,6],[3,7],[4,8],[6,9],[9,10]]</td><td class="has-text-align-left" data-align="left">5</td></tr></tbody></table></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">입출력 예 설명</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<p class="has-medium-font-size">문제의 예시와 같습니다.</p>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<p class="has-medium-font-size">주어진 입력은 다음 그림과 같습니다.</p>



<div style="height:22px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1000" height="1000" src="https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_02.png" alt="" class="wp-image-35217" srcset="https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_02.png 1000w, https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_02-300x300.png 300w, https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_02-150x150.png 150w, https://lycos7560.com/wp-content/uploads/2023/05/03_2022_공채문제_양과늑대_02-768x768.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>0번 &#8211; 2번 &#8211; 5번 &#8211; 1번 &#8211; 4번 &#8211; 8번 &#8211; 3번 &#8211; 7번 노드 순으로 이동하면 양 5마리 늑대 3마리가 됩니다. </p>



<p>여기서 6번, 9번 노드로 이동하면 양 5마리, 늑대 5마리가 되어 양이 모두 잡아먹히게 됩니다. </p>



<p>따라서 늑대에게 잡아먹히지 않도록 하면서 최대로 모을 수 있는 양은 5마리입니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">제한시간 안내</h2>



<ul class="wp-block-list">
<li>정확성 테스트 : 10초</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h1 class="wp-block-heading">통과된 코드</h1>



<p class="has-medium-font-size">Set에 현재 상황에서 갈 수 있는 노드를 전부 저장하여 완전 탐색을 수행</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;iostream>
#include &lt;set>
using namespace std;
struct MyNode;
vector&lt;MyNode> _AllNodeV;
int answer = 0;
struct MyNode
{
    // 노드의 번호, 동물의 타입
    int _Num, _Type;
    vector&lt;MyNode*> _ChildnodeV; // 자식 노드
    MyNode(int _num, int _type) {
        _Num = _num;
        _Type = _type;
    }
};
// set에 갈 수 있는 노드의 번호를 넣어주면서 DFS 탐색을 통하여 완전 탐색 
void CustomDFS(int _cnt, int _sheep, int _wolf, set&lt;int> _nodeSet) {
    if (_AllNodeV[_cnt]._Type) _wolf++;
    else _sheep++; // 늑대는 1, 양은 0
    if (_wolf >= _sheep) return; // 늑대가 같거나 크다면 return
    if (_sheep > answer) answer = _sheep; // 최댓값 갱신
    _nodeSet.erase(_cnt); // 방문한 곳을 지워준다.
    for (auto&amp; it : _AllNodeV[_cnt]._ChildnodeV) 
        _nodeSet.insert(it->_Num); // 다음 갈 곳을 추가
    for (auto&amp; it : _nodeSet)
        CustomDFS(it, _sheep, _wolf, _nodeSet);
}

int solution(vector&lt;int> info, vector&lt;vector&lt;int>> edges) {   
    for (int i = 0; i &lt; info.size(); i++) { // 노드 생성
        MyNode _node = MyNode(i, info[i]);
        _AllNodeV.push_back(_node);
    }
    for (int i = 0; i &lt; edges.size(); i++) // 자식 노드 입력
        _AllNodeV[edges[i][0]]._ChildnodeV.push_back(&amp;_AllNodeV[edges[i][1]]);  
    set&lt;int> _StartSet; 
    _StartSet.insert(0); // 0번 노드부터 시작
    CustomDFS(0, 0, 0, _StartSet);
    return answer;
}


</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="389" height="490" src="https://lycos7560.com/wp-content/uploads/2023/05/image-155.png" alt="" class="wp-image-35219" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-155.png 389w, https://lycos7560.com/wp-content/uploads/2023/05/image-155-238x300.png 238w" sizes="(max-width: 389px) 100vw, 389px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-92343-%ec%96%91%ea%b3%bc-%eb%8a%91%eb%8c%80-2022-kakao-blind-recruitment/35211/">Programmers 92343 양과 늑대 [2022 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-92343-%ec%96%91%ea%b3%bc-%eb%8a%91%eb%8c%80-2022-kakao-blind-recruitment/35211/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 72410 신규 아이디 추천 [2021 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-72410-%ec%8b%a0%ea%b7%9c-%ec%95%84%ec%9d%b4%eb%94%94-%ec%b6%94%ec%b2%9c-2021-kakao-blind-recruitment/34792/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-72410-%ec%8b%a0%ea%b7%9c-%ec%95%84%ec%9d%b4%eb%94%94-%ec%b6%94%ec%b2%9c-2021-kakao-blind-recruitment/34792/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sun, 14 May 2023 21:25:12 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2021 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[<string>]]></category>
		<category><![CDATA[2021 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[72410]]></category>
		<category><![CDATA[72410번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 72410]]></category>
		<category><![CDATA[Programmers 72410번]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[문자열]]></category>
		<category><![CDATA[신규 아이디 추천]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[파싱]]></category>
		<category><![CDATA[프로그래머스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=34792</guid>

					<description><![CDATA[<p>Programmers 72410번 '신규 아이디 추천' 문제에 대한 글입니다. (This article is about the 'New ID Recommendation' problem in Programmers Number 72410) [2021 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-72410-%ec%8b%a0%ea%b7%9c-%ec%95%84%ec%9d%b4%eb%94%94-%ec%b6%94%ec%b2%9c-2021-kakao-blind-recruitment/34792/">Programmers 72410 신규 아이디 추천 [2021 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-8d2b0414      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#신규-아이디-추천" class="uagb-toc-link__trigger">신규 아이디 추천</a><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a><li class="uagb-toc__list"><a href="#더-효율적인-코드" class="uagb-toc-link__trigger">더 효율적인 코드</a></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">신규 아이디 추천</h1>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/72410" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/72410</a></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">카카오에 입사한 신입 개발자 <code>네오</code>는 &#8220;카카오계정개발팀&#8221;에 배치되어, </p>



<p class="has-medium-font-size">카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. </p>



<p class="has-medium-font-size">&#8220;네오&#8221;에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, </p>



<p class="has-medium-font-size">입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다.</p>



<p class="has-medium-font-size">다음은 카카오 아이디의 규칙입니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>아이디의 길이는 3자 이상 15자 이하여야 합니다.</li>



<li>아이디는 알파벳 소문자, 숫자, 빼기(<code>-</code>), 밑줄(<code>_</code>), 마침표(<code>.</code>) 문자만 사용할 수 있습니다.</li>



<li>단, 마침표(<code>.</code>)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다.</li>
</ul>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">&#8220;네오&#8221;는 다음과 같이 7단계의 순차적인 처리 과정을 통해 </p>



<p class="has-medium-font-size">신규 유저가 입력한 아이디가 카카오 아이디 규칙에 맞는 지 검사하고 규칙에 맞지 않은 경우 </p>



<p class="has-medium-font-size">규칙에 맞는 새로운 아이디를 추천해 주려고 합니다.</p>



<p class="has-medium-font-size">신규 유저가 입력한 아이디가 <code>new_id</code> 라고 한다면,</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
     만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">예를 들어, new_id 값이 &#8220;&#8230;!@BaT#*..y.abcdefghijklm&#8221; 라면, </p>



<p class="has-medium-font-size">위 7단계를 거치고 나면 new_id는 아래와 같이 변경됩니다.</p>



<p class="has-medium-font-size">1단계 대문자 &#8216;B&#8217;와 &#8216;T&#8217;가 소문자 &#8216;b&#8217;와 &#8216;t&#8217;로 바뀌었습니다.<br><code>"...!@BaT#*..y.abcdefghijklm"</code>&nbsp;→&nbsp;<code>"...!@bat#*..y.abcdefghijklm"</code></p>



<p class="has-medium-font-size">2단계 &#8216;!&#8217;, &#8216;@&#8217;, &#8216;#&#8217;, &#8216;*&#8217; 문자가 제거되었습니다.<br><code>"...!@bat#*..y.abcdefghijklm"</code>&nbsp;→&nbsp;<code>"...bat..y.abcdefghijklm"</code></p>



<p class="has-medium-font-size">3단계 &#8216;&#8230;&#8217;와 &#8216;..&#8217; 가 &#8216;.&#8217;로 바뀌었습니다.<br><code>"...bat..y.abcdefghijklm"</code>&nbsp;→&nbsp;<code>".bat.y.abcdefghijklm"</code></p>



<p class="has-medium-font-size">4단계 아이디의 처음에 위치한 &#8216;.&#8217;가 제거되었습니다.<br><code>".bat.y.abcdefghijklm"</code>&nbsp;→&nbsp;<code>"bat.y.abcdefghijklm"</code></p>



<p class="has-medium-font-size">5단계 아이디가 빈 문자열이 아니므로 변화가 없습니다.<br><code>"bat.y.abcdefghijklm"</code>&nbsp;→&nbsp;<code>"bat.y.abcdefghijklm"</code></p>



<p class="has-medium-font-size">6단계 아이디의 길이가 16자 이상이므로, 처음 15자를 제외한 나머지 문자들이 제거되었습니다.<br><code>"bat.y.abcdefghijklm"</code>&nbsp;→&nbsp;<code>"bat.y.abcdefghi"</code></p>



<p class="has-medium-font-size">7단계 아이디의 길이가 2자 이하가 아니므로 변화가 없습니다.<br><code>"bat.y.abcdefghi"</code>&nbsp;→&nbsp;<code>"bat.y.abcdefghi"</code></p>



<p class="has-medium-font-size">따라서 신규 유저가 입력한 new_id가 &#8220;&#8230;!@BaT#*..y.abcdefghijklm&#8221;일 때, </p>



<p class="has-medium-font-size">네오의 프로그램이 추천하는 새로운 아이디는 &#8220;bat.y.abcdefghi&#8221; 입니다.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>[문제]</strong></h2>



<p class="has-medium-font-size">신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, </p>



<p class="has-medium-font-size">&#8220;네오&#8221;가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>[제한사항]</strong></h2>



<p class="has-medium-font-size">new_id는 길이 1 이상 1,000 이하인 문자열입니다.</p>



<p class="has-medium-font-size">new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다.</p>



<p class="has-medium-font-size">new_id에 나타날 수 있는 특수문자는 <code>-_.~!@#$%^&amp;*()=+[{]}:?,&lt;>/</code> 로 한정됩니다.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>[입출력 예]</strong></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">no</th><th class="has-text-align-left" data-align="left">new_id</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">예1</td><td class="has-text-align-left" data-align="left"><code>"...!@BaT#*..y.abcdefghijklm"</code></td><td class="has-text-align-left" data-align="left"><code>"bat.y.abcdefghi"</code></td></tr><tr><td class="has-text-align-left" data-align="left">예2</td><td class="has-text-align-left" data-align="left"><code>"z-+.^."</code></td><td class="has-text-align-left" data-align="left"><code>"z--"</code></td></tr><tr><td class="has-text-align-left" data-align="left">예3</td><td class="has-text-align-left" data-align="left"><code>"=.="</code></td><td class="has-text-align-left" data-align="left"><code>"aaa"</code></td></tr><tr><td class="has-text-align-left" data-align="left">예4</td><td class="has-text-align-left" data-align="left"><code>"123_.def"</code></td><td class="has-text-align-left" data-align="left"><code>"123_.def"</code></td></tr><tr><td class="has-text-align-left" data-align="left">예5</td><td class="has-text-align-left" data-align="left"><code>"abcdefghijklmn.p"</code></td><td class="has-text-align-left" data-align="left"><code>"abcdefghijklmn"</code></td></tr></tbody></table></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>입출력 예에 대한 설명</strong></h2>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<p class="has-medium-font-size">문제의 예시와 같습니다.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<p class="has-medium-font-size">7단계를 거치는 동안 new_id가 변화하는 과정은 아래와 같습니다.</p>



<p class="has-medium-font-size">1단계 변화 없습니다.<br>2단계&nbsp;<code>"z-+.^."</code>&nbsp;→&nbsp;<code>"z-.."</code><br>3단계&nbsp;<code>"z-.."</code>&nbsp;→&nbsp;<code>"z-."</code><br>4단계&nbsp;<code>"z-."</code>&nbsp;→&nbsp;<code>"z-"</code><br>5단계 변화 없습니다.<br>6단계 변화 없습니다.<br>7단계&nbsp;<code>"z-"</code>&nbsp;→&nbsp;<code>"z--"</code></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #3</strong></p>



<p class="has-medium-font-size">7단계를 거치는 동안 new_id가 변화하는 과정은 아래와 같습니다.</p>



<p class="has-medium-font-size">1단계 변화 없습니다.<br>2단계&nbsp;<code>"=.="</code>&nbsp;→&nbsp;<code>"."</code><br>3단계 변화 없습니다.<br>4단계&nbsp;<code>"."</code>&nbsp;→&nbsp;<code>""</code>&nbsp;(new_id가 빈 문자열이 되었습니다.)<br>5단계&nbsp;<code>""</code>&nbsp;→&nbsp;<code>"a"</code><br>6단계 변화 없습니다.<br>7단계&nbsp;<code>"a"</code>&nbsp;→&nbsp;<code>"aaa"</code></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #4</strong></p>



<p class="has-medium-font-size">1단계에서 7단계까지 거치는 동안 new_id(&#8220;123_.def&#8221;)는 변하지 않습니다. </p>



<p class="has-medium-font-size">즉, new_id가 처음부터 카카오의 아이디 규칙에 맞습니다.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #5</strong></p>



<p class="has-medium-font-size">1단계 변화 없습니다.<br>2단계 변화 없습니다.<br>3단계 변화 없습니다.<br>4단계 변화 없습니다.<br>5단계 변화 없습니다.<br>6단계 <code>"abcdefghijklmn.p"</code> → <code>"abcdefghijklmn."</code> → <code>"abcdefghijklmn"</code><br>7단계 변화 없습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h1 class="wp-block-heading">통과된 코드</h1>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;iostream>

using namespace std;

string solution(string new_id) {

    string answer = "";

	// 1단계
	for (int i = 0; i &lt; new_id.length(); i++) {
		if (new_id[i] >= 65 &amp;&amp; new_id[i] &lt;= 90)
			new_id[i] += 32;
	}

	// 2단계
	for (int i = 0; i &lt; new_id.length(); i++) {
		if ((new_id[i] >= 97 &amp;&amp; new_id[i] &lt;= 122) || new_id[i] == '-' || new_id[i] == '_' 
			|| new_id[i] == '.' || (new_id[i] >= 48 &amp;&amp; new_id[i] &lt;= 57))
			answer.push_back(new_id[i]);	
	}

	// 3단계
	new_id = answer;
	answer = "";
	bool check = false;
	for (int i = 0; i &lt; new_id.length(); i++) {
		if (new_id[i] == '.') {
			if (check) continue;
			answer.push_back(new_id[i]);
			check = true;
			continue;
		}
		answer.push_back(new_id[i]);
		check = false;
	}

	//4단계
	while (true) {
		if (answer[0] == '.')  {
			answer.erase(answer.begin());
			continue;
		}
		if (answer[answer.length() - 1] == '.') {
			answer.erase(answer.begin() + answer.length() - 1);
			continue;
		}
		break;
	}

	// 5단계
	if (answer.length() == 0) answer.push_back('a');
	
	// 6단계
	if (answer.length() >= 16) {
		answer = answer.substr(0, 15);
		while (true) {
			if (answer[answer.length() - 1] == '.') {
				answer.erase(answer.begin() + answer.length() - 1);
				continue;
			}
			break;
		}
	}

	// 7단계
	while (answer.length() &lt; 3) {
		answer.push_back(answer[answer.length() - 1]);
	}

    return answer;
}</pre>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="414" height="698" src="https://lycos7560.com/wp-content/uploads/2023/05/image-84.png" alt="" class="wp-image-34799" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-84.png 414w, https://lycos7560.com/wp-content/uploads/2023/05/image-84-178x300.png 178w" sizes="(max-width: 414px) 100vw, 414px" /></figure>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">더 효율적인 코드</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/72410/solution_groups?language=cpp" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/72410/solution_groups?language=cpp</a></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;bits/stdc++.h>
using namespace std;

string solution(string new_id) {
    for (char&amp; ch : new_id) if ('A' &lt;= ch &amp;&amp; ch &lt;= 'Z') ch |= 32;

    string ret;
    for (char&amp; ch: new_id) {
        if ('a' &lt;= ch &amp;&amp; ch &lt;= 'z' ||
            '0' &lt;= ch &amp;&amp; ch &lt;= '9' ||
            strchr("-_.", ch)) ret += ch;
    }

    new_id = ret;
    ret.clear();
    for (char&amp; ch: new_id) {
        if (!ret.empty() &amp;&amp; ret.back() == '.' &amp;&amp; ch == '.') continue;
        ret += ch;
    }

    if (ret.front() == '.') ret.erase(ret.begin());
    if (ret.back() == '.') ret.pop_back();

    if (ret.empty()) ret = "a";
    if (ret.size() >= 16) ret = ret.substr(0, 15);
    if (ret.back() == '.') ret.pop_back();
    while (ret.size() &lt;= 2) ret += ret.back();

    return ret;
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="399" height="711" src="https://lycos7560.com/wp-content/uploads/2023/05/image-85.png" alt="" class="wp-image-34802" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-85.png 399w, https://lycos7560.com/wp-content/uploads/2023/05/image-85-168x300.png 168w" sizes="(max-width: 399px) 100vw, 399px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-72410-%ec%8b%a0%ea%b7%9c-%ec%95%84%ec%9d%b4%eb%94%94-%ec%b6%94%ec%b2%9c-2021-kakao-blind-recruitment/34792/">Programmers 72410 신규 아이디 추천 [2021 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-72410-%ec%8b%a0%ea%b7%9c-%ec%95%84%ec%9d%b4%eb%94%94-%ec%b6%94%ec%b2%9c-2021-kakao-blind-recruitment/34792/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 72414 광고 삽입 [2021 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-72414-%ea%b4%91%ea%b3%a0-%ec%82%bd%ec%9e%85-2021-kakao-blind-recruitment/34776/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-72414-%ea%b4%91%ea%b3%a0-%ec%82%bd%ec%9e%85-2021-kakao-blind-recruitment/34776/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sun, 14 May 2023 13:39:28 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2021 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2021 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[72414]]></category>
		<category><![CDATA[72414번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[Programmers 72414]]></category>
		<category><![CDATA[Programmers 72414번]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[광고 삽입]]></category>
		<category><![CDATA[기본]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[문자열]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[타임라인]]></category>
		<category><![CDATA[파싱]]></category>
		<category><![CDATA[파싱(parsing)]]></category>
		<category><![CDATA[프로그래머스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=34776</guid>

					<description><![CDATA[<p>Programmers 72414번 '광고 삽입' 문제에 대한 글입니다. (This article is about the 'insert advertisement' problem in Programmers Number 72414.) [2021 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-72414-%ea%b4%91%ea%b3%a0-%ec%82%bd%ec%9e%85-2021-kakao-blind-recruitment/34776/">Programmers 72414 광고 삽입 [2021 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-01c05211      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#광고-삽입" class="uagb-toc-link__trigger">광고 삽입</a><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">광고 삽입</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/72414" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/72414</a></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">문제 설명</h2>



<p class="has-medium-font-size"><code>카카오TV</code>에서 유명한 크리에이터로 활동 중인 <code>죠르디</code>는 환경 단체로부터 </p>



<p class="has-medium-font-size">자신의 가장 인기있는 동영상에 지구온난화의 심각성을 알리기 위한 공익광고를 넣어 달라는 요청을 받았습니다. </p>



<p class="has-medium-font-size">평소에 환경 문제에 관심을 가지고 있던 &#8220;죠르디&#8221;는 요청을 받아들였고 </p>



<p class="has-medium-font-size">광고효과를 높이기 위해 시청자들이 가장 많이 보는 구간에 공익광고를 넣으려고 합니다. </p>



<p class="has-medium-font-size">&#8220;죠르디&#8221;는 시청자들이 해당 동영상의 어떤 구간을 재생했는 지 알 수 있는 재생구간 기록을 구했고, </p>



<p class="has-medium-font-size">해당 기록을 바탕으로 공익광고가 삽입될 최적의 위치를 고를 수 있었습니다.</p>



<p class="has-medium-font-size">참고로 광고는 재생 중인 동영상의 오른쪽 아래에서 원래 영상과 <code>동시에 재생되는</code> PIP(Picture in Picture) 형태로 제공됩니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="989" height="560" src="https://lycos7560.com/wp-content/uploads/2023/05/image-80.jpg" alt="" class="wp-image-34777" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-80.jpg 989w, https://lycos7560.com/wp-content/uploads/2023/05/image-80-300x170.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-80-768x435.jpg 768w" sizes="(max-width: 989px) 100vw, 989px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">다음은 &#8220;죠르디&#8221;가 공익광고가 삽입될 최적의 위치를 고르는 과정을 그림으로 설명한 것입니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1090" height="355" src="https://lycos7560.com/wp-content/uploads/2023/05/image-80.png" alt="" class="wp-image-34779" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-80.png 1090w, https://lycos7560.com/wp-content/uploads/2023/05/image-80-300x98.png 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-80-768x250.png 768w" sizes="(max-width: 1090px) 100vw, 1090px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li>그림의 파란색 선은 광고를 검토 중인 &#8220;죠르디&#8221; 동영상의 전체 재생 구간을 나타냅니다.
<ul class="wp-block-list">
<li>위 그림에서, &#8220;죠르디&#8221; 동영상의 총 재생시간은&nbsp;<code>02시간 03분 55초</code>&nbsp;입니다.</li>
</ul>
</li>



<li>그림의 검은색 선들은 각 시청자들이 &#8220;죠르디&#8221;의 동영상을 재생한 구간의 위치를 표시하고 있습니다.
<ul class="wp-block-list">
<li>검은색 선의 가운데 숫자는 각 재생 기록을 구분하는 ID를 나타냅니다.</li>



<li>검은색 선에 표기된 왼쪽 끝 숫자와 오른쪽 끝 숫자는 시청자들이 재생한 동영상 구간의 시작 시각과 종료 시각을 나타냅니다.</li>



<li>위 그림에서, 3번 재생 기록은 <code>00시 25분 50초</code> 부터 <code>00시 48분 29초</code> 까지 총 <code>00시간 22분 39초</code> 동안 죠르디의 동영상을 재생했습니다.</li>



<li>위 그림에서, 1번 재생 기록은&nbsp;<code>01시 20분 15초</code>&nbsp;부터&nbsp;<code>01시 45분 14초</code>&nbsp;까지 총&nbsp;<code>00시간 24분 59초</code>&nbsp;동안 죠르디의 동영상을 재생했습니다.</li>
</ul>
</li>



<li>그림의 빨간색 선은 &#8220;죠르디&#8221;가 선택한 최적의 공익광고 위치를 나타냅니다.
<ul class="wp-block-list">
<li>만약 공익광고의 재생시간이 <code>00시간 14분 15초</code>라면, 위의 그림처럼 <code>01시 30분 59초</code> 부터 <br><code>01시 45분 14초</code> 까지 공익광고를 삽입하는 것이 가장 좋습니다. 이 구간을 시청한 시청자들의 누적 재생시간이 가장 크기 때문입니다.</li>



<li><code>01시 30분 59초</code> 부터 <code>01시 45분 14초</code> 까지의 누적 재생시간은 다음과 같이 계산됩니다.
<ul class="wp-block-list">
<li><code>01시 30분 59초</code>&nbsp;부터&nbsp;<code>01시 37분 44초</code>&nbsp;까지 : 4번, 1번 재생 기록이 두차례 있으므로 재생시간의 합은&nbsp;<code>00시간 06분 45초</code>&nbsp;X 2 =&nbsp;<code>00시간 13분 30초</code></li>



<li><code>01시 37분 44초</code>&nbsp;부터&nbsp;<code>01시 45분 14초</code>&nbsp;까지 : 4번, 1번, 5번 재생 기록이 세차례 있으므로 재생시간의 합은&nbsp;<code>00시간 07분 30초</code>&nbsp;X 3 =&nbsp;<code>00시간 22분 30초</code></li>



<li>따라서, 이 구간 시청자들의 누적 재생시간은&nbsp;<code>00시간 13분 30초</code>&nbsp;+&nbsp;<code>00시간 22분 30초</code>&nbsp;=&nbsp;<code>00시간 36분 00초</code>입니다.</li>
</ul>
</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>[문제]</strong></h2>



<p class="has-medium-font-size">&#8220;죠르디&#8221;의 동영상 재생시간 길이 play_time, 공익광고의 재생시간 길이 adv_time, </p>



<p class="has-medium-font-size">시청자들이 해당 동영상을 재생했던 구간 정보 logs가 매개변수로 주어질 때, </p>



<p class="has-medium-font-size">시청자들의 누적 재생시간이 가장 많이 나오는 곳에 공익광고를 삽입하려고 합니다. </p>



<p class="has-medium-font-size">이때, 공익광고가 들어갈 <code>시작 시각</code>을 구해서 return 하도록 solution 함수를 완성해주세요. </p>



<p class="has-medium-font-size">만약, 시청자들의 누적 재생시간이 가장 많은 곳이 여러 곳이라면, </p>



<p class="has-medium-font-size">그 중에서 <code>가장 빠른 시작 시각</code>을 return 하도록 합니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>[제한사항]</strong></h2>



<ul class="wp-block-list">
<li>play_time, adv_time은 길이 8로 고정된 문자열입니다.
<ul class="wp-block-list">
<li>play_time, adv_time은&nbsp;<code>HH:MM:SS</code>&nbsp;형식이며,&nbsp;<code>00:00:01</code>&nbsp;이상&nbsp;<code>99:59:59</code>&nbsp;이하입니다.</li>



<li>즉, 동영상 재생시간과 공익광고 재생시간은&nbsp;<code>00시간 00분 01초</code>&nbsp;이상&nbsp;<code>99시간 59분 59초</code>&nbsp;이하입니다.</li>



<li>공익광고 재생시간은 동영상 재생시간보다 짧거나 같게 주어집니다.</li>
</ul>
</li>



<li>logs는 크기가 1 이상 300,000 이하인 문자열 배열입니다.
<ul class="wp-block-list">
<li>logs 배열의 각 원소는 시청자의 재생 구간을 나타냅니다.</li>



<li>logs 배열의 각 원소는 길이가 17로 고정된 문자열입니다.</li>



<li>logs 배열의 각 원소는 <code>H1:M1:S1-H2:M2:S2</code> 형식입니다.
<ul class="wp-block-list">
<li><code>H1:M1:S1</code>은 동영상이 시작된 시각,&nbsp;<code>H2:M2:S2</code>는 동영상이 종료된 시각을 나타냅니다.</li>



<li><code>H1:M1:S1</code>는&nbsp;<code>H2:M2:S2</code>보다 1초 이상 이전 시각으로 주어집니다.</li>



<li><code>H1:M1:S1</code>와&nbsp;<code>H2:M2:S2</code>는 play_time 이내의 시각입니다.</li>
</ul>
</li>
</ul>
</li>



<li>시간을 나타내는 <code>HH, H1, H2</code>의 범위는 00~99, 분을 나타내는 <code>MM, M1, M2</code>의 범위는 00~59, <br>초를 나타내는 <code>SS, S1, S2</code>의 범위는 00~59까지 사용됩니다. <br>잘못된 시각은 입력으로 주어지지 않습니다. (예: <code>04:60:24</code>, <code>11:12:78</code>, <code>123:12:45</code> 등)</li>



<li>return 값의 형식
<ul class="wp-block-list">
<li>공익광고를 삽입할 시각을&nbsp;<code>HH:MM:SS</code>&nbsp;형식의 8자리 문자열로 반환합니다.</li>
</ul>
</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>[입출력 예]</strong></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">play_time</th><th class="has-text-align-left" data-align="left">adv_time</th><th class="has-text-align-left" data-align="left">logs</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left"><code>"02:03:55"</code></td><td class="has-text-align-left" data-align="left"><code>"00:14:15"</code></td><td class="has-text-align-left" data-align="left"><code>["01:20:15-01:45:14", "00:40:31-01:00:00", "00:25:50-00:48:29", "01:30:59-01:53:29", "01:37:44-02:02:30"]</code></td><td class="has-text-align-left" data-align="left"><code>"01:30:59"</code></td></tr><tr><td class="has-text-align-left" data-align="left"><code>"99:59:59"</code></td><td class="has-text-align-left" data-align="left"><code>"25:00:00"</code></td><td class="has-text-align-left" data-align="left"><code>["69:59:59-89:59:59", "01:00:00-21:00:00", "79:59:59-99:59:59", "11:00:00-31:00:00"]</code></td><td class="has-text-align-left" data-align="left"><code>"01:00:00"</code></td></tr><tr><td class="has-text-align-left" data-align="left"><code>"50:00:00"</code></td><td class="has-text-align-left" data-align="left"><code>"50:00:00"</code></td><td class="has-text-align-left" data-align="left"><code>["15:36:51-38:21:49", "10:14:18-15:36:51", "38:21:49-42:51:45"]</code></td><td class="has-text-align-left" data-align="left"><code>"00:00:00"</code></td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>입출력 예에 대한 설명</strong></h2>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<p>문제 예시와 같습니다.</p>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1094" height="321" src="https://lycos7560.com/wp-content/uploads/2023/05/image-81.png" alt="" class="wp-image-34781" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-81.png 1094w, https://lycos7560.com/wp-content/uploads/2023/05/image-81-300x88.png 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-81-768x225.png 768w" sizes="(max-width: 1094px) 100vw, 1094px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><code>01:00:00</code>에 공익광고를 삽입하면 <code>26:00:00</code>까지 재생되며, 이곳이 가장 좋은 위치입니다. </p>



<p class="has-medium-font-size">이 구간의 시청자 누적 재생시간은 다음과 같습니다.</p>



<ul class="wp-block-list">
<li><code>01:00:00-11:00:00</code>&nbsp;: 해당 구간이 1회(2번 기록) 재생되었으므로 누적 재생시간은&nbsp;<code>10시간 00분 00초</code>&nbsp;입니다.</li>



<li><code>11:00:00-21:00:00</code>&nbsp;: 해당 구간이 2회(2번, 4번 기록) 재생되었으므로 누적 재생시간은&nbsp;<code>20시간 00분 00초</code>&nbsp;입니다.</li>



<li><code>21:00:00-26:00:00</code>&nbsp;: 해당 구간이 1회(4번 기록) 재생되었으므로 누적 재생시간은&nbsp;<code>05시간 00분 00초</code>&nbsp;입니다.</li>



<li>따라서, 이 구간의 시청자 누적 재생시간은&nbsp;<code>10시간 00분 00초</code>&nbsp;+&nbsp;<code>20시간 00분 00초</code>&nbsp;+&nbsp;<code>05시간 00분 00초</code>&nbsp;=&nbsp;<code>35시간 00분 00초</code>&nbsp;입니다.</li>



<li>초록색으로 표시된 구간(<code>69:59:59-94:59:59</code>)에 광고를 삽입해도 동일한 결과를 얻을 수 있으나,&nbsp;<code>01:00:00</code>이&nbsp;<code>69:59:59</code>&nbsp;보다 빠른 시각이므로,&nbsp;<code>"01:00:00"</code>을 return 합니다.</li>
</ul>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>입출력 예 #</strong>3</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1096" height="323" src="https://lycos7560.com/wp-content/uploads/2023/05/image-82.png" alt="" class="wp-image-34782" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-82.png 1096w, https://lycos7560.com/wp-content/uploads/2023/05/image-82-300x88.png 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-82-768x226.png 768w" sizes="(max-width: 1096px) 100vw, 1096px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">동영상 재생시간과 공익광고 재생시간이 같으므로, </p>



<p class="has-medium-font-size">삽입할 수 있는 위치는 맨 처음(<code>00:00:00</code>)이 유일합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><code>동영상 재생시간 = 재생이 종료된 시각 - 재생이 시작된 시각</code></p>



<p>(예를 들어, <code>00시 00분 01초</code>부터 <code>00시 00분 10초</code>까지 동영상이 재생되었다면, 동영상 재생시간은 <code>9초</code> 입니다.) </p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h1 class="wp-block-heading">통과된 코드</h1>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/05/KakaoTalk_20230514_223043316.jpg" alt="" class="wp-image-34788" width="1076" height="1440" srcset="https://lycos7560.com/wp-content/uploads/2023/05/KakaoTalk_20230514_223043316.jpg 1434w, https://lycos7560.com/wp-content/uploads/2023/05/KakaoTalk_20230514_223043316-224x300.jpg 224w, https://lycos7560.com/wp-content/uploads/2023/05/KakaoTalk_20230514_223043316-768x1028.jpg 768w, https://lycos7560.com/wp-content/uploads/2023/05/KakaoTalk_20230514_223043316-1147x1536.jpg 1147w" sizes="(max-width: 1076px) 100vw, 1076px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>주의</strong></h2>



<p class="has-medium-font-size">logs는 크기가 1 이상 300,000 이하인 문자열 배열</p>



<p class="has-medium-font-size">동영상 시간의 최대 범위는 360,000초</p>



<p class="has-medium-font-size">300,000 * 360,000 = 108,000,000,000</p>



<p class="has-medium-font-size">int의 범위 <strong>-2,147,483,648 ~ 2,147,483,647</strong>를 벗어난다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;sstream>
#include &lt;cstdlib>
#include &lt;string>

using namespace std;

int Total_PT_Int, Total_ADV_Time, TimeLine[360000];
long long int _Res;

vector&lt;pair&lt;int, int>> Logs_Times;

int StringTimeConverter(string time) {
    int second;

    int to_hour = ((time[0] - '0') * 10) + (time[1] - '0');
    int to_min = ((time[3] - '0') * 10) + (time[4] - '0');
    int to_sec = ((time[6] - '0') * 10) + (time[7] - '0');
    second = to_hour * 3600 + to_min * 60 + to_sec;

    return second;
}

string IntToTimeString(int timeInSeconds) {
    int hours = timeInSeconds / 3600;
    int minutes = (timeInSeconds % 3600) / 60;
    int seconds = (timeInSeconds % 3600) % 60;
    string str;
    if (hours &lt; 10) str += "0" + to_string(hours) + ":";
    else str += to_string(hours) + ":";
    if (minutes &lt; 10) str += "0" + to_string(minutes) + ":";
    else str += to_string(minutes) + ":";
    if (seconds &lt; 10) str += "0" + to_string(seconds);
    else str += to_string(seconds);
    return str;
}

string solution(string play_time, string adv_time, vector&lt;string> logs) {
    string answer = "";
    Total_PT_Int = StringTimeConverter(play_time);
    Total_ADV_Time = StringTimeConverter(adv_time);
    for (auto&amp; it : logs)
    {
        vector&lt;string> _ResV;
        istringstream ss(it);
        string _temp;
        while (getline(ss, _temp, '-'))
            _ResV.push_back(_temp);
        int _Start = StringTimeConverter(_ResV[0]);
        int _End = StringTimeConverter(_ResV[1]); 
        Logs_Times.push_back(make_pair(_Start, _End));
        TimeLine[_Start]++;
        TimeLine[_End]--;
    }

    for (int i = 1; i &lt; Total_PT_Int; i++) 
        TimeLine[i] += TimeLine[i - 1];

    // 0 부터 시작
    int STime = 0;
    for (int i = 1; i &lt; Total_ADV_Time; i++)
        _Res += TimeLine[i - 1];
    long long int Max = _Res;


    for (int i = Total_ADV_Time; i &lt; Total_PT_Int; i++) {
        _Res += TimeLine[i];
        _Res -= TimeLine[i - Total_ADV_Time];
        if (_Res > Max) {
            Max = _Res;
           STime = i - Total_ADV_Time + 1;
        }
    }
    return IntToTimeString(STime);
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/05/image-83.png" alt="" class="wp-image-34784" width="475" height="974" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-83.png 358w, https://lycos7560.com/wp-content/uploads/2023/05/image-83-146x300.png 146w" sizes="(max-width: 475px) 100vw, 475px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-72414-%ea%b4%91%ea%b3%a0-%ec%82%bd%ec%9e%85-2021-kakao-blind-recruitment/34776/">Programmers 72414 광고 삽입 [2021 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-72414-%ea%b4%91%ea%b3%a0-%ec%82%bd%ec%9e%85-2021-kakao-blind-recruitment/34776/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 72412 순위 검색 [2021 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-72412-%ec%88%9c%ec%9c%84-%ea%b2%80%ec%83%89-2021-kakao-blind-recruitment/34365/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-72412-%ec%88%9c%ec%9c%84-%ea%b2%80%ec%83%89-2021-kakao-blind-recruitment/34365/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Wed, 26 Apr 2023 16:29:10 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2021 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2021 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[72412]]></category>
		<category><![CDATA[72412번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[lower_bound]]></category>
		<category><![CDATA[Programmers 72412]]></category>
		<category><![CDATA[Programmers 72412번]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[순위 검색]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[프로그래머스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=34365</guid>

					<description><![CDATA[<p>Programmers 72412 '순위 검색' 문제에 대한 글입니다. (This article is about Programmers 72412 'Ranking Search' problem.) [2021 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-72412-%ec%88%9c%ec%9c%84-%ea%b2%80%ec%83%89-2021-kakao-blind-recruitment/34365/">Programmers 72412 순위 검색 [2021 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-1a0936f6      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#순위-검색" class="uagb-toc-link__trigger">순위 검색</a><li class="uagb-toc__list"><a href="#효율성-실패-코드" class="uagb-toc-link__trigger">효율성 실패 코드</a><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">순위 검색</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/72412" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/72412</a></p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size"><strong>[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]</strong></p>



<p class="has-medium-font-size">카카오는 하반기 경력 개발자 공개채용을 진행 중에 있으며 현재 지원서 접수와 코딩테스트가 종료되었습니다. </p>



<p class="has-medium-font-size">이번 채용에서 지원자는 지원서 작성 시 아래와 같이 4가지 항목을 반드시 선택하도록 하였습니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>코딩테스트 참여 개발언어 항목에 cpp, java, python 중 하나를 선택해야 합니다.</p>



<p>지원 직군 항목에 backend와 frontend 중 하나를 선택해야 합니다.</p>



<p>지원 경력구분 항목에 junior와 senior 중 하나를 선택해야 합니다.</p>



<p>선호하는 소울푸드로 chicken과 pizza 중 하나를 선택해야 합니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">인재영입팀에 근무하고 있는 <code>니니즈</code>는 코딩테스트 결과를 분석하여 채용에 참여한 개발팀들에 제공하기 위해 </p>



<p class="has-medium-font-size">지원자들의 지원 조건을 선택하면 해당 조건에 맞는 지원자가 몇 명인 지 쉽게 알 수 있는 도구를 만들고 있습니다.</p>



<p class="has-medium-font-size">예를 들어, 개발팀에서 궁금해하는 문의사항은 다음과 같은 형태가 될 수 있습니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><code>코딩테스트에 java로 참여했으며, backend 직군을 선택했고, junior 경력이면서, </code></p>



<p><code>소울푸드로 pizza를 선택한 사람 중 코딩테스트 점수를 50점 이상 받은 지원자는 몇 명인가?</code></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">물론 이 외에도 각 개발팀의 상황에 따라 아래와 같이 다양한 형태의 문의가 있을 수 있습니다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>코딩테스트에 python으로 참여했으며, frontend 직군을 선택했고, senior 경력이면서, 소울푸드로 chicken을 선택한 사람 중 코딩테스트 점수를 100점 이상 받은 사람은 모두 몇 명인가?</p>



<p>코딩테스트에 cpp로 참여했으며, senior 경력이면서, 소울푸드로 pizza를 선택한 사람 중 코딩테스트 점수를 100점 이상 받은 사람은 모두 몇 명인가?</p>



<p>backend 직군을 선택했고, senior 경력이면서 코딩테스트 점수를 200점 이상 받은 사람은 모두 몇 명인가?</p>



<p>소울푸드로 chicken을 선택한 사람 중 코딩테스트 점수를 250점 이상 받은 사람은 모두 몇 명인가?</p>



<p>코딩테스트 점수를 150점 이상 받은 사람은 모두 몇 명인가?</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">즉, 개발팀에서 궁금해하는 내용은 다음과 같은 형태를 갖습니다.</p>



<p></p>



<p class="has-medium-font-size"><strong>[조건]을 만족하는 사람 중 코딩테스트 점수를 X점 이상 받은 사람은 모두 몇 명인가?</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h4 class="wp-block-heading"><strong>[문제]</strong></h4>



<p class="has-medium-font-size">지원자가 지원서에 입력한 4가지의 정보와 획득한 코딩테스트 점수를 하나의 문자열로 구성한 값의 배열 info, </p>



<p class="has-medium-font-size">개발팀이 궁금해하는 문의조건이 문자열 형태로 담긴 배열 query가 매개변수로 주어질 때,</p>



<p class="has-medium-font-size">각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return 하도록 solution 함수를 완성해 주세요.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading has-medium-font-size"><strong>[제한사항]</strong></h4>



<ul class="wp-block-list">
<li>info 배열의 크기는 1 이상 50,000 이하입니다.</li>



<li>info 배열 각 원소의 값은 지원자가 지원서에 입력한 4가지 값과 코딩테스트 점수를 합친 &#8220;개발언어 직군 경력 소울푸드 점수&#8221; 형식입니다.
<ul class="wp-block-list">
<li>개발언어는 cpp, java, python 중 하나입니다.</li>



<li>직군은 backend, frontend 중 하나입니다.</li>



<li>경력은 junior, senior 중 하나입니다.</li>



<li>소울푸드는 chicken, pizza 중 하나입니다.</li>



<li>점수는 코딩테스트 점수를 의미하며, 1 이상 100,000 이하인 자연수입니다.</li>



<li>각 단어는 공백문자(스페이스 바) 하나로 구분되어 있습니다.</li>
</ul>
</li>



<li>query 배열의 크기는 1 이상 100,000 이하입니다.</li>



<li>query의 각 문자열은 &#8220;[조건] X&#8221; 형식입니다.
<ul class="wp-block-list">
<li>[조건]은 &#8220;개발언어 and 직군 and 경력 and 소울푸드&#8221; 형식의 문자열입니다.</li>



<li>언어는 cpp, java, python, &#8211; 중 하나입니다.</li>



<li>직군은 backend, frontend, &#8211; 중 하나입니다.</li>



<li>경력은 junior, senior, &#8211; 중 하나입니다.</li>



<li>소울푸드는 chicken, pizza, &#8211; 중 하나입니다.</li>



<li>&#8216;-&#8216; 표시는 해당 조건을 고려하지 않겠다는 의미입니다.</li>



<li>X는 코딩테스트 점수를 의미하며 조건을 만족하는 사람 중 X점 이상 받은 사람은 모두 몇 명인 지를 의미합니다.</li>



<li>각 단어는 공백문자(스페이스 바) 하나로 구분되어 있습니다.</li>



<li>예를 들면, &#8220;cpp and &#8211; and senior and pizza 500&#8243;은 &#8220;cpp로 코딩테스트를 봤으며, <br>경력은 senior 이면서 소울푸드로 pizza를 선택한 지원자 중 코딩테스트 점수를 500점 이상 받은 사람은 모두 몇 명인가?&#8221;를 의미합니다.</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-default" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h5 class="wp-block-heading has-medium-font-size"><strong>[입출력 예]</strong></h5>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">info</th><th class="has-text-align-left" data-align="left">query</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left"><code>["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"]</code></td><td class="has-text-align-left" data-align="left"><code>["java and backend and junior and pizza 100","python and frontend and senior and chicken 200","cpp and - and senior and pizza 250","- and backend and senior and - 150","- and - and - and chicken 100","- and - and - and - 150"]</code></td><td class="has-text-align-left" data-align="left">[1,1,1,1,2,4]</td></tr></tbody></table></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-medium-font-size"><strong>입출력 예에 대한 설명</strong></h5>



<p class="has-medium-font-size">지원자 정보를 표로 나타내면 다음과 같습니다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">언어</th><th class="has-text-align-left" data-align="left">직군</th><th class="has-text-align-left" data-align="left">경력</th><th class="has-text-align-left" data-align="left">소울 푸드</th><th class="has-text-align-left" data-align="left">점수</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">java</td><td class="has-text-align-left" data-align="left">backend</td><td class="has-text-align-left" data-align="left">junior</td><td class="has-text-align-left" data-align="left">pizza</td><td class="has-text-align-left" data-align="left">150</td></tr><tr><td class="has-text-align-left" data-align="left">python</td><td class="has-text-align-left" data-align="left">frontend</td><td class="has-text-align-left" data-align="left">senior</td><td class="has-text-align-left" data-align="left">chicken</td><td class="has-text-align-left" data-align="left">210</td></tr><tr><td class="has-text-align-left" data-align="left">python</td><td class="has-text-align-left" data-align="left">frontend</td><td class="has-text-align-left" data-align="left">senior</td><td class="has-text-align-left" data-align="left">chicken</td><td class="has-text-align-left" data-align="left">150</td></tr><tr><td class="has-text-align-left" data-align="left">cpp</td><td class="has-text-align-left" data-align="left">backend</td><td class="has-text-align-left" data-align="left">senior</td><td class="has-text-align-left" data-align="left">pizza</td><td class="has-text-align-left" data-align="left">260</td></tr><tr><td class="has-text-align-left" data-align="left">java</td><td class="has-text-align-left" data-align="left">backend</td><td class="has-text-align-left" data-align="left">junior</td><td class="has-text-align-left" data-align="left">chicken</td><td class="has-text-align-left" data-align="left">80</td></tr><tr><td class="has-text-align-left" data-align="left">python</td><td class="has-text-align-left" data-align="left">backend</td><td class="has-text-align-left" data-align="left">senior</td><td class="has-text-align-left" data-align="left">chicken</td><td class="has-text-align-left" data-align="left">50</td></tr></tbody></table></figure>



<ul class="wp-block-list">
<li><code>"java and backend and junior and pizza 100"</code> : java로 코딩테스트를 봤으며, <br>backend 직군을 선택했고 junior 경력이면서 소울푸드로 pizza를 선택한 지원자 중 <br>코딩테스트 점수를 100점 이상 받은 지원자는 1명 입니다.</li>



<li><code>"python and frontend and senior and chicken 200"</code> : python으로 코딩테스트를 봤으며, <br>frontend 직군을 선택했고, senior 경력이면서 소울 푸드로 chicken을 선택한 지원자 중 <br>코딩테스트 점수를 200점 이상 받은 지원자는 1명 입니다.</li>



<li><code>"cpp and - and senior and pizza 250"</code> : cpp로 코딩테스트를 봤으며, <br>senior 경력이면서 소울푸드로 pizza를 선택한 지원자 중 <br>코딩테스트 점수를 250점 이상 받은 지원자는 1명 입니다.</li>



<li><code>"- and backend and senior and - 150"</code> : backend 직군을 선택했고,<br> senior 경력인 지원자 중 코딩테스트 점수를 150점 이상 받은 지원자는 1명 입니다.</li>



<li><code>"- and - and - and chicken 100"</code> : 소울푸드로 chicken을 선택한 지원자 중 <br>코딩테스트 점수를 100점 이상을 받은 지원자는 2명 입니다.</li>



<li><code>"- and - and - and - 150"</code>&nbsp;: 코딩테스트 점수를 150점 이상 받은 지원자는 4명 입니다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h1 class="wp-block-heading">효율성 실패 코드</h1>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;iostream>
#include &lt;cstdlib>
#include &lt;sstream>
#include &lt;tuple>
using namespace std;
vector&lt;tuple&lt;int, int, int, int, int>> myVector;
vector&lt;int> solution(vector&lt;string> info, vector&lt;string> query) {
    vector&lt;int> answer;
    int _Index = 1;
    for (auto&amp; it : info) {
        istringstream ss(it);
        vector&lt;string> words; // 자른 문자열을 저장할 벡터
        string _Temp; // 임시
        // 스트림을 한 줄씩 읽어, 공백 단위로 분리한 뒤, 결과를 벡터에 저장
        while (getline(ss, _Temp, ' ')) words.push_back(_Temp);
        int _Lang, _Career, _Group, _Food, _Score;
        if (words[0] == "cpp") _Lang = 0; // 언어
        else if(words[0] == "java") _Lang = 1;
        else _Lang = 2;
        if (words[1] == "backend") _Group = 0; // 직군
        else _Group = 1;
        if (words[2] == "senior") _Career = 0; // 경력
        else _Career = 1;
        if (words[3] == "chicken") _Food = 0; // 소울푸드
        else _Food = 1;
        _Score = atoi(words[4].c_str()); // 점수
        myVector.push_back({make_tuple(_Lang, _Group, _Career, _Food, _Score) });
    }
    for (auto&amp; it : query) {
        istringstream ss(it);
        vector&lt;string> words; // 자른 문자열을 저장할 벡터
        string _Temp; // 임시
        // 스트림을 한 줄씩 읽어, 공백 단위로 분리한 뒤, 결과를 벡터에 저장
        while (getline(ss, _Temp, ' ')) {
            if (_Temp == "and") continue;
            words.push_back(_Temp);
        }
        int _Lang = -1, _Career = -1, _Group = -1, _Food = -1, _Score = 0, _Res = 0;
        if (words[0] == "cpp") _Lang = 0; // 언어
        else if (words[0] == "java") _Lang = 1;
        else if (words[0] == "python") _Lang = 2;

        if (words[1] == "backend") _Group = 0; // 직군
        else if (words[1] == "frontend") _Group = 1;
        if (words[2] == "senior") _Career = 0; // 경력
        else if (words[2] == "junior") _Career = 1;

        if (words[3] == "chicken") _Food = 0; // 소울푸드
        else if (words[3] == "pizza") _Food = 1;

        if (words[4] != "-") _Score = atoi(words[4].c_str()); // 점수
        for (auto&amp; it : myVector) {
            if (get&lt;0>(it) != _Lang &amp;&amp; _Lang != -1) continue;
            if (get&lt;1>(it) != _Group &amp;&amp; _Group != -1) continue;
            if (get&lt;2>(it) != _Career &amp;&amp; _Career != -1) continue;
            if (get&lt;3>(it) != _Food &amp;&amp; _Food != -1) continue;
            if (get&lt;4>(it) &lt; _Score) continue;
            _Res++;
        }
        answer.push_back(_Res);
    }
    return answer;
}
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="531" height="674" src="https://lycos7560.com/wp-content/uploads/2023/04/image-22.png" alt="" class="wp-image-34375" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-22.png 531w, https://lycos7560.com/wp-content/uploads/2023/04/image-22-236x300.png 236w" sizes="(max-width: 531px) 100vw, 531px" /></figure>



<div style="height:44px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">효율성 테스트를 통과하기 위해서는 쿼리를 받자마자 결과가 나와야함 </p>



<p class="has-medium-font-size">(위의 코드는 쿼리가 들어오면 모든 정보를 순회하면서 찾는 방식)</p>



<figure class="wp-block-image size-full"><img decoding="async" width="617" height="193" src="https://lycos7560.com/wp-content/uploads/2023/04/image-25.png" alt="" class="wp-image-34379" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-25.png 617w, https://lycos7560.com/wp-content/uploads/2023/04/image-25-300x94.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">통과된 코드</h1>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;string>
#include &lt;vector>
#include &lt;iostream>
#include &lt;cstdlib>
#include &lt;sstream>
#include &lt;algorithm>

using namespace std;

vector&lt;int> myVector[4][3][3][3];

vector&lt;int> solution(vector&lt;string> info, vector&lt;string> query) {
    vector&lt;int> answer;
    for (auto&amp; it : info) {
        istringstream ss(it);
        vector&lt;string> words; // 자른 문자열을 저장할 벡터
        string _Temp; // 임시
        // 스트림을 한 줄씩 읽어, 공백 단위로 분리한 뒤, 결과를 벡터에 저장
        while (getline(ss, _Temp, ' ')) words.push_back(_Temp);
        int _Lang, _Career, _Group, _Food, _Score;
        if (words[0] == "cpp") _Lang = 1; // 언어
        else if(words[0] == "java") _Lang = 2;
        else _Lang = 3;
        if (words[1] == "backend") _Group = 1; // 직군
        else _Group = 2;
        if (words[2] == "senior") _Career = 1; // 경력
        else _Career = 2;
        if (words[3] == "chicken") _Food = 1; // 소울푸드
        else _Food = 2;
        _Score = atoi(words[4].c_str()); // 점수

        myVector[0][0][0][0].push_back(_Score);
        myVector[_Lang][0][0][0].push_back(_Score);
        myVector[_Lang][_Group][0][0].push_back(_Score);
        myVector[_Lang][_Group][_Career][0].push_back(_Score);
        myVector[_Lang][_Group][_Career][_Food].push_back(_Score);
        myVector[_Lang][_Group][0][_Food].push_back(_Score);
        myVector[_Lang][0][_Career][0].push_back(_Score);
        myVector[_Lang][0][_Career][_Food].push_back(_Score);
        myVector[_Lang][0][0][_Food].push_back(_Score);
        myVector[0][_Group][0][0].push_back(_Score);
        myVector[0][_Group][_Career][0].push_back(_Score);
        myVector[0][_Group][_Career][_Food].push_back(_Score);
        myVector[0][_Group][0][_Food].push_back(_Score);
        myVector[0][0][_Career][0].push_back(_Score);
        myVector[0][0][_Career][_Food].push_back(_Score);
        myVector[0][0][0][_Food].push_back(_Score);
    }

    // 빠른 쿼리 검색을 위해서 정렬
    for (int i = 0; i &lt; 4; i++) {
        for (int j = 0; j &lt; 3; j++){
            for (int k = 0; k &lt; 3; k++){
                for (int l = 0; l &lt; 3; l++) {
                    sort(myVector[i][j][k][l].begin(), myVector[i][j][k][l].end());
                }
            }
        }
    }

    for (auto&amp; it : query) {
        istringstream ss(it);
        vector&lt;string> words; // 자른 문자열을 저장할 벡터
        string _Temp; // 임시
        // 스트림을 한 줄씩 읽어, 공백 단위로 분리한 뒤, 결과를 벡터에 저장
        while (getline(ss, _Temp, ' ')) {
            if (_Temp == "and") continue;
            words.push_back(_Temp);
        }
        int _Lang = 0, _Career = 0, _Group = 0, _Food = 0, _Score = 0;
        if (words[0] == "cpp") _Lang = 1; // 언어
        else if (words[0] == "java") _Lang = 2;
        else if (words[0] == "python") _Lang = 3;
        if (words[1] == "backend") _Group = 1; // 직군
        else if (words[1] == "frontend") _Group = 2;
        if (words[2] == "senior") _Career = 1; // 경력
        else if (words[2] == "junior") _Career = 2;
        if (words[3] == "chicken") _Food = 1; // 소울푸드
        else if (words[3] == "pizza") _Food = 2;
        if (words[4] != "-") _Score = atoi(words[4].c_str()); // 점수
        // _Score 이상의 수가 나오는 it 반환
        auto iter = lower_bound(myVector[_Lang][_Group][_Career][_Food].begin(), myVector[_Lang][_Group][_Career][_Food].end(), _Score);
        if (iter == myVector[_Lang][_Group][_Career][_Food].end()) answer.push_back(0); // end() 반환은 값이 없다는 이야기
        else answer.push_back(myVector[_Lang][_Group][_Career][_Food].size() - (iter - myVector[_Lang][_Group][_Career][_Food].begin()));
    }
    return answer;
}
</pre>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">나올 수 있는 모든 쿼리</h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="522" height="288" src="https://lycos7560.com/wp-content/uploads/2023/04/image-21.png" alt="" class="wp-image-34373" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-21.png 522w, https://lycos7560.com/wp-content/uploads/2023/04/image-21-300x166.png 300w" sizes="(max-width: 522px) 100vw, 522px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">lower_bound를 이용한 확인</h2>



<figure class="wp-block-image size-full"><img decoding="async" width="1102" height="126" src="https://lycos7560.com/wp-content/uploads/2023/04/image-20.png" alt="" class="wp-image-34370" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-20.png 1102w, https://lycos7560.com/wp-content/uploads/2023/04/image-20-300x34.png 300w, https://lycos7560.com/wp-content/uploads/2023/04/image-20-768x88.png 768w" sizes="(max-width: 1102px) 100vw, 1102px" /></figure>



<p class="has-medium-font-size">lower_bound는 이진 탐색을 이용하여 정렬된 벡터에서 해당 값(_Score)이 처음으로 나타나는 위치를 찾아 그 위치를 반환</p>



<p class="has-medium-font-size">만약 lower_bound가 반환한 위치가 myVector[_Lang][_Group][_Career][_Food]의 end()를 가리킨다면, </p>



<p class="has-medium-font-size">해당 값이 벡터에 없는 것이므로 answer 벡터에 0을 push_back합니다.</p>



<p class="has-medium-font-size">만약 lower_bound가 반환한 위치가 myVector[_Lang][_Group][_Career][_Food]의 end()를 가리키지 않는다면,</p>



<p class="has-medium-font-size">해당 값이 벡터에서 처음 나타나는 위치를 가리킨다.</p>



<p class="has-medium-font-size">이 iterator에서 벡터의 시작 iterator를 빼면, 해당 값이 위치하는 인덱스를 알 수 있습니다.</p>



<p class="has-medium-font-size">이때, 벡터의 사이즈에서 해당 인덱스를 뺀 값이, 해당 값보다 큰 값들의 개수가 됩니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/04/image-19.png" alt="" class="wp-image-34368" width="505" height="711" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-19.png 483w, https://lycos7560.com/wp-content/uploads/2023/04/image-19-213x300.png 213w" sizes="(max-width: 505px) 100vw, 505px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-72412-%ec%88%9c%ec%9c%84-%ea%b2%80%ec%83%89-2021-kakao-blind-recruitment/34365/">Programmers 72412 순위 검색 [2021 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-72412-%ec%88%9c%ec%9c%84-%ea%b2%80%ec%83%89-2021-kakao-blind-recruitment/34365/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 60057 문자열 압축 [2020 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-60057-%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%95%95%ec%b6%95-2020-kakao-blind-recruitment/34347/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-60057-%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%95%95%ec%b6%95-2020-kakao-blind-recruitment/34347/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Thu, 20 Apr 2023 02:36:22 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2020 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[<string>]]></category>
		<category><![CDATA[2020 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[60057]]></category>
		<category><![CDATA[60057번]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 60057]]></category>
		<category><![CDATA[Programmers 60057 문자열 압축]]></category>
		<category><![CDATA[Programmers 60057번]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[공부]]></category>
		<category><![CDATA[기본]]></category>
		<category><![CDATA[기초]]></category>
		<category><![CDATA[문자열 압축]]></category>
		<category><![CDATA[알고리즘]]></category>
		<category><![CDATA[코딩테스트]]></category>
		<category><![CDATA[코테]]></category>
		<category><![CDATA[프로그래머스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=34347</guid>

					<description><![CDATA[<p>Programmers 60057번 '문자열 압축' 문제에 대한 글입니다. (This article is about the 'string compression' problem in Programmers 60057. [2020 KAKAO BLIND RECRUITMENT])</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-60057-%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%95%95%ec%b6%95-2020-kakao-blind-recruitment/34347/">Programmers 60057 문자열 압축 [2020 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-54756f60      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차 테이블						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#문자열-압축" class="uagb-toc-link__trigger">문자열 압축</a><li class="uagb-toc__list"><a href="#통과된-코드" class="uagb-toc-link__trigger">통과된 코드</a></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h1 class="wp-block-heading">문자열 압축</h1>



<p class="has-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/60057" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/60057</a></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">데이터 처리 전문가가 되고 싶은&nbsp;<strong>&#8220;어피치&#8221;</strong>는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. </p>



<p class="has-medium-font-size">최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, </p>



<p class="has-medium-font-size">문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 </p>



<p class="has-medium-font-size">더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다.</p>



<p class="has-medium-font-size">간단한 예로 &#8220;aabbaccc&#8221;의 경우 &#8220;2a2ba3c&#8221;(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, </p>



<p class="has-medium-font-size">이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. </p>



<p class="has-medium-font-size">예를 들면, &#8220;abcabcdede&#8221;와 같은 문자열은 전혀 압축되지 않습니다. </p>



<p class="has-medium-font-size">&#8220;어피치&#8221;는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라서 압축하여 </p>



<p class="has-medium-font-size">더 짧은 문자열로 표현할 수 있는지 방법을 찾아보려고 합니다.</p>



<p class="has-medium-font-size">예를 들어, &#8220;ababcdcdababcdcd&#8221;의 경우 문자를 1개 단위로 자르면 전혀 압축되지 않지만,</p>



<p class="has-medium-font-size"> 2개 단위로 잘라서 압축한다면 &#8220;2ab2cd2ab2cd&#8221;로 표현할 수 있습니다. </p>



<p class="has-medium-font-size">다른 방법으로 8개 단위로 잘라서 압축한다면 &#8220;2ababcdcd&#8221;로 표현할 수 있으며, </p>



<p class="has-medium-font-size">이때가 가장 짧게 압축하여 표현할 수 있는 방법입니다.</p>



<p class="has-medium-font-size">다른 예로, &#8220;abcabcdede&#8221;와 같은 경우, 문자를 2개 단위로 잘라서 압축하면 &#8220;abcabc2de&#8221;가 되지만, </p>



<p class="has-medium-font-size">3개 단위로 자른다면 &#8220;2abcdede&#8221;가 되어 3개 단위가 가장 짧은 압축 방법이 됩니다. </p>



<p class="has-medium-font-size">이때 3개 단위로 자르고 마지막에 남는 문자열은 그대로 붙여주면 됩니다.</p>



<p class="has-medium-font-size">압축할 문자열 s가 매개변수로 주어질 때, </p>



<p class="has-medium-font-size">위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 </p>



<p class="has-medium-font-size">표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성해주세요.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">제한사항</h3>



<p class="has-medium-font-size">s의 길이는 1 이상 1,000 이하입니다.</p>



<p class="has-medium-font-size">s는 알파벳 소문자로만 이루어져 있습니다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">입출력 예</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">s</th><th class="has-text-align-left" data-align="left">result</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left"><code>"aabbaccc"</code></td><td class="has-text-align-left" data-align="left">7</td></tr><tr><td class="has-text-align-left" data-align="left"><code>"ababcdcdababcdcd"</code></td><td class="has-text-align-left" data-align="left">9</td></tr><tr><td class="has-text-align-left" data-align="left"><code>"abcabcdede"</code></td><td class="has-text-align-left" data-align="left">8</td></tr><tr><td class="has-text-align-left" data-align="left"><code>"abcabcabcabcdededededede"</code></td><td class="has-text-align-left" data-align="left">14</td></tr><tr><td class="has-text-align-left" data-align="left"><code>"xababcdcdababcdcd"</code></td><td class="has-text-align-left" data-align="left">17</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">입출력 예에 대한 설명</h3>



<p class="has-medium-font-size"><strong>입출력 예 #1</strong></p>



<p>문자열을 1개 단위로 잘라 압축했을 때 가장 짧습니다.</p>



<p class="has-medium-font-size"><strong>입출력 예 #2</strong></p>



<p>문자열을 8개 단위로 잘라 압축했을 때 가장 짧습니다.</p>



<p class="has-medium-font-size"><strong>입출력 예 #3</strong></p>



<p>문자열을 3개 단위로 잘라 압축했을 때 가장 짧습니다.</p>



<p class="has-medium-font-size"><strong>입출력 예 #4</strong></p>



<p>문자열을 2개 단위로 자르면 &#8220;abcabcabcabc6de&#8221; 가 됩니다.<br>문자열을 3개 단위로 자르면 &#8220;4abcdededededede&#8221; 가 됩니다.<br>문자열을 4개 단위로 자르면 &#8220;abcabcabcabc3dede&#8221; 가 됩니다.<br>문자열을 6개 단위로 자를 경우 &#8220;2abcabc2dedede&#8221;가 되며, 이때의 길이가 14로 가장 짧습니다.</p>



<p class="has-medium-font-size"><strong>입출력 예 #5</strong></p>



<p>문자열은 제일 앞부터 정해진 길이만큼 잘라야 합니다.<br>따라서 주어진 문자열을 x / ababcdcd / ababcdcd 로 자르는 것은 불가능 합니다.<br>이 경우 어떻게 문자열을 잘라도 압축되지 않으므로 가장 짧은 길이는 17이 됩니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h1 class="wp-block-heading">통과된 코드</h1>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#include &lt;vector>
#include &lt;string>
using namespace std;
int solution(string s)
{
	if (s.length() == 1) return 1; // 길이 '1' 예외 처리
	int answer = INT32_MAX;
	for (int i = 1; i &lt;= s.length() / 2; i++) {
		vector&lt;string> _ResV;
		int _AnsT = 0;
		for (int j = 0; ; j += i) {
			if (j + i > s.length()) {
				_AnsT = s.length() - j;
				break;
			}
			string _Temp = s.substr(j, i);
			_ResV.push_back(_Temp);
		}
		string _DupStr = "";
		int _DupInt = 1;
		for (int i = 0; i &lt; _ResV.size(); i++) {
			if (_ResV[i] == _DupStr) _DupInt++;	
			else {
				_AnsT += _DupStr.size();
				if (_DupInt > 1) _AnsT += to_string(_DupInt).length();
				_DupStr = _ResV[i];
				_DupInt = 1;
			}
		}
		_AnsT += _DupStr.size();
		if (_DupInt > 1) _AnsT += to_string(_DupInt).length();
		answer = min(answer, _AnsT);
	}

	return answer;
}</pre>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="656" height="736" src="https://lycos7560.com/wp-content/uploads/2023/04/image-16.png" alt="" class="wp-image-34350" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-16.png 656w, https://lycos7560.com/wp-content/uploads/2023/04/image-16-267x300.png 267w" sizes="(max-width: 656px) 100vw, 656px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-60057-%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%95%95%ec%b6%95-2020-kakao-blind-recruitment/34347/">Programmers 60057 문자열 압축 [2020 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-60057-%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%95%95%ec%b6%95-2020-kakao-blind-recruitment/34347/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
