<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>★조나단봉네 블로그★</title>
		<link>http://blog.sbnet21.com/</link>
		<description>순보네 집(SBNET21.COM)</description>
		<language>ko</language>
		<pubDate>Sun, 07 Mar 2010 12:56:26 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>★조나단봉네 블로그★</title>
		<url><![CDATA[http://cfile2.uf.tistory.com/image/2051510D4B93228229372A]]></url>
		<link>http://blog.sbnet21.com/</link>
		<description>순보네 집(SBNET21.COM)</description>
		</image>
		<item>
			<title>[C] 문자열에서 반복되는 가장 긴 부분 문자열</title>
			<link>http://blog.sbnet21.com/1755</link>
			<description>&lt;DIV&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(254,222,199) 1px solid; BORDER-LEFT: rgb(254,222,199) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(254,222,199); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(254,222,199) 1px solid; BORDER-RIGHT: rgb(254,222,199) 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;Write a program to extract the longest&amp;nbsp;repeated&amp;nbsp;substring&amp;nbsp;in a given string.&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style=&quot;POSITION: absolute; WIDTH: auto; DISPLAY: inline; HEIGHT: auto; VISIBILITY: hidden&quot;&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;주어진 문자열에서 반복되는 가장 긴 문자열을 추출하자. 문자열의 길이를 n이라고 했을 때 가장 무식한 방법은 모든 가능한 문자열을 다 구해서 반복되는 문자열을 찾고 긴 문자열을 출력하면 된다. 비교 대상인 두 문자열의 시작점을 i, j라고하고 문자열의 길이를 k라고&amp;nbsp;하고, 비교할 수 있고 문자열을 비교하는 것 또한 k만큼 필요하므로 대략 O(n^4)이 나온다. 어쨌든, 좋지 않다.&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;이 문제에 접근하기 위해서 사용되는 것이 &lt;A title=&quot;[http://en.wikipedia.org/wiki/Suffix_array]로 이동합니다.&quot; href=&quot;http://en.wikipedia.org/wiki/Suffix_array&quot; target=_blank&gt;suffix array&lt;/A&gt;라는 것이다. 문자열에서의 각 시작점들의 인덱스를 값(element)으로 가지는 배열을 말한다. 말로 써놓으면 이해하기 어렵고 간단하게 예를 들면 &#039;banana&#039;라는 문자열이 있을 때 &#039;banana&#039;는 0번 인덱스부터 시작한 것이고, &#039;anana&#039;는 1번 인덱스부터 시작한 것이다. 또한 &#039;na&#039;의 경우 4번 인덱스부터 시작한 것이다. 이러한 0, 1, 4 등의 값을 가지는 배열을 suffix array라고 한다.&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &#039;Courier New&#039;&quot;&gt;a[] = {&quot;banana&quot;,&amp;nbsp;&quot;anana&quot;,&amp;nbsp;&quot;nana&quot;,&amp;nbsp;&quot;ana&quot;,&amp;nbsp;&quot;na&quot;,&amp;nbsp;&quot;a&quot;}&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;위와 같은 식으로 값을 가리키는 셈인데, 이것을 정렬하면&lt;/DIV&gt;
&lt;DIV style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &#039;Courier New&#039;&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &#039;Courier New&#039;&quot;&gt;&lt;br /&gt;
&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV style=&quot;MARGIN-LEFT: 4em&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &#039;Courier New&#039;&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: &#039;Courier New&#039;&quot;&gt;a[] = {&quot;a&quot;, &quot;ana&quot;, &quot;anana&quot;, &quot;banana&quot;, &quot;na&quot;, &quot;nana&quot;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;와 같은 꼴이 된다. 이제 앞뒤 문자열만 비교하면 순서대로 몇 개의 문자가 일치하는지 쉽게 구할 수 있다. 이 경우 &quot;ana&quot;와 &quot;anana&quot;에서 3자리 문자열 &quot;ana&quot;가 가장 긴 반복되는 문자열이 된다. 이제 시간 복잡도는 O(n*nlogn)이 된다. n은 문자열 비교에서, nlogn은 정렬에서 온 수치이다.&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;소스 코드 상에서는 compare 함수에서 *(char**)a 를 사용하는 부분이 까다로왔다. 포인터에 대해서 좀 알게 되었나 싶었더니 여전히 잘 모르는 것 같다. 좀 더 알아봐야겠다. Programming Pearls에서 보고 감탄했는데, 알고랭이 좀 했다하는 애들은 중학생들도 아는 알고리즘이라는 것을 알고 나니 부끄럽다. -_-;
&lt;DIV&gt;&lt;SPAN style=&quot;FONT-FAMILY: monospace; WHITE-SPACE: pre&quot; class=Apple-style-span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;p id=&quot;more1755_0&quot; class=&quot;moreless_fold&quot;&gt;&lt;span style=&quot;cursor: pointer;&quot; onclick=&quot;toggleMoreLess(this, &#039;1755_0&#039;,&#039;소스열기&#039;,&#039;소스닫기&#039;); return false;&quot;&gt;소스열기&lt;/span&gt;&lt;/p&gt;&lt;div id=&quot;content1755_0&quot; class=&quot;moreless_content&quot; style=&quot;display: none;&quot;&gt;&lt;PRE class=brush:c name=&quot;code&quot;&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;	// for malloc

int compare(const void *a, const void *b)
{
	return strcmp(*(char**)a, *(char**)b);
}

int complen(const void *a, const void *b) 
{
	int len, max = strlen(a);
	if (strlen(b) &amp;lt; max) max = strlen(b);	

	for (len = 0;len &amp;lt; max; len++) {
		if (((char*)a)[len] != ((char*)b)[len])
			return len;
	}
}

int main() 
{
	char buf[] = &quot;abcdaabcdefabcf&quot;;
	int len = strlen(buf);
	int maxlen = 0;
	int idx = 0; 
	int tmp = 0;
	int i = 0;

	char *sa[len];	

	for (i = 0; i &amp;lt; len; i++)
		sa[i] = &amp;amp;buf[i];
	qsort(sa, len, sizeof(char*), compare);

	for (i = 0; i &amp;lt; len - 1; i++) {
		tmp = complen(sa[i], sa[i+1]);
		if (tmp &amp;gt; maxlen) {
			maxlen = tmp;
			idx = i;
		}
	}

	char *longstr = (char*)malloc(sizeof(char)*maxlen+1);
	strncpy(longstr, sa[idx], maxlen);
	printf(&quot;idx: %d maxlen: %d str: %s\n&quot;, idx, maxlen, longstr);

	free(longstr);

	return 0;
}&lt;/PRE&gt;&lt;/div&gt;&lt;/DIV&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1755-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1755-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1755-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[프로그래밍]</category>
			<category>C</category>
			<category>suffix array</category>
			<category>알고리즘</category>
			<category>최장공통문자열</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1755</guid>
			<comments>http://blog.sbnet21.com/1755#entry1755comment</comments>
			<pubDate>Sat, 06 Mar 2010 14:05:40 +0900</pubDate>
		</item>
		<item>
			<title>&quot;야근 인정해달라&quot;..한 IT 근로자의 절규</title>
			<link>http://blog.sbnet21.com/1754</link>
			<description>&lt;div&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(243, 197, 52); border-right-color: rgb(243, 197, 52); border-bottom-color: rgb(243, 197, 52); border-left-color: rgb(243, 197, 52); background-color: rgb(254, 254, 184); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;div&gt;
&quot;연말 오픈 예정이었지만 6개월 일정으로는 어림없는 작업이었습니다. 외부 하청업체마저 `사람 잡는다&#039;며 포기할 정도였으니까요. `월화수목금금금&#039;의 연속이었습니다&quot;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&quot;저만의 문제가 아니라고 생각합니다. 많은 IT 근로자들이 3D업종 종사자로 전락한 지 오래됐습니다. 장시간 노동에 야근수당마저 제대로 못 받는 현실입니다. 우리나라가 `아이폰&#039; 같은 뛰어난 IT 제품을 만들기 위해서는 IT 근로자의 처우부터 개선해야 한다고 봅니다&quot;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;div&gt;
&lt;a href=&quot;http://media.daum.net/economic/view.html?cateid=1001&amp;amp;newsid=20100305095708435&amp;amp;p=yonhap&quot; target=&quot;_blank&quot; title=&quot;[http://media.daum.net/economic/view.html?cateid=1001&amp;amp;newsid=20100305095708435&amp;amp;p=yonhap]로 이동합니다.&quot;&gt;[&quot;야근 인정해달라&quot;..한 IT 근로자의 절규 - 전체 기사 보기]&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
우리나라 특성상 IT 분야뿐만의 문제는 아니겠지만 이쪽 분야에 있다 보니 이런 뉴스에 눈이 간다. 가장 큰 문제는 주어진 기간 내에 정상적으로 할 수 없는 일을 던져 주는 게 문제이다. &#039;5일 동안 할 수 있는 일을 4일 동안 할 수 있다고 말하고 3일 만에 해내는 것이 훌륭한 일꾼(?)&#039;이라는 말이 있다만, 현실은 10일 동안 할 수 있는 일을 5일 만에 해 놓으라고 주는 게 문제란 말이다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
사실 이 분야에서는, 특히 프로세스가 갖추어지지 않은 영세한 개발업체에서는, 어떠한 일에 얼마나 많은 사람이 얼마의 시간을 필요로 하는지 맨먼스(Man-Month) 같은걸 정확하게 측정하기 어렵기 때문에 기획자나 마케터가 주는 데드라인이 개발 기간으로 잡히기 일쑤이다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
개발자는 주어진 기간에 할 수 없는 것을 알면서도 자신의 능력이 부족해서 기한 내에 마치지 못하는 것처럼 보이지 않기 위해 자신을 혹사하게 된다. 점점 더 능률은 떨어지고, 몸은 만신창이가 되고, 제품(?)도 엉망이 된다. 악순환의 연속이다. 원가 절감을 위해 더 많은 시간이나 인력을 줄 수는 없다는 식의 논리.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
방법은 일이 적은 땡보(?) 회사에 취직하는 수밖에 없다. 하지만, 대개 이런 회사는 취업하기 쉽지 않다. 결국, 뾰족한 수가 없으니 이쪽 일을 그만두려는 수 밖에. IT 일 자체를 좋아하더라도 이 분야를 떠나고 싶어 한다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
관련글:&amp;nbsp;&lt;a href=&quot;http://blog.sbnet21.com/1459&quot; target=&quot;_blank&quot;&gt;2007/06/23 - [[일상의 한마디]] - &quot;IT맨 기사에 달린 그 구구절절한 댓글들..&quot; 이야기&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1754-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1754-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1754-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[생각해 보아요]</category>
			<category>IT</category>
			<category>개발자</category>
			<category>소프트웨어</category>
			<category>야근</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1754</guid>
			<comments>http://blog.sbnet21.com/1754#entry1754comment</comments>
			<pubDate>Fri, 05 Mar 2010 12:53:51 +0900</pubDate>
		</item>
		<item>
			<title>생각하는(?) 실용주의(?) 프로그래머</title>
			<link>http://blog.sbnet21.com/1753</link>
			<description>&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(243, 197, 52); border-right-color: rgb(243, 197, 52); border-bottom-color: rgb(243, 197, 52); border-left-color: rgb(243, 197, 52); background-color: rgb(254, 254, 184); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
1에서 10,000까지 정수 중에서 무작위 100개를 뽑아내어 출력하자.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
수학 문제 같은 접근이 맘에 들지 않는다면 실용적인 예로 바꿔 보자.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(243, 197, 52); border-right-color: rgb(243, 197, 52); border-bottom-color: rgb(243, 197, 52); border-left-color: rgb(243, 197, 52); background-color: rgb(254, 254, 184); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;div&gt;
음악 사이트에서 10,000개의 곡이 존재하는데 랜덤하게 100개의 곡을 뽑아 랜덤 듣기 서비스를 제공한다고 해보자. 물론 각 곡은 고유 인덱스를 가지며 반드시 1에서 10,000까지만의 연속된 정수라고 할 수도 없다. 예를 들면 34,483번 등의 곡도 존재할 수 있다.&amp;nbsp;어떻게 할 것인가?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
실제로 예전에 회사에 다닐 때 마주친 문제이다. 당시 회사에서는 음악 사이트 리뉴얼 중이었고, 랜덤 재생 버튼을 누르면 엄청나게 오랜 시간을 잡아 먹는 현상이 있었다. 코드를 보지는 않았지만, &lt;a href=&quot;http://blog.miniwini.com/archives/2006/03/@12-52-18.php#blog-trackbacks&quot; target=&quot;_blank&quot; title=&quot;[http://blog.miniwini.com/archives/2006/03/@12-52-18.php#blog-trackbacks]로 이동합니다.&quot;&gt;모회사의 개발자 구하기 글&lt;/a&gt;의 첫번째 함수 비슷하게 구현하지 않았었을까 생각된다. 당시 이 소스를 작업하던 분이 배열 섞는데 시간이 너무 오래 걸린다고 좋은 방법을 알아봐 달라고 해서 배열을 섞는 함수를 찾아서 알려줬던 기억이 난다.&lt;sup class=&quot;footnote&quot;&gt;&lt;a id=&quot;footnote_link_1753_1&quot; href=&quot;#footnote_1753_1&quot; onmouseover=&quot;tistoryFootnote.show(this, 1753, 1)&quot; onmouseout=&quot;tistoryFootnote.hide(1753, 1)&quot; style=&quot;color: #f9650d; font-family: Verdana, Sans-serif&quot;&gt;&lt;span style=&quot;display: none&quot;&gt;[각주:&lt;/span&gt;1&lt;span style=&quot;display: none&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 어쨌든, 이 문제를 접했을 때 이러한 접근이 당연했고 가장 적합한 처리 방법이었다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
요즘 테크니컬 면접을 준비하고, 알고리즘 수업도 듣다보니까 문제를 바라보는 관점이 조금 Y군처럼 바뀌었다. 이 문제를 접하자마자 어떻게 풀까 고민을 시작했고, 방법을 알아내었다.&lt;sup class=&quot;footnote&quot;&gt;&lt;a id=&quot;footnote_link_1753_2&quot; href=&quot;#footnote_1753_2&quot; onmouseover=&quot;tistoryFootnote.show(this, 1753, 2)&quot; onmouseout=&quot;tistoryFootnote.hide(1753, 2)&quot; style=&quot;color: #f9650d; font-family: Verdana, Sans-serif&quot;&gt;&lt;span style=&quot;display: none&quot;&gt;[각주:&lt;/span&gt;2&lt;span style=&quot;display: none&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&amp;nbsp;이후 이 문제가 나왔던 위의&amp;nbsp;&lt;a href=&quot;http://blog.miniwini.com/archives/2006/03/@12-52-18.php#blog-trackbacks&quot; target=&quot;_blank&quot; title=&quot;[http://blog.miniwini.com/archives/2006/03/@12-52-18.php#blog-trackbacks]로 이동합니다.&quot;&gt;모회사의 개발자 구하기 글&lt;/a&gt;을 마져 읽어 내려가다 충격을 먹었다. 당연히 이렇게 푸는 설명이 있을 줄 알았는데, PHP상에서 배열을 섞어주는 shuffle 함수를 사용하는 것이 정답(?)으로 나와 있어서였다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
그냥, 책 제목으로 있는 &#039;생각하는 프로그래머&#039;와 &#039;실용주의&lt;sup class=&quot;footnote&quot;&gt;&lt;a id=&quot;footnote_link_1753_3&quot; href=&quot;#footnote_1753_3&quot; onmouseover=&quot;tistoryFootnote.show(this, 1753, 3)&quot; onmouseout=&quot;tistoryFootnote.hide(1753, 3)&quot; style=&quot;color: #f9650d; font-family: Verdana, Sans-serif&quot;&gt;&lt;span style=&quot;display: none&quot;&gt;[각주:&lt;/span&gt;3&lt;span style=&quot;display: none&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 프로그래머&#039;라는 말이 떠올랐다. 흔히 학교에 있으면 &#039;생각하는 프로그래머&#039;가 되려고 노력하고, 회사에 있으면 &#039;실용주의 프로그래머&#039;가 되야할 것만 같다. 물론, 둘 다 잘해야 하지만 이 예를 보면 조금 아이러니한 느낌이 든다. 이상한 생각인가? ㅎㅎ&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
뭔가 글을 잘 쓰지 못하는 게 티가 팍팍 나는 &lt;div style=&quot;display: inline; height: auto; position: absolute; visibility: hidden; width: auto; &quot;&gt;
포스팅이다&lt;/div&gt;
포스팅이다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
뭐, 결론은 한 가지 문제에 대한 두가지 접근 방식이 존재한다는 말이다. ^^;&lt;/div&gt;&lt;div class=&quot;footnotes&quot;&gt;
	&lt;ol class=&quot;footnotes&quot;&gt;
		&lt;li id=&quot;footnote_1753_1&quot;&gt;시간은 기억은 미화시킨다. 과정이 정확하지는 않을 수 있다.  &lt;a href=&quot;#footnote_link_1753_1&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
		&lt;li id=&quot;footnote_1753_2&quot;&gt;배열에 대상이 되는 수(1~10000)을 넣고, 랜덤 함수로 0~1 사이의 실수 값을 구해서 10000을 곱하여 나온 값을 index하는 값을 추출한다. 배열의 마지막 인자(e.g, 10000)를 그 index 값에 넣고 이제 다음 랜덤값에는 9999를 곱한다. 이런식으로... &lt;a href=&quot;#footnote_link_1753_2&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
		&lt;li id=&quot;footnote_1753_3&quot;&gt;책의 실제 내용과 관계없이 &#039;실용주의&#039;라는 단어의 의미만 가져다 썼음. &lt;a href=&quot;#footnote_link_1753_3&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
	&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1753-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1753-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1753-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[프로그래밍]</category>
			<category>알고리즘</category>
			<category>프로그래머</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1753</guid>
			<comments>http://blog.sbnet21.com/1753#entry1753comment</comments>
			<pubDate>Thu, 04 Mar 2010 19:57:47 +0900</pubDate>
		</item>
		<item>
			<title>[CS] 연결 리스트 뒤집기 (Reverse Linked List)</title>
			<link>http://blog.sbnet21.com/1752</link>
			<description>테크니컬 면접 문제의 단골인 연결&amp;nbsp;리스트(Linked List). 그 중에서도 가장 많이 나온다는 뒤집기 문제이다.&amp;nbsp;&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
기본적인 연결 리스트를 구현 할 줄 알아야 겠다. C/C++을 이용한다고 할 때, struct 혹은 class로 먼저 node를 정의한다. 필요한 기본 함수로는 insert, delete, print(&lt;div style=&quot;display: inline; height: auto; position: absolute; visibility: hidden; width: auto; &quot;&gt;
traverse&lt;/div&gt;
traverse) 정도가 되겠다. delete는 뒤집기에는 필요하지 않으므로 생략한다.&amp;nbsp;&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
C/C++로 구현하기 위해서는 포인터에 대해서 알아야 한다. 새 노드를 head가 가리키는 첫 노드로 삽입하는 insert를 구현하기 위해서는 포인터의 포인터(A pointer that points to a pointer)를 인자로 넘겨야 head가 가리키는 노드를 새 노드로 변경할 수 있다는 점에 주의해야 한다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
리스트를 뒤집는 reverse 함수를 구현할 때에도 잘못 생각하면 무한 루프에 빠지게 되는데 주의해야 한다. 이전 노드, 현재 노드, 다음 노드를 테이블로 그려보고 적절히 값이 어떻게 바뀌어야 할지 생각해보면 할 수 있다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
그런데, 종이만 주고 이걸 구현하라고 하면 쉽게 완성하지는 못할 것 같다. 포인터가 아직 완전히 익숙하지 않아서 부분부분 오류를 낼 것 같다. 조금 더 다양한 것을 구현해보는 연습을 해야겠다.&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;more1752_0&quot; class=&quot;moreless_fold&quot;&gt;&lt;span style=&quot;cursor: pointer;&quot; onclick=&quot;toggleMoreLess(this, &#039;1752_0&#039;,&#039;소스 보기&#039;,&#039;소스 닫기&#039;); return false;&quot;&gt;소스 보기&lt;/span&gt;&lt;/p&gt;&lt;div id=&quot;content1752_0&quot; class=&quot;moreless_content&quot; style=&quot;display: none;&quot;&gt;&lt;pre class=&quot;brush:c++&quot; name=&quot;code&quot;&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

typedef struct node {
	int value;
	struct node *next;
} Node;

void insert(Node **head, int value) {
	Node *newNode = (Node*)malloc(sizeof(Node));
	newNode-&amp;gt;value = value;
	newNode-&amp;gt;next = *head;
	*head = newNode;
}

void print(Node *head) {
	Node *curNode;
	curNode = head;
	while (curNode != NULL) {
		cout &amp;lt;&amp;lt; curNode-&amp;gt;value &amp;lt;&amp;lt; &quot; &quot;;		
		curNode = curNode-&amp;gt;next;
	}
	cout &amp;lt;&amp;lt; endl;
}

void reverse(Node **head) {
	Node *curNode, *preNode, *tmp;
	
	preNode = NULL;
	curNode = *head;
	
	if (curNode) {
		while(curNode-&amp;gt;next) {
			tmp = curNode-&amp;gt;next;
			curNode-&amp;gt;next = preNode;
			preNode = curNode;
			curNode = tmp;
		}
		curNode-&amp;gt;next = preNode;
		*head = curNode;
	}
}

int main() {
	Node *head = NULL;

	// list w/o element
	reverse(&amp;amp;head);
	print(head);
	
	// list w/ one element
	insert(&amp;amp;head, 4);
	reverse(&amp;amp;head);
	print(head);

	// list w/ elements
	insert(&amp;amp;head, 3);	
	insert(&amp;amp;head, 2);
	insert(&amp;amp;head, 1);
	print(head);
	reverse(&amp;amp;head);
	print(head);
	reverse(&amp;amp;head);
	print(head);
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1752-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1752-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1752-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[프로그래밍]</category>
			<category>C++</category>
			<category>linked lsit</category>
			<category>알고리즘</category>
			<category>연결리스트</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1752</guid>
			<comments>http://blog.sbnet21.com/1752#entry1752comment</comments>
			<pubDate>Sun, 28 Feb 2010 15:45:26 +0900</pubDate>
		</item>
		<item>
			<title>김연아 동계 올림픽 금메달!</title>
			<link>http://blog.sbnet21.com/1751</link>
			<description>&lt;div class=&quot;imageblock left&quot; style=&quot;float: left; margin-right: 10px;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/1466DF114B8761C376F6E0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1466DF114B8761C376F6E0&quot; alt=&quot;금메달 김연아&quot; filemime=&quot;&quot; filename=&quot;cfile4.uf@1466DF114B8761C376F6E0.jpg&quot; height=&quot;300&quot; width=&quot;200&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot; style=&quot;width: 200px&quot;&gt;금메달 김연아&lt;/p&gt;&lt;/div&gt;&lt;div&gt;
스포츠는 기록을 통해 결과를 예측해 볼 수 있지만, 예상대로 되리라는 법이 없다. 바로 그게 스포츠의 &lt;div style=&quot;display: inline; height: auto; position: absolute; visibility: hidden; width: auto; &quot;&gt;
매력이고 &lt;/div&gt;
매력이고 긴장감을 주는 요소이다. 그래도 가끔은 예상 그 이상으로 이루어지기도 한다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
김연아가 온 국민이 바라던 금메달을 목에 걸었다. 아무리 강심장이라고 하더라도 그 중압감이 엄청날 텐데, 어린(?) 나이에 잘 극복하고 국민들이 바라는 그 이상의 모습을 보여주며 우리나라뿐만 아니라 세계를 놀라게 했다. 점수가 &quot;one fifty~(150)&quot;라고 하는 장내 아나운서의 말을 듣자마자 나는 &#039;뭐???&#039;라는 외마디를 외쳤다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
다른 선수들은 실수하는 게 티가 나고 동작들이 부자연스러운 것이 눈에 띄어 점수가 나쁠 것이 충분히 예상되는데, 김연아의 경기는 저게 실수인지 원래 저렇게 하는 것인지 나의 눈에는 구분이 안 간다. 대략 경기가 끝나갈 무렵에 NBC의 해설자 아줌마가 &#039;자기가 일생동안 본 올림픽 피겨 스케이팅 경기 중에 가장 훌륭한 연기였다.&#039;라고 말하고, 김연아가 자신의 연기를 마치고 기쁨의 눈물을 보이려 할 때 그때서야 &#039;아... 잘 했나보네..&#039;라고 생각할 뿐이다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
다음에 출전한 아사다 마오. 일본과의 경쟁에는 눈에 쌍심지를 켜는 우리 민족의 특성상 반드시 이겨야할 대상이자 경쟁자. 지난 쇼트에서 기대 이상의 훌륭한 모습을 보여서 내심 자기네 딴에는 기대를 했겠지만, 김연아가 그야말로 가공할만한 점수를 받은 이후의 무대라 나오면서부터 표정이 안 좋아 보였다. 실수도 두 번 하고 완전히 이성을 잃는 거 아닌가 싶을 정도로 당황한 모습이었다. &#039;신&#039;은 &#039;김연아&#039;를 낳고 왜 20일 후에 &#039;아사다 마오&#039;를 낳았을까?&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
김연아 금메달이 다른 선수들의 금메달에 비해 특별히 더 가치 있다고 할 수는 없다. 그러나 다른 선수에 비해 어마어마한 관심과 기대를 받았고, 그것을 극복하고 멋지게 금메달을 딴 점은 충분히 칭찬 받아 마땅하겠다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
올림픽이라는 무대는 국가를 대표해서 세계와 경쟁하는 곳이다. 그런 곳에 국가를 대표하여 출전한다는 것만으로도 누구나 훌륭하다. 메달 색깔에 관계없이 입상한 사람들 모두 축하하고, 설사 입상하지 못하였더라도 그간의 노력에 박수를 보낸다.&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1751-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1751-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1751-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[일상의 한마디]</category>
			<category>금메달</category>
			<category>김연아</category>
			<category>동계 올림픽</category>
			<category>피겨 스케이팅</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1751</guid>
			<comments>http://blog.sbnet21.com/1751#entry1751comment</comments>
			<pubDate>Fri, 26 Feb 2010 15:10:39 +0900</pubDate>
		</item>
		<item>
			<title>[2010.02.22] 두번째 캠퍼스 취업 인터뷰(on campus interview)</title>
			<link>http://blog.sbnet21.com/1750</link>
			<description>이번에는 좀 더 기술 인터뷰(technical interview)로 유명한 회사이다.&amp;nbsp;간단하게 인터뷰어(interviewer)의 소개로 시작했다. 그런데, 뭘한다는 것인지 모르겠다. 정말 다양한 서비스 이름이 오르내렸다. 나는 그냥 &#039;정말 많은 일을 하고 있군요.&#039;라고 했다.&amp;nbsp;&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
인터뷰에는 자신이 (1)이루어낸 일(achievement)에 대한 소개, 자신이 한 일 중 (2)실패한 경험(failure)과 그로부터 배운 것 등의 질문 들은 (3)&#039;자신에 대해 소개해 보세요&#039;라는 비교적 포괄적인 질문과 함께 자주 나온다고 한다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
오늘은&amp;nbsp;내가 &lt;b&gt;프로젝트를 하면서 뭔가를 발전시킨 경험&lt;/b&gt;을 이야기해보란다. 이런 질문에 대비하여 억지로 모범 답안을 생각해 둔것을 말했다. 예전에 회사를 다니면서 paging query를 바꿔서 performance를 높힌 이야기를 했다. 그 당시에는 엄청 여러가지로 알아보고 며칠간 고민도 했으니 거짓말은 아니다. &#039;cool&#039;인지 &#039;great&#039;라고 말해줬지만 미국인 식의 입에 발린 칭찬이란 것쯤은 안다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
그리고 &lt;b&gt;주로 사용하는 언어&lt;/b&gt;는 뭐냐고 물어서 주로 C랑 Java라고 했다. C++은 요즘 다시 공부하고 있는데 차마 자주 쓴다고는 말할 수 없었다. 나의 주언어(?) php도 빼놓지 않고 말했지만, 도움이 되지는 않을 듯하다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
개발자라 이런 대화들은 형식적으로 묻는 것 같았다. 바로 본격적으로 technical question&lt;sup class=&quot;footnote&quot;&gt;&lt;a id=&quot;footnote_link_1750_1&quot; href=&quot;#footnote_1750_1&quot; onmouseover=&quot;tistoryFootnote.show(this, 1750, 1)&quot; onmouseout=&quot;tistoryFootnote.hide(1750, 1)&quot; style=&quot;color: #f9650d; font-family: Verdana, Sans-serif&quot;&gt;&lt;span style=&quot;display: none&quot;&gt;[각주:&lt;/span&gt;1&lt;span style=&quot;display: none&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;으로 들어갔다. 첫번째 문제는 &lt;b&gt;linked list가 있을 때 마지막에서 5번째 노드를 찾는 것에 방법&lt;/b&gt;에 대해서 말해보란다. 혹시 알고 있는 문제면 좀더 재미있는 문제를 풀어보자고 했다. 그러나, 모르는 척 해야지. 고민을 하는 척하다가 포인터 2개를 놓고 하나를 먼저 5칸을 보낸 후에 나머지 포인터와 같이 이동시키다가, 첫번째 포인터가 마지막(null)에 도달하면 앞의 포인터가 가리키는 노드가 바로 마지막에서 5번째 노드이다. 그랬더니, 코드로 짜보란다. 슥삭슥삭 나는 코드를 종이에 열심히 쓰고, 인터뷰어는 노트북에 뭐라뭐라 계속 치고 있다. 지난번에 인터뷰 전에 있었던 Info session에서 자기네들이 뭐를 치더라도 개의치 말라고 했으니 개의치 않았다. 코드를 다 짜고 대략 코드를 보며 맞는지 함께 점검해본다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
저렇게 했더니 이제 8분이 남았단다. 문제를 더 풀어보잔다. &lt;b&gt;정렬될 정수형 배열이 있는데 회전되어(rotated)&amp;nbsp;있다.&lt;sup class=&quot;footnote&quot;&gt;&lt;a id=&quot;footnote_link_1750_2&quot; href=&quot;#footnote_1750_2&quot; onmouseover=&quot;tistoryFootnote.show(this, 1750, 2)&quot; onmouseout=&quot;tistoryFootnote.hide(1750, 2)&quot; style=&quot;color: #f9650d; font-family: Verdana, Sans-serif&quot;&gt;&lt;span style=&quot;display: none&quot;&gt;[각주:&lt;/span&gt;2&lt;span style=&quot;display: none&quot;&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; 이때 회전의 시작점(?)을 찾으라는 문제&lt;/b&gt;이다. 아, 전에 문제는 봤는데 풀이방법은 보지 않았던 문제다. 일단 모르면 쉬운 방법부터 말하라는 말을 어디선가 봤다. 무조건 말을 많이 해야 자기가 뭘하는지 안다고 봤다. 그래서 일단 가장 쉬운 방법은 현재 위치의 정수값이 앞 자리 값보다 작으면 그 위치가 바로 우리가 원하는 자리이고 이것은 O(n)이다. 이러면서 대략 중간에 선을 하나 그어서 배열을 두 부분으로 나눠놨다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
답을 모르는 문제이고 시간도 얼마 남지 않아 여유가 없다는 생각에 일단 해법이 떠오르지 않았다, 인터뷰어들은 인터뷰하는 사람들이 문제를 풀 수 있도록 도와주는 역할도 한다고 해서 힌트를 달라고 했다. 그랬더니, 내가 그어 놓은 선을 보고는, &quot;왜 저렇게 선을 그어 놨어?&quot;라고 했다. &quot;나는 O(lgn) 알고리즘을 찾으려고... 아하!!!!&quot; 그러고는 풀이가 떠올랐다. 또 코드를 작성하란다. 4분 내로 작성하란다. 압박을 주는건 아니고 다 끝내지 못해도 된다고 했지만 후다닥 코드를 써봤다. 인덱스가 같은 것(i==j)을 표현해야하는 부분에서 배열 값이 같은 것(a[i]==a[j])을 구한다고 잘못 써놓은 부분이 있기는 했지만 바로 잡기는 했다. 시간이 없어서 급하게 잘못 쓴게 명백했다. (나한테는 ㅋㅋ)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
마지막에 질문 시간을 줬는데, 문제 풀다가 미리 생각했던 질문을 다 까먹었다. 그래서 정말 초딩같은 질문을 했다. 미국에서는 정말 백발 노인도 개발자를 할 수 있느냐고. 그랬더니 자기는 44세고 여전히 개발자라고 한다. 그래서 내가 그말을 들으니 다행이라고 했다만, 안하느니만 못한 질문이었다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
면접도 한 5번보면 패턴 파악이 다 되고, 하나도 안 두렵지 않을까 생각이 든다. 다만, 면접에 성공한다는 보장은 할 수 없겠지만 말이다. 남들도 이정도 문제 정도는 다 풀었을테니, 또 로또를 기대할 수 밖에. 잘 되면 좋겠다.&lt;/div&gt;&lt;div class=&quot;footnotes&quot;&gt;
	&lt;ol class=&quot;footnotes&quot;&gt;
		&lt;li id=&quot;footnote_1750_1&quot;&gt;사실 technical하다고 말하기도 어렵다만 이렇게 표현하는 수밖에 없다. &lt;a href=&quot;#footnote_link_1750_1&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
		&lt;li id=&quot;footnote_1750_2&quot;&gt;{1,2,3,4,5}가 {2,3,4,5,1} 이런식으로 변형되는 것을 roated라고 표현한다. &lt;a href=&quot;#footnote_link_1750_2&quot;&gt;[본문으로]&lt;/a&gt;&lt;/li&gt;
	&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1750-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1750-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1750-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[순보의 일기장]</category>
			<category>면접</category>
			<category>인터뷰</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1750</guid>
			<comments>http://blog.sbnet21.com/1750#entry1750comment</comments>
			<pubDate>Wed, 24 Feb 2010 15:10:00 +0900</pubDate>
		</item>
		<item>
			<title>미국서 김연아 경기 보다 생긴일</title>
			<link>http://blog.sbnet21.com/1749</link>
			<description>&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;&lt;div class=&quot;imageblock right&quot; style=&quot;float: right; margin-left: 10px;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/16236E244B84B0B5688E1C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/16236E244B84B0B5688E1C&quot; alt=&quot;김연아 동계 올림픽 쇼트&quot; filemime=&quot;&quot; filename=&quot;cfile4.uf@16236E244B84B0B5688E1C.jpg&quot; height=&quot;254&quot; width=&quot;200&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot; style=&quot;width: 200px&quot;&gt;김연아 동계 올림픽 쇼트&lt;/p&gt;&lt;/div&gt;미국 중부시간으로 6시 30분부터 2010년 밴쿠버 동계올림픽 피겨 쇼트 프로그램이 시작되었다. 김연아가 30명중 23번째로 진행함에도 불구하고 몇몇 경기를 보면서 기다렸다. NBC TV를 보거나 다음에서 제공하는 SBS TV 방송을 보고 있었다. NBC TV는 워낙 다양한 경기를 보여줘서 피겨 스케이팅만 보여주는 것은 아니었다. 다음을 통해 보는 것은 화질이 별로 좋지 않았다.&lt;/font&gt;&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;약 10시 즈음이 되어서야 5조 경기가 시작되었다. 22번째로 출전하는 아사다 마오가 생각보다 잘해서 걱정이었다. 트리플 악셀이라는게 제대로 성공했다고 해설자가 그림까지 그려가며 설명한다. 이제 김연아가 나오고 아사다 마오 점수가 나와야 하는 차례인데...&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;갑자기 TV 신호가 사라진다. No signal or bad signal 이라고 나온다. 3시간을 넘게 이 경기를 보기 위해 기다렸건만 이렇다. 다른 채널은 멀쩡하게 나오면서 올림픽 경기를 중계하는 NBC만 그렇다. 나와 부인 S, 처제 A는 다급해졌다. 마오의 점수도 궁금하고, 김연아가 제대로 경기를 할지도 궁금했다. 다음에서 나오던 SBS TV도 폭주로 서비스가 제대로 되지 않았다. 겨우 A가 어디선가 NBC TV를 스트리밍 해주는 사이트를 가져와서 초 저화질로 경기를 겨우 보았다.&amp;nbsp;마오가 몇점인지도 모르는 상태에서 말이다. 댓글은 볼 수 있었지만, 찌질이들이 하도 거짓말을 올려 놓는 통에 신뢰하지 않았다.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;김연아 경기가 끝나고 역시 NBC TV의 해설자가 &#039;경쟁자(마오)의 훌륭한 경기 뒤에도 이렇게 완벽한 퍼포먼스를 보일 수 있다는게 놀랍다.&#039;는 식으로 말을 했다. 78.5점이 나오고 마오가 73.X점이었다는 사실을 알게되고 우리는 모두 놀랐다.&amp;nbsp;결국 마오의 경기만 커다란 TV로 고화질로 보았지, 보려던 김연아의 경기는 일반 동영상만도 못한 상태로 봤다.&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;미국에서도 아침부터 유나킴(Yu-na Kim)에 대해&amp;nbsp;슈퍼스타라며&amp;nbsp;말이 많고 자료 화면도 많이 보여줬다. 대단하긴하다. 이렇게 큰 무대에서도 떨지도 않고 자기 능력을 다 발휘할 수 있다는게 부럽기도 하다. 내일 모레 경기도 신기록으로 금메달 가자!&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#333333&quot; face=&quot;굴림&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1749-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1749-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1749-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[일상의 한마디]</category>
			<category>NBC</category>
			<category>김연아</category>
			<category>올림픽</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1749</guid>
			<comments>http://blog.sbnet21.com/1749#entry1749comment</comments>
			<pubDate>Wed, 24 Feb 2010 13:56:19 +0900</pubDate>
		</item>
		<item>
			<title>눈오는 텍사스 오스틴</title>
			<link>http://blog.sbnet21.com/1748</link>
			<description>&lt;div&gt;
세계적으로 눈이 많이 오는 올해. 눈보기 어려운 오스틴에도 눈이 내리고 말았다. 설마했는데 아침에 일어나보니 눈이 소복히 쌓여 있었다. 워낙 비나 눈이 오지 않는 지역이라 사람들이 눈에 대처할 수 있을지 걱정이 되기도 했다. 조금만 눈이 와도 괜히 교통 사고가 많이 난다. 뉴스에서 봤는데, 스쿨 버스에 들이받은 승용차가 반파되었다. 다행히도 스쿨 버스는 차체가 좀 높이 있어서 학생들이 크게 다치지는 않은 모양이다. 2명이 병원에 갔다고는 하지만 말이다.&lt;/div&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/171733254B846ADA4C706C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/171733254B846ADA4C706C&quot; alt=&quot;우리집 모습이다. 지붕에 소복히 눈이 쌓였다.&quot; filemime=&quot;&quot; filename=&quot;cfile9.uf@171733254B846ADA4C706C.jpg&quot; height=&quot;407&quot; width=&quot;600&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;우리집 모습이다. 지붕에 소복히 눈이 쌓였다.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;
온난화로 한국에서도 눈을 보는게 쉽지 않게 되었는데 올해는 한국이고 미국이고 눈이 정말 많이 왔다. 결국은 작열하는 태양으로 상징되는 텍사스에도 눈이 내렸다. 지난 겨울 비도 많이 오고, 기대했던 눈까지 오고 &#039;텍사스&#039; 날씨가 아니다.&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/181826254B846AE54BEB0F&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/181826254B846AE54BEB0F&quot; alt=&quot;하루 종일 눈이 내렸다. 대략 0도 근처라 얼지는 않은 듯.&quot; filemime=&quot;&quot; filename=&quot;cfile6.uf@181826254B846AE54BEB0F.jpg&quot; height=&quot;407&quot; width=&quot;600&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;하루 종일 눈이 내렸다. 대략 0도 근처라 얼지는 않은 듯.&lt;/p&gt;&lt;/div&gt;제작년에 미국에 처음 와서 밤에 잠깐 눈이 왔던 것을 제외하고 눈이 내리는 것을 본 것은 처음인 것 같다. 물론 워싱턴에 쌓여있던 눈은 봤지만 말이다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/1517B7254B846AEA56055B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1517B7254B846AEA56055B&quot; alt=&quot;집을 오르내리는 계단에 쌓인 눈과 발자국&quot; filemime=&quot;&quot; filename=&quot;cfile3.uf@1517B7254B846AEA56055B.jpg&quot; height=&quot;600&quot; width=&quot;407&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;집을 오르내리는 계단에 쌓인 눈과 발자국&lt;/p&gt;&lt;/div&gt;우리 집은 2층이라 오르 내릴 때 조심해야한다. 잘못하면 미끄러져서 비명횡사할 수 있다.&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1748-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1748-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1748-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[Living in Austin]</category>
			<category>기상이변</category>
			<category>눈</category>
			<category>오스틴</category>
			<category>텍사스</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1748</guid>
			<comments>http://blog.sbnet21.com/1748#entry1748comment</comments>
			<pubDate>Wed, 24 Feb 2010 10:27:56 +0900</pubDate>
		</item>
		<item>
			<title>[CS]  퀵 정렬 (Quick Sort)</title>
			<link>http://blog.sbnet21.com/1747</link>
			<description>학부 1학년 때 컴퓨터 개론 시간에 C를 배웠던 것 같다. 당시 전혀 학과 공부를 신경쓰지 않던 나는 수업을 통해 배우는 게 별로 없었다. 아직도 C조차 제대로 모르는 이유는 여기에서 기인한다. 어쨌든, 그 때 마지막 과제던가? 퀵 정렬을 C로 짜오라는 과제가 있었던 것 같다. 당시에 퀵 정렬이라하면 최고 수준의 프로그래밍 실력이 있어야 할 수 있다고 생각했다. 마치, 1학년 당시 &#039;학점이  3.0을 넘는 사람은 인간이 아니다&#039;라고 믿었던 것처럼 어이없는 믿음이였지만 말이다. 재귀(recursion)가 들어가면 일단 머리가 돌아가지 않았다.&amp;nbsp;&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;퀵 정렬의 기본 개념을 보면, 주어진 수 중에 임의의 값(pivot)을 기준으로 그 값보다 작은 값과 큰 값으로 나눈 후 이 pivot 값을 가운데 놓은 후, 두 부분을 각각 다시 퀵 정렬한다. 머지 정렬(merge sort)와 비슷한데, 머지 정렬은 단수히 두 분으로 계속 나누다가 합쳐질 때 양쪽에서 작은 값들 부터 뽑아 내어 정렬한다. A={1,3,4}와 B={2,5,9}가 있으면 A,B,A,A,B,B 순으로 앞의 수를 뽑아 {1,2,3,4,5,9}로 만들어 준다. 둘 다 평균 O(nlgn)의 시간 복잡도를 가진다. T(n)=T(n/2)+O(n)을 풀어서 나오는 듯.
&lt;pre class=&quot;brush:c++&quot; name=&quot;code&quot;&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

void swap(int *a, int *b) {
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

void quicksort(int *arr, int s, int e) {
	int p = s;

	if (s &amp;gt;= e) return;	

	for (int i = s; i &amp;lt; e; i++) {
		if (arr[e] &amp;gt;= arr[i]) {
			swap(arr[i], arr[p]);
			p++;
		}
	}
	swap(arr[p], arr[e]);

	quicksort(arr, s, p-1);
	quicksort(arr, p+1, e);	
}

int main() {
	int arr[] = {8,1,3,7,4,15,9,11};
	int arr2[] = {9,4,1,3,24124,12412,412,412, 3,1};

	quicksort(arr, 0, 7);

	for (int i = 0; i &amp;lt; 8; i++)
		cout &amp;lt;&amp;lt; arr[i] &amp;lt;&amp;lt; &quot; &quot;;
	cout &amp;lt;&amp;lt; endl;

	quicksort(arr2, 0, 9);

	for (int i = 0; i &amp;lt; 10; i++)
		cout &amp;lt;&amp;lt; arr2[i] &amp;lt;&amp;lt; &quot; &quot;;
	cout &amp;lt;&amp;lt; endl;
}&lt;/pre&gt;
학부 1학년으로 돌아가면 즐겁게 다시 공부할 수 있을 것 같다. ㅎㅎ&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1747-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1747-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1747-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[프로그래밍]</category>
			<category>C++</category>
			<category>quick sort</category>
			<category>알고리즘</category>
			<category>퀵소트</category>
			<category>퀵정렬</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1747</guid>
			<comments>http://blog.sbnet21.com/1747#entry1747comment</comments>
			<pubDate>Mon, 22 Feb 2010 17:55:14 +0900</pubDate>
		</item>
		<item>
			<title>[2010.02.22] 듀얼 모니터? 좋은 컴퓨터?</title>
			<link>http://blog.sbnet21.com/1746</link>
			<description>미국에 올 때 함께 온 10.1인치 모니터를 가진 나의 휴져쓰(fujitsu) 노트북. 이 녀석과 함께 한지도 벌써 3년이 넘었구나. 당시에는 나름 180만원 씩이나 주고 산 고급 노트북이었는데, 3년이 지난 지금 이제 30만원짜리 넷북도 내 것보다 좋겠다.&amp;nbsp;&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
작은 화면 인터넷 웹서핑을 하는 것도 답답하고, 숙제한다고 워드 프로그램, 익스플로러 몇 개만 띄워 놓아도 프로그램 간 이동도 쉽지 않다. 게다가 프로그램 하거나 데이터 뽑는다고 창을 5-6개 띄워 놓으면, 한 창당 손바닥(손가락 떼고) 만큼의 크기로 띄워 놓아야 한다. C++를 공부해 볼라치고 VC++를 깔아서 컴파일 하면 Hello, World! 조차 수 초가 걸린다. 그냥 학교 리눅스 서버에 접속해서 g++로 컴파일 해보자 치면 소스 코드랑 콘솔창 두개 왔다 갔다 하기도 힘들다. (요즘 쓰는 대안은 Ultraedit에서 ssh console을 소스 위에 살짝 붙인다.)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
2년 전 20.1인치 모니터랑 15인치 모니터 두 대 듀얼로 쓰던 회사 때가 그립다니... 어처구니 없다. 24/26인치 모니터 2대를 듀얼로 쓰고 싶다. 좋은 CPU에 많은 메모리가 달린 컴퓨터를 쓰고 싶다. 어느 &lt;a href=&quot;http://www.choboweb.com/26&quot; target=&quot;_blank&quot; title=&quot;[http://www.choboweb.com/26]로 이동합니다.&quot;&gt;포스팅&lt;/a&gt;에서 봤는데, 모니터가 (적당히) 크고, 듀얼이면 업무 속도가 50% 가까이 빠르다고 한다. 화면이 작으니 좀생이가 되가는 느낌이 든다.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
그러나 현실은... 그런게 있어도 정작 하는것은 웹서핑 뿐? -_-;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1746-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1746-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-1746-2&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>[순보의 일기장]</category>
			<author>조나단봉</author>
			<guid>http://blog.sbnet21.com/1746</guid>
			<comments>http://blog.sbnet21.com/1746#entry1746comment</comments>
			<pubDate>Mon, 22 Feb 2010 14:28:36 +0900</pubDate>
		</item>
	</channel>
</rss>
