<?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 17684번 Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<atom:link href="https://lycos7560.com/tag/programmers-17684%eb%b2%88/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>생각의 흐름을 타고 다니며 만드는 블로그</description>
	<lastBuildDate>Wed, 08 Mar 2023 10:54:40 +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 17684번 Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Programmers 17684 [3차] 압축 [2018 KAKAO BLIND RECRUITMENT]</title>
		<link>https://lycos7560.com/cpp/programmers/programmers-17684-3%ec%b0%a8-%ec%95%95%ec%b6%95-2018-kakao-blind-recruitment/33775/</link>
					<comments>https://lycos7560.com/cpp/programmers/programmers-17684-3%ec%b0%a8-%ec%95%95%ec%b6%95-2018-kakao-blind-recruitment/33775/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Wed, 08 Mar 2023 10:54:37 +0000</pubDate>
				<category><![CDATA[C++/CPP]]></category>
		<category><![CDATA[programmers]]></category>
		<category><![CDATA[[3차] 압축]]></category>
		<category><![CDATA[<string>]]></category>
		<category><![CDATA[17684]]></category>
		<category><![CDATA[17684번]]></category>
		<category><![CDATA[2018 KAKAO BLIND RECRUITMENT]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[LZW]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[Programmers 17684]]></category>
		<category><![CDATA[Programmers 17684번]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[unordered_map]]></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=33775</guid>

					<description><![CDATA[<p>Programmers 17684 '[3차] 압축' 문제에 대한 글입니다. [2018 KAKAO BLIND RECRUITMENT] (This article is about the programmers 17684 '[3rd] compression' problem. [2018 KAKAO BLIND RECRUITMENT])</p>
<p>The post <a href="https://lycos7560.com/cpp/programmers/programmers-17684-3%ec%b0%a8-%ec%95%95%ec%b6%95-2018-kakao-blind-recruitment/33775/">Programmers 17684 [3차] 압축 [2018 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:62px" 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-a6d4df71      "
					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:62px" 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/17684" target="_blank" rel="noreferrer noopener">https://school.programmers.co.kr/learn/courses/30/lessons/17684</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">어피치는 여러 압축 알고리즘 중에서 성능이 좋고 구현이 간단한 <strong>LZW</strong>(Lempel–Ziv–Welch) 압축을 구현하기로 했다. </p>



<p class="has-medium-font-size">LZW 압축은 1983년 발표된 알고리즘으로, 이미지 파일 포맷인 GIF 등 다양한 응용에서 사용되었다.</p>



<p class="has-medium-font-size">LZW 압축은 다음 과정을 거친다.</p>



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



<p class="has-medium-font-size">1. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.</p>



<p class="has-medium-font-size">2. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.</p>



<p class="has-medium-font-size">3. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.</p>



<p class="has-medium-font-size">4. 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.</p>



<p class="has-medium-font-size">5. 단계 2로 돌아간다.</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">사전의 색인 번호는 정수값으로 주어지며, 1부터 시작한다고 하자.</p>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">색인 번호</th><th class="has-text-align-left" data-align="left">1</th><th class="has-text-align-left" data-align="left">2</th><th class="has-text-align-left" data-align="left">3</th><th class="has-text-align-left" data-align="left">&#8230;</th><th class="has-text-align-left" data-align="left">24</th><th class="has-text-align-left" data-align="left">25</th><th class="has-text-align-left" data-align="left">26</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">단어</td><td class="has-text-align-left" data-align="left">A</td><td class="has-text-align-left" data-align="left">B</td><td class="has-text-align-left" data-align="left">C</td><td class="has-text-align-left" data-align="left">&#8230;</td><td class="has-text-align-left" data-align="left">X</td><td class="has-text-align-left" data-align="left">Y</td><td class="has-text-align-left" data-align="left">Z</td></tr></tbody></table></figure>



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



<p class="has-medium-font-size">예를 들어 입력으로 <code>KAKAO</code>가 들어온다고 하자.</p>



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



<p class="has-medium-font-size">1. 현재 사전에는 <code>KAKAO</code>의 첫 글자 <code>K</code>는 등록되어 있으나, 두 번째 글자까지인 <code>KA</code>는 없으므로, 첫 글자 <code>K</code>에 해당하는 색인 번호 11을 출력하고, 다음 글자인 <code>A</code>를 포함한 <code>KA</code>를 사전에 27 번째로 등록한다.</p>



<p class="has-medium-font-size">2. 두 번째 글자 <code>A</code>는 사전에 있으나, 세 번째 글자까지인 <code>AK</code>는 사전에 없으므로, <code>A</code>의 색인 번호 1을 출력하고, <code>AK</code>를 사전에 28 번째로 등록한다.</p>



<p class="has-medium-font-size">3. 세 번째 글자에서 시작하는 <code>KA</code>가 사전에 있으므로, <code>KA</code>에 해당하는 색인 번호 27을 출력하고, 다음 글자 <code>O</code>를 포함한 <code>KAO</code>를 29 번째로 등록한다.</p>



<p class="has-medium-font-size">4. 마지막으로 처리되지 않은 글자 <code>O</code>에 해당하는 색인 번호 15를 출력한다.</p>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">현재 입력(w)</th><th class="has-text-align-left" data-align="left">다음 글자(c)</th><th class="has-text-align-left" data-align="left">출력</th><th class="has-text-align-left" data-align="left">사전 추가(w+c)</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">K</td><td class="has-text-align-left" data-align="left">A</td><td class="has-text-align-left" data-align="left">11</td><td class="has-text-align-left" data-align="left">27: KA</td></tr><tr><td class="has-text-align-left" data-align="left">A</td><td class="has-text-align-left" data-align="left">K</td><td class="has-text-align-left" data-align="left">1</td><td class="has-text-align-left" data-align="left">28: AK</td></tr><tr><td class="has-text-align-left" data-align="left">KA</td><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">27</td><td class="has-text-align-left" data-align="left">29: KAO</td></tr><tr><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left">15</td><td class="has-text-align-left" data-align="left"></td></tr></tbody></table></figure>



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



<p class="has-medium-font-size">이 과정을 거쳐 다섯 글자의 문장 <code>KAKAO</code>가 4개의 색인 번호 [11, 1, 27, 15]로 압축된다.</p>



<p class="has-medium-font-size">입력으로 <code>TOBEORNOTTOBEORTOBEORNOT</code>가 들어오면 다음과 같이 압축이 진행된다.</p>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">현재 입력(w)</th><th class="has-text-align-left" data-align="left">다음 글자(c)</th><th class="has-text-align-left" data-align="left">출력</th><th class="has-text-align-left" data-align="left">사전 추가(w+c)</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">T</td><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">20</td><td class="has-text-align-left" data-align="left">27: TO</td></tr><tr><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">B</td><td class="has-text-align-left" data-align="left">15</td><td class="has-text-align-left" data-align="left">28: OB</td></tr><tr><td class="has-text-align-left" data-align="left">B</td><td class="has-text-align-left" data-align="left">E</td><td class="has-text-align-left" data-align="left">2</td><td class="has-text-align-left" data-align="left">29: BE</td></tr><tr><td class="has-text-align-left" data-align="left">E</td><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">5</td><td class="has-text-align-left" data-align="left">30: EO</td></tr><tr><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">R</td><td class="has-text-align-left" data-align="left">15</td><td class="has-text-align-left" data-align="left">31: OR</td></tr><tr><td class="has-text-align-left" data-align="left">R</td><td class="has-text-align-left" data-align="left">N</td><td class="has-text-align-left" data-align="left">18</td><td class="has-text-align-left" data-align="left">32: RN</td></tr><tr><td class="has-text-align-left" data-align="left">N</td><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">14</td><td class="has-text-align-left" data-align="left">33: NO</td></tr><tr><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">T</td><td class="has-text-align-left" data-align="left">15</td><td class="has-text-align-left" data-align="left">34: OT</td></tr><tr><td class="has-text-align-left" data-align="left">T</td><td class="has-text-align-left" data-align="left">T</td><td class="has-text-align-left" data-align="left">20</td><td class="has-text-align-left" data-align="left">35: TT</td></tr><tr><td class="has-text-align-left" data-align="left">TO</td><td class="has-text-align-left" data-align="left">B</td><td class="has-text-align-left" data-align="left">27</td><td class="has-text-align-left" data-align="left">36: TOB</td></tr><tr><td class="has-text-align-left" data-align="left">BE</td><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">29</td><td class="has-text-align-left" data-align="left">37: BEO</td></tr><tr><td class="has-text-align-left" data-align="left">OR</td><td class="has-text-align-left" data-align="left">T</td><td class="has-text-align-left" data-align="left">31</td><td class="has-text-align-left" data-align="left">38: ORT</td></tr><tr><td class="has-text-align-left" data-align="left">TOB</td><td class="has-text-align-left" data-align="left">E</td><td class="has-text-align-left" data-align="left">36</td><td class="has-text-align-left" data-align="left">39: TOBE</td></tr><tr><td class="has-text-align-left" data-align="left">EO</td><td class="has-text-align-left" data-align="left">R</td><td class="has-text-align-left" data-align="left">30</td><td class="has-text-align-left" data-align="left">40: EOR</td></tr><tr><td class="has-text-align-left" data-align="left">RN</td><td class="has-text-align-left" data-align="left">O</td><td class="has-text-align-left" data-align="left">32</td><td class="has-text-align-left" data-align="left">41: RNO</td></tr><tr><td class="has-text-align-left" data-align="left">OT</td><td class="has-text-align-left" data-align="left"></td><td class="has-text-align-left" data-align="left">34</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>



<h3 class="wp-block-heading">입력 형식</h3>



<p class="has-medium-font-size">입력으로 영문 대문자로만 이뤄진 문자열 <code>msg</code>가 주어진다. </p>



<p class="has-medium-font-size"><code>msg</code>의 길이는 1 글자 이상, 1000 글자 이하이다.</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">주어진 문자열을 압축한 후의 사전 색인 번호를 배열로 출력하라.</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">msg</th><th class="has-text-align-left" data-align="left">answer</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left"><code>KAKAO</code></td><td class="has-text-align-left" data-align="left">[11, 1, 27, 15]</td></tr><tr><td class="has-text-align-left" data-align="left"><code>TOBEORNOTTOBEORTOBEORNOT</code></td><td class="has-text-align-left" data-align="left">[20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]</td></tr><tr><td class="has-text-align-left" data-align="left"><code>ABABABABABABABAB</code></td><td class="has-text-align-left" data-align="left">[1, 2, 27, 29, 28, 31, 30]</td></tr></tbody></table></figure>



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



<h1 class="wp-block-heading">접근 방법</h1>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/03/KakaoTalk_20230308_195014008.jpg" alt="" class="wp-image-33780" width="1450" height="2043" srcset="https://lycos7560.com/wp-content/uploads/2023/03/KakaoTalk_20230308_195014008.jpg 1363w, https://lycos7560.com/wp-content/uploads/2023/03/KakaoTalk_20230308_195014008-213x300.jpg 213w, https://lycos7560.com/wp-content/uploads/2023/03/KakaoTalk_20230308_195014008-768x1082.jpg 768w, https://lycos7560.com/wp-content/uploads/2023/03/KakaoTalk_20230308_195014008-1090x1536.jpg 1090w" sizes="(max-width: 1450px) 100vw, 1450px" /></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;unordered_map>

using namespace std;

unordered_map&lt;string, int> myMap;

vector&lt;int> solution(string msg) {
    
    vector&lt;int> answer;

    for (int i = 1; i &lt;= 26; i++) { // 사전을 초기화
        string temp = "";
        temp.push_back('A' + i - 1);
        myMap.insert(make_pair(temp, i));
    }

    for (int j = 0; j &lt; msg.length(); j++) { // 시작 피봇
        for (int i = msg.length() - j; i >= 1; i--) { // 슬라이싱 피봇
            auto it = myMap.find(msg.substr(j, i));
            if (it != myMap.end()) {
                answer.push_back(it->second);
                if (j + i &lt; msg.length()) 
                    myMap.insert(make_pair(msg.substr(j, i + 1), myMap.size() + 1));            
                j += it->first.length() - 1;
                break;
            }
        }
    }

    return answer;
}</pre>



<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/03/image-25.png" alt="" class="wp-image-33778" width="1175" height="636" srcset="https://lycos7560.com/wp-content/uploads/2023/03/image-25.png 752w, https://lycos7560.com/wp-content/uploads/2023/03/image-25-300x162.png 300w" sizes="(max-width: 1175px) 100vw, 1175px" /></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-17684-3%ec%b0%a8-%ec%95%95%ec%b6%95-2018-kakao-blind-recruitment/33775/">Programmers 17684 [3차] 압축 [2018 KAKAO BLIND RECRUITMENT]</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/cpp/programmers/programmers-17684-3%ec%b0%a8-%ec%95%95%ec%b6%95-2018-kakao-blind-recruitment/33775/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
