<?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/tag/programmers/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>생각의 흐름을 타고 다니며 만드는 블로그</description>
	<lastBuildDate>Tue, 04 Jul 2023 06:13:20 +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 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 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>
		<item>
		<title>Programmers 60063 블록 이동하기 [2020 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-60063-%eb%b8%94%eb%a1%9d-%ec%9d%b4%eb%8f%99%ed%95%98%ea%b8%b0-2020-kakao-blind-recruitment/34310/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-60063-%eb%b8%94%eb%a1%9d-%ec%9d%b4%eb%8f%99%ed%95%98%ea%b8%b0-2020-kakao-blind-recruitment/34310/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Fri, 14 Apr 2023 12:20:12 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2020 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2020 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[60063]]></category>
		<category><![CDATA[60063번]]></category>
		<category><![CDATA[BFS]]></category>
		<category><![CDATA[brute force]]></category>
		<category><![CDATA[BruteForce]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 60063]]></category>
		<category><![CDATA[Programmers 60063번]]></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>
		<guid isPermaLink="false">https://lycos7560.com/?p=34310</guid>

					<description><![CDATA[<p>Programmers 60063번 '블록 이동하기' 문제에 대한 글입니다. BFS 탐색 및 브루트포스 알고리즘을 이용하여 해결하였습니다. This article is about Programmers 60063 'Move Block' It was solved using the BFS search and Bruteforce algorithm. [2020 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-60063-%eb%b8%94%eb%a1%9d-%ec%9d%b4%eb%8f%99%ed%95%98%ea%b8%b0-2020-kakao-blind-recruitment/34310/">Programmers 60063 블록 이동하기 [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-52368673      "
					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><a href="https://school.programmers.co.kr/learn/courses/30/lessons/60063" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/lear</a><a href="https://school.programmers.co.kr/learn/courses/30/lessons/60063">n/courses/30/lessons/60063</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>는 한 달 앞으로 다가온 &#8220;카카오배 로봇경진대회&#8221;에 출품할&nbsp;<strong>로봇</strong>을 준비하고 있습니다. </p>



<p class="has-medium-font-size">준비 중인 로봇은&nbsp;<strong><code>2 x 1</code></strong>&nbsp;크기의 로봇으로 &#8220;무지&#8221;는&nbsp;<strong>&#8220;0&#8221;</strong>과&nbsp;<strong>&#8220;1&#8221;</strong>로 이루어진&nbsp;<strong><code>N x N</code></strong>&nbsp;크기의 지도에서&nbsp;<strong><code>2 x 1</code></strong>&nbsp;크기인 로봇을 움직여&nbsp;</p>



<p class="has-medium-font-size"><strong>(N, N)</strong>&nbsp;위치까지 이동 할 수 있도록 프로그래밍을 하려고 합니다. 로봇이 이동하는 지도는 가장 왼쪽, 상단의 좌표를&nbsp;<strong>(1, 1)</strong>로 하며 </p>



<p class="has-medium-font-size">지도 내에 표시된 숫자&nbsp;<strong>&#8220;0&#8221;</strong>은 빈칸을&nbsp;<strong>&#8220;1&#8221;</strong>은 벽을 나타냅니다. 로봇은 벽이 있는 칸 또는 지도 밖으로는 이동할 수 없습니다. </p>



<p class="has-medium-font-size">로봇은 처음에 아래 그림과 같이 좌표&nbsp;<strong>(1, 1)</strong>&nbsp;위치에서 가로방향으로 놓여있는 상태로 시작하며, 앞뒤 구분없이 움직일 수 있습니다.</p>



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



<figure class="wp-block-image size-full"><img decoding="async" width="783" height="787" src="https://lycos7560.com/wp-content/uploads/2023/04/image-10.png" alt="" class="wp-image-34312" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-10.png 783w, https://lycos7560.com/wp-content/uploads/2023/04/image-10-298x300.png 298w, https://lycos7560.com/wp-content/uploads/2023/04/image-10-150x150.png 150w, https://lycos7560.com/wp-content/uploads/2023/04/image-10-768x772.png 768w" sizes="(max-width: 783px) 100vw, 783px" /></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">예를 들어, 위 그림에서 오른쪽으로 한 칸 이동한다면&nbsp;<strong>(1, 2), (1, 3)</strong>&nbsp;두 칸을 차지하게 되며, </p>



<p class="has-medium-font-size">아래로 이동한다면&nbsp;<strong>(2, 1), (2, 2)</strong>&nbsp;두 칸을 차지하게 됩니다. </p>



<p class="has-medium-font-size">로봇이 차지하는 두 칸 중 어느 한 칸이라도&nbsp;<strong>(N, N)</strong>&nbsp;위치에 도착하면 됩니다.</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="788" height="789" src="https://lycos7560.com/wp-content/uploads/2023/04/image-11.jpg" alt="" class="wp-image-34313" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-11.jpg 788w, https://lycos7560.com/wp-content/uploads/2023/04/image-11-300x300.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/04/image-11-150x150.jpg 150w, https://lycos7560.com/wp-content/uploads/2023/04/image-11-768x769.jpg 768w" sizes="(max-width: 788px) 100vw, 788px" /></figure>



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



<p class="has-medium-font-size">위 그림과 같이 로봇은 90도씩 회전할 수 있습니다. </p>



<p class="has-medium-font-size">단, 로봇이 차지하는 두 칸 중, 어느 칸이든 축이 될 수 있지만, </p>



<p class="has-medium-font-size">회전하는 방향(축이 되는 칸으로부터 대각선 방향에 있는 칸)에는 벽이 없어야 합니다. </p>



<p class="has-medium-font-size">로봇이 한 칸 이동하거나 90도 회전하는 데는 걸리는 시간은 정확히 1초 입니다.</p>



<p class="has-medium-font-size"><strong>&#8220;0&#8221;</strong>과&nbsp;<strong>&#8220;1&#8221;</strong>로 이루어진 지도인 board가 주어질 때, </p>



<p class="has-medium-font-size">로봇이&nbsp;<strong>(N, N)</strong>&nbsp;위치까지 이동하는데 필요한 최소 시간을 return 하도록 solution 함수를 완성해주세요.</p>



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



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



<p class="has-small-font-size">board의 한 변의 길이는 5 이상 100 이하입니다.</p>



<p class="has-small-font-size">board의 원소는 0 또는 1입니다.</p>



<p class="has-small-font-size">로봇이 처음에 놓여 있는 칸 (1, 1), (1, 2)는 항상 0으로 주어집니다.</p>



<p class="has-small-font-size">로봇이 항상 목적지에 도착할 수 있는 경우만 입력으로 주어집니다.</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">board</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, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]]</td><td class="has-text-align-left" data-align="left">7</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">문제에 주어진 예시와 같습니다.</p>



<p class="has-medium-font-size">로봇이 오른쪽으로 한 칸 이동 후, (1, 3) 칸을 축으로 반시계 방향으로 90도 회전합니다. </p>



<p class="has-medium-font-size">다시, 아래쪽으로 3칸 이동하면 로봇은 (4, 3), (5, 3) 두 칸을 차지하게 됩니다. </p>



<p class="has-medium-font-size">이제 (5, 3)을 축으로 시계 방향으로 90도 회전 후, 오른쪽으로 한 칸 이동하면 (N, N)에 도착합니다. </p>



<p class="has-medium-font-size">따라서 목적지에 도달하기까지 최소 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>



<figure class="wp-block-image size-full"><img decoding="async" width="1125" height="1280" src="https://lycos7560.com/wp-content/uploads/2023/04/Notes_230414_203835-2-2.jpg" alt="" class="wp-image-34336" srcset="https://lycos7560.com/wp-content/uploads/2023/04/Notes_230414_203835-2-2.jpg 1125w, https://lycos7560.com/wp-content/uploads/2023/04/Notes_230414_203835-2-2-264x300.jpg 264w, https://lycos7560.com/wp-content/uploads/2023/04/Notes_230414_203835-2-2-768x874.jpg 768w" sizes="(max-width: 1125px) 100vw, 1125px" /></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="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;queue>
#include &lt;tuple>

using namespace std;

// 탐색하는 방향 설정 =>  상, 하 ,좌 ,우
int dxdy[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };

bool _MapArr[101][101][2];

// 로봇의 위치 및 현재 시간
tuple&lt;int, int, int, int, int> _RobotPos;
// bfs 탐색을 위한 q
queue&lt;tuple&lt;int, int, int, int, int>> _RobotPosQ;

int solution(vector&lt;vector&lt;int>> board) {
    int answer = 0;
    int _MapMax = board.size();
    pair&lt;int, int> _goal = make_pair(_MapMax - 1, _MapMax - 1); // 목표를 설정

    _RobotPos = make_tuple(0, 0, 0, 1, 0); // 로봇의 위치 초기값
    _RobotPosQ.push(_RobotPos); // 로봇의 시작를 큐에 넣기
    _MapArr[0][0][0] = true; // 방문 마킹
    _MapArr[0][1][0] = true;
    // board 는 0,0 에서 시작
    // 마킹은 1,1에서 시작


    // bfs 탐색 시작
    while (_RobotPosQ.size() > 0) {
        _RobotPos = _RobotPosQ.front();
        _RobotPosQ.pop();
        pair&lt;int, int> _CntPosOne = make_pair(get&lt;0>(_RobotPos), get&lt;1>(_RobotPos)); // 로봇의 현재 x, y 위치 1
        pair&lt;int, int> _CntPosTwo = make_pair(get&lt;2>(_RobotPos), get&lt;3>(_RobotPos)); // 로봇의 현재 x, y 위치 2
        int _cnttime = get&lt;4>(_RobotPos);
        if (_CntPosOne == _goal || _CntPosTwo == _goal) {
            answer = _cnttime;
            break;
        }
        bool _robotstatus; // true 세로, false 가로
        // 상 하 좌 우를 탐색
        for (int i = 0; i &lt; 4; i++) {

            pair&lt;int, int> _TempPosOne, _TempPosTwo;
            _TempPosOne.first = _CntPosOne.first + dxdy[i][0];
            _TempPosOne.second = _CntPosOne.second + dxdy[i][1];
            _TempPosTwo.first = _CntPosTwo.first + dxdy[i][0];
            _TempPosTwo.second = _CntPosTwo.second + dxdy[i][1];

            // 가로 세로 비교
            if (_CntPosOne.first + 1 == _CntPosTwo.first || _CntPosOne.first - 1 == _CntPosTwo.first) _robotstatus = true; // 세로
            else _robotstatus = false;

            // 벽이라면 넘어간다.
            if (_TempPosOne.first &lt; 0 || _TempPosOne.first >= _MapMax || _TempPosOne.second &lt; 0 || _TempPosOne.second >= _MapMax) continue;
            if (_TempPosTwo.first &lt; 0 || _TempPosTwo.first >= _MapMax || _TempPosTwo.second &lt; 0 || _TempPosTwo.second >= _MapMax) continue;
            if (board[_TempPosOne.first][_TempPosOne.second] == 1 || board[_TempPosTwo.first][_TempPosTwo.second] == 1) continue;

            // 두 부분이 방문한 적이 있다면 넘어간다.
            if (_MapArr[_TempPosOne.first][_TempPosOne.second][_robotstatus] == true &amp;&amp; _MapArr[_TempPosTwo.first][_TempPosTwo.second][_robotstatus] == true) continue;

            _RobotPos = make_tuple(_TempPosOne.first, _TempPosOne.second, _TempPosTwo.first, _TempPosTwo.second, _cnttime + 1);
            _RobotPosQ.push(_RobotPos); // 로봇의 시작를 큐에 넣기
            _MapArr[_TempPosOne.first][_TempPosOne.second][_robotstatus] = true; // 방문 마킹
            _MapArr[_TempPosTwo.first][_TempPosTwo.second][_robotstatus] = true;

        }

        // 방향 전환
        if (!_robotstatus) { // 가로
            if (_CntPosOne.first + 1 &lt; _MapMax &amp;&amp; board[_CntPosOne.first + 1][_CntPosOne.second] != 1 &amp;&amp; board[_CntPosTwo.first + 1][_CntPosTwo.second] != 1) {
                if (_MapArr[_CntPosTwo.first + 1][_CntPosTwo.second][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosTwo.first + 1, _CntPosTwo.second, _CntPosTwo.first, _CntPosTwo.second, _cnttime + 1);
                    _MapArr[_CntPosTwo.first + 1][_CntPosTwo.second][!_robotstatus] = true;
                    _MapArr[_CntPosTwo.first][_CntPosTwo.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }
            if (_CntPosOne.first - 1 >= 0 &amp;&amp; board[_CntPosOne.first - 1][_CntPosOne.second] != 1 &amp;&amp; board[_CntPosTwo.first - 1][_CntPosTwo.second] != 1) {
                if (_MapArr[_CntPosTwo.first - 1][_CntPosTwo.second][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosTwo.first - 1, _CntPosTwo.second, _CntPosTwo.first, _CntPosTwo.second, _cnttime + 1);
                    _MapArr[_CntPosTwo.first - 1][_CntPosTwo.second][!_robotstatus] = true;
                    _MapArr[_CntPosTwo.first][_CntPosTwo.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }
            if (_CntPosTwo.first + 1 &lt; _MapMax &amp;&amp; board[_CntPosTwo.first + 1][_CntPosTwo.second] != 1 &amp;&amp; board[_CntPosOne.first + 1][_CntPosOne.second] != 1) {
                if (_MapArr[_CntPosOne.first + 1][_CntPosOne.second][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosOne.first + 1, _CntPosOne.second, _CntPosOne.first, _CntPosOne.second, _cnttime + 1);
                    _MapArr[_CntPosOne.first + 1][_CntPosOne.second][!_robotstatus] = true;
                    _MapArr[_CntPosOne.first][_CntPosOne.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }
            if (_CntPosTwo.first - 1 >= 0 &amp;&amp; board[_CntPosTwo.first - 1][_CntPosTwo.second] != 1 &amp;&amp; board[_CntPosOne.first - 1][_CntPosOne.second] != 1) {
                if (_MapArr[_CntPosOne.first - 1][_CntPosOne.second][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosOne.first - 1, _CntPosOne.second, _CntPosOne.first, _CntPosOne.second, _cnttime + 1);
                    _MapArr[_CntPosOne.first - 1][_CntPosOne.second][!_robotstatus] = true;
                    _MapArr[_CntPosOne.first][_CntPosOne.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }
        }
        else {
            if (_CntPosOne.second + 1 &lt; _MapMax &amp;&amp; board[_CntPosOne.first][_CntPosOne.second + 1] != 1 &amp;&amp; board[_CntPosTwo.first][_CntPosTwo.second + 1] != 1) {
                if (_MapArr[_CntPosTwo.first][_CntPosTwo.second + 1][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosTwo.first, _CntPosTwo.second + 1, _CntPosTwo.first, _CntPosTwo.second, _cnttime + 1);
                    _MapArr[_CntPosTwo.first][_CntPosTwo.second + 1][!_robotstatus] = true;
                    _MapArr[_CntPosTwo.first][_CntPosTwo.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }
            if (_CntPosOne.second - 1 >= 0 &amp;&amp; board[_CntPosOne.first][_CntPosOne.second - 1] != 1 &amp;&amp; board[_CntPosTwo.first][_CntPosTwo.second - 1] != 1) {
                if (_MapArr[_CntPosTwo.first][_CntPosTwo.second - 1][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosTwo.first, _CntPosTwo.second - 1, _CntPosTwo.first, _CntPosTwo.second, _cnttime + 1);
                    _MapArr[_CntPosTwo.first][_CntPosTwo.second - 1][!_robotstatus] = true;
                    _MapArr[_CntPosTwo.first][_CntPosTwo.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }
            if (_CntPosTwo.second + 1 &lt; _MapMax &amp;&amp; board[_CntPosTwo.first][_CntPosTwo.second + 1] != 1 &amp;&amp; board[_CntPosOne.first][_CntPosOne.second + 1] != 1) {
                if (_MapArr[_CntPosOne.first][_CntPosOne.second + 1][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosOne.first, _CntPosOne.second + 1, _CntPosOne.first, _CntPosOne.second, _cnttime + 1);
                    _MapArr[_CntPosOne.first][_CntPosOne.second + 1][!_robotstatus] = true;
                    _MapArr[_CntPosOne.first][_CntPosOne.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }
            if (_CntPosTwo.second - 1 >= 0 &amp;&amp; board[_CntPosTwo.first][_CntPosTwo.second - 1] != 1 &amp;&amp; board[_CntPosOne.first][_CntPosOne.second - 1] != 1) {
                if (_MapArr[_CntPosOne.first][_CntPosOne.second - 1][!_robotstatus] == false) {
                    _RobotPos = make_tuple(_CntPosOne.first, _CntPosOne.second - 1, _CntPosOne.first, _CntPosOne.second, _cnttime + 1);
                    _MapArr[_CntPosOne.first][_CntPosOne.second - 1][!_robotstatus] = true;
                    _MapArr[_CntPosOne.first][_CntPosOne.second][!_robotstatus] = true;
                    _RobotPosQ.push(_RobotPos);
                }
            }

        }

    }

    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="686" height="429" src="https://lycos7560.com/wp-content/uploads/2023/04/image-12.png" alt="" class="wp-image-34318" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-12.png 686w, https://lycos7560.com/wp-content/uploads/2023/04/image-12-300x188.png 300w" sizes="(max-width: 686px) 100vw, 686px" /></figure>



<div style="height:50px" 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-60063-%eb%b8%94%eb%a1%9d-%ec%9d%b4%eb%8f%99%ed%95%98%ea%b8%b0-2020-kakao-blind-recruitment/34310/">Programmers 60063 블록 이동하기 [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-60063-%eb%b8%94%eb%a1%9d-%ec%9d%b4%eb%8f%99%ed%95%98%ea%b8%b0-2020-kakao-blind-recruitment/34310/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 42892 길 찾기 게임 [2019 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-42892-%ea%b8%b8-%ec%b0%be%ea%b8%b0-%ea%b2%8c%ec%9e%84-2019-kakao-blind-recruitment/34274/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-42892-%ea%b8%b8-%ec%b0%be%ea%b8%b0-%ea%b2%8c%ec%9e%84-2019-kakao-blind-recruitment/34274/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sun, 02 Apr 2023 06:04:50 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2019 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2019 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[42892]]></category>
		<category><![CDATA[42892번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 42892]]></category>
		<category><![CDATA[Programmers 42892번]]></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=34274</guid>

					<description><![CDATA[<p>Programmers 42892번 '길 찾기 게임' 문제에 대한 글입니다. [2019 KAKAO BLIND RECRUITMENT] (This article is about the problem of 'Roading Game' in Programmers 42892)</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-42892-%ea%b8%b8-%ec%b0%be%ea%b8%b0-%ea%b2%8c%ec%9e%84-2019-kakao-blind-recruitment/34274/">Programmers 42892 길 찾기 게임 [2019 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-2df556a1      "
					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-medium-font-size"><a href="https://school.programmers.co.kr/learn/courses/30/lessons/42892" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/42892</a></p>



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



<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>



<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>



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



<p>트리를 구성하는 모든 노드의 x, y 좌표 값은 정수이다.</p>



<p>모든 노드는 서로 다른 x값을 가진다.</p>



<p>같은 레벨(level)에 있는 노드는 같은 y 좌표를 가진다.</p>



<p>자식 노드의 y 값은 항상 부모 노드보다 작다.</p>



<p>임의의 노드 V의 왼쪽 서브 트리(left subtree)에 있는 모든 노드의 x값은 V의 x값보다 작다.</p>



<p>임의의 노드 V의 오른쪽 서브 트리(right subtree)에 있는 모든 노드의 x값은 V의 x값보다 크다.</p>



<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">라이언의 규칙에 맞게 이진트리의 노드만 좌표 평면에 그리면 다음과 같다. </p>



<p class="has-medium-font-size">(이진트리의 각 노드에는 1부터 N까지 순서대로 번호가 붙어있다.)</p>



<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/04/image-2.png" alt="" class="wp-image-34276" width="660" height="323" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-2.png 603w, https://lycos7560.com/wp-content/uploads/2023/04/image-2-300x147.png 300w" sizes="(max-width: 660px) 100vw, 660px" /></figure>



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



<p class="has-medium-font-size">이제, 노드를 잇는 간선(edge)을 모두 그리면 아래와 같은 모양이 된다.</p>



<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/04/image-3.png" alt="" class="wp-image-34277" width="638" height="311" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-3.png 607w, https://lycos7560.com/wp-content/uploads/2023/04/image-3-300x146.png 300w" sizes="(max-width: 638px) 100vw, 638px" /></figure>



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



<p class="has-medium-font-size">위 이진트리에서 전위 순회(preorder), 후위 순회(postorder)를 한 결과는 다음과 같고, </p>



<p class="has-medium-font-size">이것은 각 팀이 방문해야 할 순서를 의미한다.</p>



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



<p class="has-small-font-size">전위 순회 : 7, 4, 6, 9, 1, 8, 5, 2, 3</p>



<p class="has-small-font-size">후위 순회 : 9, 6, 5, 8, 1, 4, 3, 2, 7</p>



<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">그러나 여전히 문제는 남아있다. 노드의 수가 예시처럼 적다면 쉽게 해결할 수 있겠지만,</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">이진트리를 구성하는 노드들의 좌표가 담긴 배열 nodeinfo가 매개변수로 주어질 때,</p>



<p class="has-medium-font-size">노드들로 구성된 이진트리를 전위 순회, 후위 순회한 결과를 </p>



<p class="has-medium-font-size">2차원 배열에 순서대로 담아 return 하도록 solution 함수를 완성하자.</p>



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



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



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



<ul class="wp-block-list">
<li>nodeinfo는 이진트리를 구성하는 각 노드의 좌표가 1번 노드부터 순서대로 들어있는 2차원 배열이다.
<ul class="wp-block-list">
<li>nodeinfo의 길이는&nbsp;<code>1</code>&nbsp;이상&nbsp;<code>10,000</code>&nbsp;이하이다.</li>



<li>nodeinfo[i] 는 i + 1번 노드의 좌표이며, [x축 좌표, y축 좌표] 순으로 들어있다.</li>



<li>모든 노드의 좌표 값은&nbsp;<code>0</code>&nbsp;이상&nbsp;<code>100,000</code>&nbsp;이하인 정수이다.</li>



<li>트리의 깊이가&nbsp;<code>1,000</code>&nbsp;이하인 경우만 입력으로 주어진다.</li>



<li>모든 노드의 좌표는 문제에 주어진 규칙을 따르며, 잘못된 노드 위치가 주어지는 경우는 없다.</li>
</ul>
</li>
</ul>



<div style="height:50px" 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">nodeinfo</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,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]]</td><td class="has-text-align-left" data-align="left">[[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]]</td></tr></tbody></table></figure>



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



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



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



<p class="has-medium-font-size">문제에 주어진 예시와 같다.</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 has-large-font-size">통과된 코드</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;algorithm>

using namespace std;

vector&lt;int> PreorderAnswer;
vector&lt;int> PostorderAnswer;

// 노드를 만든다.
struct _Node
{
    int _Number; // 입력받은 순서를 저장
    pair&lt;int, int> _data; // x, y 값을 저장
    struct _Node* _LeftNode;
    struct _Node* _RightNode;
    
    _Node(int x, int y, int n) {
        _Number = n; 
        _data = make_pair(x, y); 
        _LeftNode = NULL; // 기본 Null
        _RightNode = NULL; 

    };
};

// 트리를 생성하는 함수
void PushNode(_Node&amp; p_ParentNode, _Node&amp; p_Node)
{
    if (p_ParentNode._data.first > p_Node._data.first) {   
        if (p_ParentNode._LeftNode != NULL) PushNode(*p_ParentNode._LeftNode, p_Node);    
        else p_ParentNode._LeftNode = &amp;p_Node;
    }
    else {
        if (p_ParentNode._RightNode != NULL) PushNode(*p_ParentNode._RightNode, p_Node);
        else p_ParentNode._RightNode = &amp;p_Node;
    }
}

// 노드를 비교하고 정렬합니다. (Y값을 기준으로 오름차순으로 정렬합니다.)
bool Compare(_Node&amp; p_A_Node, _Node&amp; p_B_Node)
{
    return p_A_Node._data.second > p_B_Node._data.second;
}

// 전위 순회
void Preorder_Traverse(_Node* p_Node) {
    if (p_Node != NULL) {
        PreorderAnswer.push_back(p_Node->_Number);
        Preorder_Traverse(p_Node->_LeftNode);
        Preorder_Traverse(p_Node->_RightNode);
    }
}

// 후위 순회
void Postorder_Traverse(_Node* p_Node) {
    if (p_Node != NULL) {
        Postorder_Traverse(p_Node->_LeftNode);
        Postorder_Traverse(p_Node->_RightNode);
        PostorderAnswer.push_back(p_Node->_Number);
    }
}

vector&lt;vector&lt;int>> solution(vector&lt;vector&lt;int>> nodeinfo) {
    vector&lt;_Node> _NodeVector; 
    for (int i = 0; i &lt; nodeinfo.size(); i++) { // 정보를 받아서 노드를 생성하고 저장
        _Node node = { nodeinfo[i][0], nodeinfo[i][1], i + 1 };
        _NodeVector.push_back(node);
    }
  
    sort(_NodeVector.begin(), _NodeVector.end(), Compare); // Y값으로 정렬

    // Y값이 가장 높은 노드를 Root로 트리를 만든다. 
    for (int i = 1; i &lt; _NodeVector.size(); i++) 
        PushNode(*_NodeVector.begin(), _NodeVector[i]); 

    Preorder_Traverse(&amp;_NodeVector[0]);
    Postorder_Traverse(&amp;_NodeVector[0]);

    vector&lt;vector&lt;int>> answer;

    answer.push_back(PreorderAnswer); // answer[0]
    answer.push_back(PostorderAnswer); // answer[1]

    return answer;
}</pre>



<div style="height:50px" 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-4.png" alt="" class="wp-image-34279" width="538" height="890" srcset="https://lycos7560.com/wp-content/uploads/2023/04/image-4.png 492w, https://lycos7560.com/wp-content/uploads/2023/04/image-4-181x300.png 181w" sizes="(max-width: 538px) 100vw, 538px" /></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-42892-%ea%b8%b8-%ec%b0%be%ea%b8%b0-%ea%b2%8c%ec%9e%84-2019-kakao-blind-recruitment/34274/">Programmers 42892 길 찾기 게임 [2019 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-42892-%ea%b8%b8-%ec%b0%be%ea%b8%b0-%ea%b2%8c%ec%9e%84-2019-kakao-blind-recruitment/34274/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmers 42893 매칭 점수 [2019 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-42893-%eb%a7%a4%ec%b9%ad-%ec%a0%90%ec%88%98-2019-kakao-blind-recruitment/34238/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-42893-%eb%a7%a4%ec%b9%ad-%ec%a0%90%ec%88%98-2019-kakao-blind-recruitment/34238/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Tue, 28 Mar 2023 05:36:29 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[2019 KAKAO BLIND RECRUITMENT]]]></category>
		<category><![CDATA[2019 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[42893]]></category>
		<category><![CDATA[42893번]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Programmers 42893]]></category>
		<category><![CDATA[Programmers 42893번]]></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=34238</guid>

					<description><![CDATA[<p>Programmers 42893번 '매칭 점수' 문제에 대한 글입니다. (This article is about the problem of 'Matching Score' in Programmers 42893. ) [2019 KAKAO BLIND RECRUITMENT]</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-42893-%eb%a7%a4%ec%b9%ad-%ec%a0%90%ec%88%98-2019-kakao-blind-recruitment/34238/">Programmers 42893 매칭 점수 [2019 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-15676d11      "
					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/42893" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/42893</a></p>



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



<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>



<p class="has-medium-font-size">아래와 같은 규칙으로 검색어에 대한 웹페이지의 매칭점수를 계산 하는 것이었다.</p>



<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">한 웹페이지의 기본점수는 해당 웹페이지의 텍스트 중, 검색어가 등장하는 횟수이다. (대소문자 무시)</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">예를 들어, 다음과 같이 A, B, C 세 개의 웹페이지가 있고, 검색어가 hi라고 하자.</p>



<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/03/image-78.png" alt="" class="wp-image-34240" width="598" height="600" srcset="https://lycos7560.com/wp-content/uploads/2023/03/image-78.png 690w, https://lycos7560.com/wp-content/uploads/2023/03/image-78-300x300.png 300w, https://lycos7560.com/wp-content/uploads/2023/03/image-78-150x150.png 150w" sizes="(max-width: 598px) 100vw, 598px" /></figure>



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



<p class="has-medium-font-size">이때 A 웹페이지의 매칭점수는 다음과 같이 계산할 수 있다.</p>



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



<ul class="wp-block-list">
<li>기본 점수는 각 웹페이지에서 hi가 등장한 횟수이다.
<ul class="wp-block-list">
<li>A,B,C 웹페이지의 기본점수는 각각 1점, 4점, 9점이다.</li>
</ul>
</li>



<li>외부 링크수는 다른 웹페이지로 링크가 걸린 개수이다.
<ul class="wp-block-list">
<li>A,B,C 웹페이지의 외부 링크 수는 각각 1점, 2점, 3점이다.</li>
</ul>
</li>



<li>A 웹페이지로 링크가 걸린 페이지는 B와 C가 있다.
<ul class="wp-block-list">
<li>A 웹페이지의 링크점수는 B의 링크점수 2점(4 ÷ 2)과 C의 링크점수 3점(9 ÷ 3)을 더한 5점이 된다.</li>
</ul>
</li>



<li>그러므로, A 웹페이지의 매칭점수는 기본점수 1점 + 링크점수 5점 = 6점이 된다.</li>
</ul>



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



<p class="has-medium-font-size">검색어 word와 웹페이지의 HTML 목록인 pages가 주어졌을 때, </p>



<p class="has-medium-font-size">매칭점수가 가장 높은 웹페이지의 index를 구하라. </p>



<p class="has-medium-font-size">만약 그런 웹페이지가 여러 개라면 그중 번호가 가장 작은 것을 구하라.</p>



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



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



<ul class="wp-block-list">
<li>pages는 HTML 형식의 웹페이지가 문자열 형태로 들어있는 배열이고, 길이는&nbsp;<code>1</code>&nbsp;이상&nbsp;<code>20</code>&nbsp;이하이다.</li>



<li>한 웹페이지 문자열의 길이는&nbsp;<code>1</code>&nbsp;이상&nbsp;<code>1,500</code>&nbsp;이하이다.</li>



<li>웹페이지의 index는 pages 배열의 index와 같으며 0부터 시작한다.</li>



<li>한 웹페이지의 url은 HTML의 태그 내에&nbsp;태그의 값으로 주어진다.
<ul class="wp-block-list">
<li>예를들어, 아래와 같은 meta tag가 있으면 이 웹페이지의 url은&nbsp;<code>https://careers.kakao.com/index</code>&nbsp;이다.</li>



<li><code>&lt;meta property="og:url" content="https://careers.kakao.com/index" /&gt;</code></li>
</ul>
</li>



<li>한 웹페이지에서 모든 외부 링크는&nbsp;<code>&lt;a href="https://careers.kakao.com/index"&gt;</code>의 형태를 가진다.
<ul class="wp-block-list">
<li><code>&lt;a&gt;</code>&nbsp;내에 다른 attribute가 주어지는 경우는 없으며 항상 href로 연결할 사이트의 url만 포함된다.</li>



<li>위의 경우에서 해당 웹페이지는&nbsp;<code>https://careers.kakao.com/index</code>&nbsp;로 외부링크를 가지고 있다고 볼 수 있다.</li>
</ul>
</li>



<li>모든 url은&nbsp;<code>https://</code>&nbsp;로만 시작한다.</li>



<li>검색어 word는 하나의 영어 단어로만 주어지며 알파벳 소문자와 대문자로만 이루어져 있다.</li>



<li>word의 길이는&nbsp;<code>1</code>&nbsp;이상&nbsp;<code>12</code>&nbsp;이하이다.</li>



<li>검색어를 찾을 때, 대소문자 구분은 무시하고 찾는다.
<ul class="wp-block-list">
<li>예를들어 검색어가 blind일 때, HTML 내에 Blind라는 단어가 있거나, BLIND라는 단어가 있으면 두 경우 모두 해당된다.</li>
</ul>
</li>



<li>검색어는 단어 단위로 비교하며, 단어와 완전히 일치하는 경우에만 기본 점수에 반영한다.
<ul class="wp-block-list">
<li>단어는 알파벳을 제외한 다른 모든 문자로 구분한다.</li>



<li>예를들어 검색어가 &#8220;aba&#8221; 일 때, &#8220;abab abababa&#8221;는 단어 단위로 일치하는게 없으니, 기본 점수는 0점이 된다.</li>



<li>만약 검색어가 &#8220;aba&#8221; 라면, &#8220;aba@aba aba&#8221;는 단어 단위로 세개가 일치하므로, 기본 점수는 3점이다.</li>
</ul>
</li>



<li>결과를 돌려줄때, 동일한 매칭점수를 가진 웹페이지가 여러 개라면 그중 index 번호가 가장 작은 것를 리턴한다
<ul class="wp-block-list">
<li>즉, 웹페이지가 세개이고, 각각 매칭점수가 3,1,3 이라면 제일 적은 index 번호인 0을 리턴하면 된다.</li>
</ul>
</li>
</ul>



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



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



<p class="has-medium-font-size">word : blind</p>



<p class="has-medium-font-size">pages :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["&lt;html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n&lt;head>\n  
&lt;meta charset=\"utf-8\">\n  
&lt;meta property=\"og:url\" content=\"https://a.com\"/>\n&lt;/head>  
\n&lt;body>\nBlind Lorem Blind ipsum dolor Blind test sit amet, consectetur adipiscing elit. 
\n&lt;a href=\"https://b.com\"> Link to b &lt;/a>\n&lt;/body>\n&lt;/html>", 
"&lt;html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n&lt;head>\n  
&lt;meta charset=\"utf-8\">\n  &lt;meta property=\"og:url\" content=\"https://b.com\"/>\n&lt;/head>  
\n&lt;body>\nSuspendisse potenti. Vivamus venenatis tellus non turpis bibendum, 
\n&lt;a href=\"https://a.com\"> Link to a &lt;/a>\nblind sed congue urna varius. 
Suspendisse feugiat nisl ligula, quis malesuada felis hendrerit ut.\n&lt;a href=\"https://c.com\"> 
Link to c &lt;/a>\n&lt;/body>\n&lt;/html>", "&lt;html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n&lt;head>\n  
&lt;meta charset=\"utf-8\">\n  &lt;meta property=\"og:url\" content=\"https://c.com\"/>\n&lt;/head>  
\n&lt;body>\nUt condimentum urna at felis sodales rutrum. Sed dapibus cursus diam, non interdum nulla tempor nec.
 Phasellus rutrum enim at orci consectetu blind\n&lt;a href=\"https://a.com\"> Link to a &lt;/a>\n&lt;/body>\n&lt;/html>"]
</pre>



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



<p class="has-medium-font-size">pages는 다음과 같이 3개의 웹페이지에 해당하는 HTML 문자열이 순서대로 들어있다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
  &lt;meta charset="utf-8">
  &lt;meta property="og:url" content="https://a.com"/>
&lt;/head>
&lt;body>
Blind Lorem Blind ipsum dolor Blind test sit amet, consectetur adipiscing elit. 
&lt;a href="https://b.com"> Link to b &lt;/a>
&lt;/body>
&lt;/html>
</pre>



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



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
  &lt;meta charset="utf-8">
  &lt;meta property="og:url" content="https://b.com"/>
&lt;/head>
&lt;body>
Suspendisse potenti. Vivamus venenatis tellus non turpis bibendum, 
&lt;a href="https://a.com"> Link to a &lt;/a>
blind sed congue urna varius. Suspendisse feugiat nisl ligula, quis malesuada felis hendrerit ut.
&lt;a href="https://c.com"> Link to c &lt;/a>
&lt;/body>
&lt;/html>
</pre>



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



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
  &lt;meta charset="utf-8">
  &lt;meta property="og:url" content="https://c.com"/>
&lt;/head>
&lt;body>
Ut condimentum urna at felis sodales rutrum. Sed dapibus cursus diam, non interdum nulla tempor nec. 
Phasellus rutrum enim at orci consectetu blind
&lt;a href="https://a.com"> Link to a &lt;/a>
&lt;/body>
&lt;/html>
</pre>



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



<p class="has-medium-font-size">위의 예를 가지고 각각의 점수를 계산해보자.</p>



<ul class="wp-block-list">
<li>기본점수 및 외부 링크수는 아래와 같다.
<ul class="wp-block-list">
<li>a.com의 기본점수는 3, 외부 링크 수는 1개</li>



<li>b.com의 기본점수는 1, 외부 링크 수는 2개</li>



<li>c.com의 기본점수는 1, 외부 링크 수는 1개</li>
</ul>
</li>



<li>링크점수는 아래와 같다.
<ul class="wp-block-list">
<li>a.com의 링크점수는 b.com으로부터 0.5점, c.com으로부터 1점</li>



<li>b.com의 링크점수는 a.com으로부터 3점</li>



<li>c.com의 링크점수는 b.com으로부터 0.5점</li>
</ul>
</li>



<li>각 웹 페이지의 매칭 점수는 다음과 같다.
<ul class="wp-block-list">
<li>a.com : 4.5 점</li>



<li>b.com : 4 점</li>



<li>c.com : 1.5 점</li>
</ul>
</li>
</ul>



<p class="has-medium-font-size">따라서 매칭점수가 제일 높은 첫번째 웹 페이지의 index인 0을 리턴 하면 된다.</p>



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



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



<p class="has-medium-font-size">word : Muzi</p>



<p class="has-medium-font-size">pages :</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">["&lt;html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n&lt;head>\n  
&lt;meta charset=\"utf-8\">\n  &lt;meta property=\"og:url\" content=\"https://careers.kakao.com/interview/list\"/>\n&lt;/head>  
\n&lt;body>\n&lt;a href=\"https://programmers.co.kr/learn/courses/4673\">&lt;/a>#!MuziMuzi!)jayg07con&amp;&amp;\n\n&lt;/body>\n&lt;/html>", 
"&lt;html lang=\"ko\" xml:lang=\"ko\" xmlns=\"http://www.w3.org/1999/xhtml\">\n&lt;head>\n  
&lt;meta charset=\"utf-8\">\n  &lt;meta property=\"og:url\" content=\"https://www.kakaocorp.com\"/>\n&lt;/head>  
\n&lt;body>\ncon%\tmuzI92apeach&amp;2&lt;a href=\"https://hashcode.co.kr/tos\">&lt;/a>\n\n\t^\n&lt;/body>\n&lt;/html>"]
</pre>



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



<p class="has-medium-font-size">pages는 다음과 같이 2개의 웹페이지에 해당하는 HTML 문자열이 순서대로 들어있다.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
  &lt;meta charset="utf-8">
  &lt;meta property="og:url" content="https://careers.kakao.com/interview/list"/>
&lt;/head>
&lt;body>
&lt;a href="https://programmers.co.kr/learn/courses/4673">&lt;/a>#!MuziMuzi!)jayg07con&amp;&amp;

&lt;/body>
&lt;/html>
</pre>



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



<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
  &lt;meta charset="utf-8">
  &lt;meta property="og:url" content="https://www.kakaocorp.com"/>
&lt;/head>
&lt;body>
con%    muzI92apeach&amp;2&lt;a href="https://hashcode.co.kr/tos">&lt;/a>

    ^
&lt;/body>
&lt;/html>
</pre>



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



<ul class="wp-block-list">
<li>기본점수 및 외부 링크수는 아래와 같다.
<ul class="wp-block-list">
<li><code>careers.kakao.com/interview/list</code>&nbsp;의 기본점수는 0, 외부 링크 수는 1개</li>



<li><code>www.kakaocorp.com</code>&nbsp;의 기본점수는 1, 외부 링크 수는 1개</li>
</ul>
</li>



<li>링크점수는 아래와 같다.
<ul class="wp-block-list">
<li><code>careers.kakao.com/interview/list</code>&nbsp;의 링크점수는 0점</li>



<li><code>www.kakaocorp.com</code>&nbsp;의 링크점수는 0점</li>
</ul>
</li>



<li>각 웹 페이지의 매칭 점수는 다음과 같다.
<ul class="wp-block-list">
<li><code>careers.kakao.com/interview/list</code>&nbsp;: 0점</li>



<li><code>www.kakaocorp.com</code>&nbsp;: 1 점</li>
</ul>
</li>
</ul>



<p class="has-medium-font-size">따라서 매칭점수가 제일 높은 두번째 웹 페이지의 index인 1을 리턴 하면 된다.</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)"/>



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



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



<p class="has-medium-font-size">점수의 자료형을 double로 안하면 통과할 수 없다.</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;

struct WebPageS
{
	string _MyURL = "";
	int index = 0;
	int _BasicScore = 0;
	vector&lt;string> _External_links;
	double _LinkScore = 0;
	double _MatchingScore = 0;

	WebPageS(string p_Str, string p_Word)
	{
		FindURL(p_Str);
		BasicScore(p_Str, p_Word);
	}

	void FindURL(string p_Str)
	{
		string StartText = "&lt;meta property=\"og:url\" content=\"https://";
		string EndText = "\"/>";
		int _StartIndex = p_Str.find(StartText);
		int _EndIndex = p_Str.find(EndText, _StartIndex + StartText.length());
		for (auto&amp; it : p_Str) it = toupper(it);
		_MyURL = p_Str.substr(_StartIndex + StartText.length(), _EndIndex - (_StartIndex + StartText.length()));
	}
	
	void BasicScore(string p_Str, string p_Word)
	{
		string StartText = "&lt;body>";
		string EndText = "&lt;/body>";
		int _StartIndex = p_Str.find(StartText);
		int _EndIndex = p_Str.find(EndText, _StartIndex + StartText.length());
		string _BodyString = p_Str.substr(_StartIndex + StartText.length(), _EndIndex - (_StartIndex + StartText.length()));
		for (auto&amp; it : _BodyString) it = toupper(it);
		for (auto&amp; it : p_Word) it = toupper(it);

		vector&lt;string> tempV;
		string temp;
		for (auto it : _BodyString) {
			if (it &lt; 65 || it > 90) {
				tempV.push_back(temp);
				temp = "";
			}
			else temp.push_back(it);
		}

		for (auto&amp; it : tempV) 
			if (it == p_Word) _BasicScore++;
		

		FindExternallink(_BodyString);
	}

	void FindExternallink(string p_BodyString)
	{
		string StartText = "&lt;A HREF=\"HTTPS://";

		int _Index = p_BodyString.find(StartText);

		while (_Index != string::npos) {
			_Index += StartText.length();
			string _Externallink = "";
			while (p_BodyString[_Index] != '\"') {
				_Externallink += p_BodyString[_Index++];
			}
			_External_links.push_back(_Externallink);
			p_BodyString = p_BodyString.substr(_Index); // 문자열 자르기
			_Index = p_BodyString.find(StartText);
		}
	}
};

int solution(string word, vector&lt;string> pages) {
    int answer = 0;
	int index = 0;
	vector&lt;WebPageS> WebPagesV;
	for (auto&amp; it : pages) {
		WebPageS webPageS(it, word);
		webPageS.index = index++;
		WebPagesV.push_back(webPageS);
	}

	for (auto&amp; WebPage : WebPagesV) {
		for (auto&amp; External_link : WebPage._External_links) {
			for (auto&amp; Target : WebPagesV) {
				if (Target._MyURL == External_link) {
					Target._LinkScore += (double)WebPage._BasicScore / (double)WebPage._External_links.size();
				}
			}
		}
	}

	double MaxScore = 0;
	for (auto&amp; WebPage : WebPagesV) {
		WebPage._MatchingScore = WebPage._LinkScore + WebPage._BasicScore;
		if (MaxScore &lt; WebPage._MatchingScore) {
			answer = WebPage.index;
			MaxScore = WebPage._MatchingScore;
		}
	}
	return answer;
}
</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/03/image-79.png" alt="" class="wp-image-34245" width="535" height="622" srcset="https://lycos7560.com/wp-content/uploads/2023/03/image-79.png 475w, https://lycos7560.com/wp-content/uploads/2023/03/image-79-258x300.png 258w" sizes="(max-width: 535px) 100vw, 535px" /></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-42893-%eb%a7%a4%ec%b9%ad-%ec%a0%90%ec%88%98-2019-kakao-blind-recruitment/34238/">Programmers 42893 매칭 점수 [2019 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-42893-%eb%a7%a4%ec%b9%ad-%ec%a0%90%ec%88%98-2019-kakao-blind-recruitment/34238/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
