<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>blog.wimy.com</title>
		<link>http://blog.wimy.com/</link>
		<description>zelon 의 프로그래밍과 일상</description>
		<language>ko</language>
		<pubDate>Sun, 20 May 2012 19:54:00 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>zelon</managingEditor>
		<item>
			<title>2000년도에 플래시로 만들었던 학과 소개</title>
			<link>http://blog.wimy.com/395</link>
			<description>&lt;p&gt;2000년도에 나는 '미티어 - Meteor' 라는 동아리에서 열심히 활동하고 있었다. 이 때 동아리에 들어온 일감 중에 하나가 플래시로 각과 소개를 만들어달라는 것이었는데, 나는 '화학과', '컴퓨터과학과 - 우리 학과!!!' 를 맡았다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;당연히 디자인 실력은 없었지만 어떻게든 아이디어를 짜내서 연출로 승부했었던 것 같다 ㅋㅋㅋ 이사짐 정리를 하다가 발견되어서 올려본다. 원본 시디(모든 학과가 다 있는 것)를 가지고 있는데, 내 것만 올린다. 혹시나 같이 작업했던 사람은 연락주면 원본 시디를 날려주겠음~ :) 안타깝게도 fla 파일이 아니라 swf 만 있음 ㅋ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;아래 플래시가 안 보이시면 F5 - Refresh 를 시도~ ^^&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;컴퓨터 과학과&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;&quot;&gt;&lt;span id=&quot;sa9c6aa2ca76b9c902ccac257df1387ca4209&quot;&gt;&lt;/span&gt;
			&lt;script type=&quot;text/javascript&quot;&gt;writeCode2(getEmbedCode('http://cfile3.uf.tistory.com/media/2057564A4FB77B5105BC50','300','400','sa9c6aa2ca76b9c902ccac257df1387ca4209','#FFFFFF','', undefined, 'transparent'), 'sa9c6aa2ca76b9c902ccac257df1387ca4209');&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;화학과&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;&quot;&gt;&lt;span id=&quot;s8f0be6d6570c1a1d9e04a057de5aac0e3223&quot;&gt;&lt;/span&gt;
			&lt;script type=&quot;text/javascript&quot;&gt;writeCode2(getEmbedCode('http://cfile22.uf.tistory.com/media/19307F4A4FB77B5E32F7A9','300','400','s8f0be6d6570c1a1d9e04a057de5aac0e3223','#FFFFFF','', undefined, 'transparent'), 's8f0be6d6570c1a1d9e04a057de5aac0e3223');&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;다시봐도... 우리과인 컴퓨터과학과보다 화학과를 더 잘했는듯 ㅎㅎ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/395&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>일반</category>
			<category>flash</category>
			<category>Meteor</category>
			<category>swf</category>
			<category>경북대학교</category>
			<category>미티어</category>
			<category>컴퓨터과학과</category>
			<category>플래쉬</category>
			<category>플래시</category>
			<category>학과소개</category>
			<category>화학과</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/395</guid>
			<comments>http://blog.wimy.com/395#entry395comment</comments>
			<pubDate>Sat, 19 May 2012 19:53:24 +0900</pubDate>
		</item>
		<item>
			<title>크롬 확장 프로그램 만들기 슬라이드와 devfestXKorea 후기</title>
			<link>http://blog.wimy.com/393</link>
			<description>&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:620px;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/193463364FB8CC2B321D85&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/193463364FB8CC2B321D85&quot; filemime=&quot;image/jpeg&quot; filename=&quot;AsqxPBkCIAA9NY3.jpg&quot; height=&quot;465&quot; style=&quot;&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;출처 : @FlaShilver 님 트윗 -&amp;nbsp;&lt;a href=&quot;https://twitter.com/#!/FlaShilver/status/201168005038743552/photo/1&quot;&gt;https://twitter.com/#!/FlaShilver/status/201168005038743552/photo/1&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;2012년 5월 12일 DevFestXKorea 라는 개발자 모임에서 발표를 하였습니다. 구글 코리아에서 후원을 하고, 여러 구글 기술 관련 그룹에서 주최를 하여, '구글 기술을 사용하는 개발자 모임' 정도 되겠습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;여기서 얼마전에 만들어서 공개했던 ClipDic 내용을 가지고, &lt;b&gt;'ClipDic 개발 사례로 보는 크롬 확장 프로그램 개발'&lt;/b&gt; 이라는 제목으로 발표를 했습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://docs.google.com/presentation/d/1e7F8lWyYH6aTNpnrl63_R3OlnjOWWYISr0kOPKBc-Xg/edit&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ 발표 자료 링크 - 구글 문서 링크 ]&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;크롬 확장 프로그램의 Hello World 로 시작해서, 어떤 과정과 API 들을 사용해서 만들었나, 그리고 배포/업데이트를 소개합니다. 발표 중에도 계속 말했지만, '정말 쉽고, 재미있습니다' 한번씩 해보시면 공감하실 겁니다~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;DevFestXKorea 는 원래 구글의 기술에 관심이 많은 저였지만, 그동안 개발자 모임에는 한번도 참석해본 적이 없는데, 이렇게 발표를 하게 된 이유는... 꼭 참석하고 싶었기 때문입니다 ㅋ 원래 꼭 참석하고 싶다는 생각만 하고 있었는데, 일반 참석자로 신청하면, 선별을 한다고 하더라구요;;; 근데 발표자로 신청을 하면 발표자 선정이 안되어도 100% 참석자로 해준다고 해서, 발표자로 신청했습니다 ㅎㅎ 다행히 발표할 꺼리(ClipDic)도 있고해서 발표 신청을 했습니다. 크롬 확장 프로그램 소개 정도로 시작했기 때문에 스크린샷 위주로 쉽게 발표를 해서, '아~ 꽤 쉽구나' 라는 내용은 제법 전달된 것 같습니다. 아마 '뭐 저런걸로 발표를 했나...' 라고 하실지도 ㅠㅜ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;DevFestXKorea 에 가기 위해 경북 구미에서 새벽 3시에 일어나서(ㅠㅜ) 열심히 서울로 올라갔습니다. 플래툰 쿤스트할레라는 멋진 모임 자리에 10시 40분쯤 도착했는데... 역시나 처음 간 개발자 대회... 어색했습니다 ㅋ 등록하고 이름표 목에 걸고, 들어갔는데 좀 뻘쭘했습니다. ㅋ 그나마 많은 사람들이 모여있는 곳 근처(;;)에 앉아서 이런 저런 대화를 잠시 듣다가 제 소개를 할 때쯤 장내 정리가 되면서 키노트 준비;;; (아 나도 대화에 끼고 싶었는데;;) 그렇게 시작했는데, 음료수를 하나 마시러 (무료)Bar 에 갔더니 거기에 제가 아는 친구가 Staff 로 있는게 아니겠습니다. 둘다 서로 깜짝 놀라서 얘기 좀 하다가, 온라인에서만 알고 지내면서 꼭 한번 만나고 싶던 한정일님도 만나고... 그렇게 어색했던 모임이 조금씩 덜 어색해지기 시작했습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;'개발자에게 희망을~' 이라는 메시지의 권순선님의 키노트 후 점심을 먹으며, 저에게 말을 걸어주신(!) 다른 분과 샌드위치 먹으며 얘기 좀 하다, 발표 준비를 위해 3층으로 올라갔습니다. 약간의 문제가 있었지만, 다행히 제가 가져간 노트북으로 발표를 하게 되었습니다. 제가 2번째 발표여서 1번째 발표를 들으면서 그나마 여유가 있어서 제 발표 준비는 잘되었습니다. 참고로 발표자 컴퓨터가 크롬북이었는데 프리젠터랑 미러링이 안되어서, 맥북으로 교체했는데 제가 잘 못써서 그냥 제 노트북으로 발표;; 크롬북을 처음만져봐서(20초쯤?) 감동이었는데, 서울에서는 정말 맥북을 많이 쓰는거 같아서 또다른 세상이었습니다(저도 마음만은 특별시!! 인데 말이죠 ㅋ)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;첫번째 발표는 크롬 개발자 도구의 고급 사용법이었는데, 정말 관심도 있었고, 저에게 딱 필요한 내용들이었습니다. 아무래도 저도 취미 프로젝트에 웹 기술 관련이 많으니 많은 도움이 되었습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;두번째는 제 발표였고;;&lt;/p&gt;&lt;p&gt;&amp;nbsp;세번째는 GWT 와 앱 엔진. GWT 는 안 쓰고 있는데, 그래도 앱 엔진 관련 내용이라 재미있게 들었습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;네번째는 Hello Dart. 전에 동영상 한번 정도 본 것이었는데, 꽤 흥미롭게 소개를 잘 해주셨습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;다섯번째는 Dart 를 활용한 Presentation tool 소개. 얼마나 간단하게 내용을 채울 수 있는 툴인지는 모르겠지만, 짧은 시간에 정말 간결하게 소개해주셨습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;여섯번째는 Google App Engine 활용기. 저랑 비슷한 게임업계에 계시고, App Engine + Python 으로 개발하셨는데, 제가 개발중인 WimyBox(&lt;a href=&quot;http://box.wimy.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://box.wimy.com/&lt;/a&gt;)와 거의 비슷한 기술 체계여서 정말 흥미로웠습니다. 저와 같은 환경에 저와 같은 취미 프로젝트. 그리고 &amp;nbsp;제가 특히 공감갔던, 해결방법들(referer 수정 같은 코드)을&amp;nbsp;보니 저와 비슷하게 여러 관문들을 여러개 통과하셨다는 느낌이 많이 들었습니다. 그리고 유쾌한 발표와 진행이 저의 마음을 많이 끌었습니다. 나중에 발표자인 '나자영' 님과 많은 얘기를 나눴는데 공감대가 많은 만큼 재미있는 얘기 많이 나눌 수 있었습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;일곱번째는 Google Apps Script 활용. Apps script 는 저의 딸 '나윤이' 의 이름을 지을 때 사용하고, wimy.com 도메인의 관리 때문에 몇년간 사용 중이어서, 역시 흥미롭게 들었습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;마지막 여덟번째는 Google App Engine 의 발전 방향과 이를 응용한 소프트웨어 개발. Google App Engine 으로 스타트업을 하고 계셨던 분의 발표였는데, 정말 '전문가'의 내용으로 발표해주셨습니다. 많은 얘기를 나눠보고 싶었는데, 아이가 아파서 급하게 가셨다는 ㅠㅜ 너무 아쉬웠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;DevFestXKorea 에는 총 3개의 트랙(Web &amp;amp; Cloud, Mobile, Emerging)이 있었는데 저는 계속 Web &amp;amp; Cloud 만 들었습니다. 다른 트랙들도 관심이 있었는데, 이제 하나씩 살펴볼 예정~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;모든 발표가 끝나고 특정 주제에 관심있는 사람들끼리 smalltalk 를 했는데 저는 제 발표 주제인 크롬을 버리고;; App Engine 으로 가서 재미있는 얘기를 많이 나눴습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;사실 개발자 모임에 처음가면서 조금 막연한 기대를 가지고 있었는데, 좋은 발표를 듣고, 즐거운 분들과 만나고, 개발자로써의 자극을 제대로 얻어서 갑니다. 그리고 뒤풀이 시간에서의 많은 즐거운 대화, 공감대. 정말 멋진 경험이었습니다. 그리고 건배 제의를 'Hello~ World~' 로 하는 진짜 개발자 분위기가 너무 마음에 들었습니다. 그리고 저도 어느새 개발 10년차가 되는데, 우리의 미래, 희망인 젊은 개발자분들과 함께 얘기할 시간이 있어서(많이는 못했지만;;) 즐거웠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;발표 자료를 트위터와 구글 플러스에 공유하고, 리트윗을 받고, 팔로워가 늘고, 제 슬라이드를 많은 사람들이 보고 있고(지금도 4분이나 보고 계시네요), 아무도 관심이 없던 clipdic 을 벌써 fork 하신 분도 있고, 마치 개발자 세상에 데뷔를 한 기분입니다. ZViewer(http://zviewer.wimy.com/)는 소스 공개를 한지 7년쯤 될 동안 딱 2번 패치를 받았는데;; 여튼 정말 좋은 경험을 해봅니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;행사 준비해주신 많은 분들께 감사드리며, 행사에 와서 함께 즐겨주신 많은 분들께도 감사를 드립니다. 앞으로도 즐거운 모임에서 많이 만났으면 합니다~~~ 개발자 여러분들 화이팅입니다~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:620px;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/143EDF364FB8CC7021034B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/143EDF364FB8CC7021034B&quot; filemime=&quot;image/jpeg&quot; filename=&quot;blog5.jpg&quot; height=&quot;620&quot; style=&quot;&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;출처 : 이원제님 구글 플러스 -&amp;nbsp;&lt;a href=&quot;https://plus.google.com/107621265594457706915/posts/VsvLVVgLGKG&quot;&gt;https://plus.google.com/107621265594457706915/posts/VsvLVVgLGKG&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/393&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>IT</category>
			<category>AppEngine</category>
			<category>chrome</category>
			<category>chrome extension</category>
			<category>clipdic</category>
			<category>devfestxkorea</category>
			<category>dfxkorea</category>
			<category>gdg</category>
			<category>Google</category>
			<category>gtug</category>
			<category>개발자모임</category>
			<category>구글</category>
			<category>크롬</category>
			<category>크롬 확장</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/393</guid>
			<comments>http://blog.wimy.com/393#entry393comment</comments>
			<pubDate>Mon, 14 May 2012 01:40:32 +0900</pubDate>
		</item>
		<item>
			<title>김프(gimp)에서 Round Corner Filter 를 사용할 수 없을 때</title>
			<link>http://blog.wimy.com/392</link>
			<description>&lt;p&gt;김프에서도 포토샵과 마찬가지로 다양한 필터를 제공하는데, 그 중에 Round Corner 는 다음과 같은 효과를 주어서 스크린샷 등을 첨부하거나 할 때 꽤 멋진 효과를 줄 수가 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:158px;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/174A564C4FAA30B41798BB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/174A564C4FAA30B41798BB&quot; filemime=&quot;image/jpeg&quot; filename=&quot;original.png&quot; height=&quot;114&quot; style=&quot;&quot; width=&quot;158&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;위의 이미지를 아래의 Round Corner 를 적용하면,&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:492px;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/181CE1444FAA345C35BB12&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/181CE1444FAA345C35BB12&quot; filemime=&quot;image/jpeg&quot; filename=&quot;roundcorner.png&quot; height=&quot;565&quot; style=&quot;&quot; width=&quot;492&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;아래의 이미지가 된다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:188px;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/1736C2394FAA30C6268B87&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/1736C2394FAA30C6268B87&quot; filemime=&quot;image/jpeg&quot; filename=&quot;roundcorner.png&quot; height=&quot;144&quot; width=&quot;188&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;그런데&amp;nbsp;김프를 사용하다보면, 필터 -&amp;gt; 장식 -&amp;gt; Round Corner 가 비활성화(disabled)되어 사용할 수 없는 경우가 있다. 특정 필터들은 특정 조건이 만족되어야만 사용할 수 있는데, Round Corner 의 경우 알파 채널(Alpha Channel)이 존재하면 사용할 수가 없다. 그러므로 Round Corner 를 사용하려면 알파 채널을 제거해줘야 한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;알파 채널을 제거하려면, 레이어(Layer) -&amp;gt; 투명도(Transparency) -&amp;gt; 알파 채널 제거하기(Remove Alpha Channel) 를 하면 된다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:596px;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/144FB2404FAA35F42921BE&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/144FB2404FAA35F42921BE&quot; filemime=&quot;image/jpeg&quot; filename=&quot;remove_alpha_channel.png&quot; height=&quot;495&quot; style=&quot;&quot; width=&quot;596&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ps : 이 블로그가 김프 관련 블로그는 아니지만, round corner 를 사용하여 작업 중 이상하게 동작하지 않을때가 있어서 검색해봐도 내가 원하는 답이 없었는데, 다행히 알파 채널이 문제란 걸 알아내서&amp;nbsp;올려봄~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/392&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>오픈소스</category>
			<category>alpha channel</category>
			<category>gimp</category>
			<category>round corner</category>
			<category>김프</category>
			<category>둥근 모서리</category>
			<category>알파 채널</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/392</guid>
			<comments>http://blog.wimy.com/392#entry392comment</comments>
			<pubDate>Wed, 09 May 2012 18:16:51 +0900</pubDate>
		</item>
		<item>
			<title>ZViewer 0.8.0 배포합니다</title>
			<link>http://blog.wimy.com/391</link>
			<description>&lt;p&gt;&amp;nbsp;정말 2년 9개월 만에 새로운 버젼을 배포합니다. 감회가 새롭네요. 역시 본인이 프로그램을 써야(!!) 계속 발전이 되어갑니다. 그리고 시간이 있어야 ㅋ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;자세한 내용은 &lt;a href=&quot;http://zviewer.wimy.com/9&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;[ 링크 ]&lt;/a&gt; 를 따라가세요~&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/391&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>zviewer</category>
			<category>zviewer</category>
			<category>zviewer 0.8.0</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/391</guid>
			<comments>http://blog.wimy.com/391#entry391comment</comments>
			<pubDate>Sun, 29 Apr 2012 23:08:05 +0900</pubDate>
		</item>
		<item>
			<title>우분투 리눅스 11.10 에서 12.04 로 업그레이드 후기 - ubuntu upgrading from 11.10 to 12.04</title>
			<link>http://blog.wimy.com/390</link>
			<description>&lt;p&gt;어제 저녁에 우분투 11.10 에서 12.04 로 업그레이드를 했다. 업그레이드에 대한 후기를 적어본다. 실시간으로 google plus 에 올렸던 것을 정리도 할겸~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; &quot;&gt;업그레이드 환경&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;OS : 64bit ubuntu 11.10 커스터마이징 거의 안한 상태&lt;/p&gt;&lt;p&gt;RAM : 12GB&lt;/p&gt;&lt;p&gt;CPU : i7 2.8GHz&lt;/p&gt;&lt;p&gt;GPU : GeForce GTS 250&lt;/p&gt;&lt;p&gt;APT Repository : daum&lt;/p&gt;&lt;p&gt;LAN : 평균 1메가/초 속도&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;위와 같은 환경에서 업그레이드 시작. 업그레이드 시작 전에 11.10 에서의 최신 업데이트는 다 한 상태.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; &quot;&gt;업그레이드 과정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;업그레이드를 시작하면 새로운 패키지를 다운받는데, 약 30분 정도 걸렸음.&lt;/p&gt;&lt;p&gt;새로운 패키지를 설치하는데, 설치 시작 부분 - libc-bin 패키지에서 설치 과정이 멈췄음. 그래서 혹시나하고 아래 사진의 빨간 네모 부분을 클릭해서 보니, 'libc 를 업그레이드 하기 위해서는 특정 서비스들을 재시작해야한다. 확인하세요' 이런 내용을 띄우고 멈춰있었음. 그래서 터미널을 클릭하고, tab -&amp;gt; enter 눌러서 계속 진행시킴(아래 사진은 그 부분은 넘어간 터미널 화면). 이거 안 눌러봤으면 업그레이드 프로그램이 뻗었는 줄 알았을 듯;;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:620px;&quot;&gt;&lt;a href=&quot;http://cfile21.uf.tistory.com/original/1345D6384F9D167405D5CB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile21.uf.tistory.com/image/1345D6384F9D167405D5CB&quot; filemime=&quot;image/jpeg&quot; filename=&quot;ubuntu_upgrading.png&quot; height=&quot;666&quot; style=&quot;text-align: center; &quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;여튼 설치 시에는 꼭 터미널 열어놓고 진행 강추~!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;업그레이드 과정 중에 꽤 많은 32bit 전용 라이브러리 들이 제거됨을 알려줌. 아마 64bit 전용으로 대체되는 것 같은데, 이것 때문인지 체감 속도가 좀 빨라졌음.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;패키지 업그레이드 과정은 약 30분 만에 종료. 총 설치 시간은 넉넉잡아 1시간 30분 정도 걸린듯.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;업그레이드 후 재부팅. 부팅은 잘됨. 다만 부팅 후 잘 사용 중이던 무선 마우스가 인식이 안되어서, USB 리시버를 뺐다가 다시 연결하니 잘 동작함.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; &quot;&gt;12.04 기본 사용 소감&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;'체감할 수 있을 정도로 속도가 빨라짐' 노틸러스(파일 탐색기) 창을 잡고 이리저리 흔들었을 때 11.10 보다 확실히 반응이 빠름&lt;/p&gt;&lt;p&gt;이전 버젼의 한글 번역 '깔기' 가 '설치' 로 돌아와서 (개인적으로 매우) 좋음&lt;/p&gt;&lt;p&gt;기본 글꼴이 '나눔고딕' 이 되어서 인지, 전반적으로 한글이 깔끔해짐(네이버 매우 감사~)&lt;/p&gt;&lt;p&gt;11.10 에서의 ibus 버그 때문에한글IME 로 나비를 쓰고 있었는데 다시 ibus 로 돌아와서, 시작시 '한글 패널' 이 없어서 좋음&lt;/p&gt;&lt;p&gt;MyUnity 프로그램에서 이것저것 unity 설정할 수 있어서 좋음(마운트된 드라이버를 unity 에 안 보이게 해줘서 좋음)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; &quot;&gt;결론&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;총 설치 약 1시간 30분 정도 걸림&lt;/p&gt;&lt;p&gt;&amp;nbsp;전반적으로 속도 향상이 있음&lt;/p&gt;&lt;p&gt;&amp;nbsp;업그레이드는 꽤 잘됨&lt;/p&gt;&lt;p&gt;&amp;nbsp;11.10 이라면 12.04 로 무조건 추천하고 싶을 정도(사실 안할 이유가 없잖아!! LTS 이기도 하고 ㅋㅋ)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/390&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>오픈소스</category>
			<category>11.10</category>
			<category>12.04</category>
			<category>LTS</category>
			<category>ubuntu</category>
			<category>Upgrade</category>
			<category>업그레이드</category>
			<category>우분투</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/390</guid>
			<comments>http://blog.wimy.com/390#entry390comment</comments>
			<pubDate>Sun, 29 Apr 2012 19:33:13 +0900</pubDate>
		</item>
		<item>
			<title>구글 코드잼 2012 round 1A Password 후기 및 문제 풀이</title>
			<link>http://blog.wimy.com/389</link>
			<description>&lt;p&gt;2012 google codejam round 1A :&amp;nbsp;&lt;a href=&quot;http://code.google.com/codejam/contest/1645485/dashboard&quot;&gt;http://code.google.com/codejam/contest/1645485/dashboard&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; &quot;&gt;&lt;b&gt;대회 후기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;오전 8시 30분에 시작인 줄 알고 8시에 겨우 일어났는데 10시부터 시작이었다 -_-;;; 뭐 여튼 잠도 좀 깨고, 새로나온 구글 드라이브 구경 좀 하다가(WeVideo 라는 app 이 참 좋더라 -0-) 10시부터 시작했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;역시나 문제의 정확한 해석이 힘들었다. 여태까지 영어를 대략적인 의미로만 파악하다가 조동사 하나 하나가 중요한 &lt;b&gt;'문제'&lt;/b&gt;를 풀려니 ㅠㅜ 1번 문제의 의미를 파악하고 나니 30분이 지났다. 나중에 확인해보니 round 1A 1등한 사람은 2번 large 문제까지 다 푼 시간... 난 무엇을 하고 있는것인가 ㅠㅜ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;round 1 은 A,B,C 3개 각 round 의 1000등까지를 round 2 로 보내준다. 난 1번 small 문제 겨우 풀고(문제 해석에 30분, 문제 풀이에 1시간 30분이 걸림 ㅠㅜ)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;20점(1번 small, large 둘다 풀면)이면 3000등 안에 드는데, 난 10점. 뒤에서 100등&amp;nbsp;ㅠㅜ. large 문제는 맞췄다고 생각했는데 2가지의 실수를 했다. 소수점 계산을 하는데 float 을 쓴 거랑 재귀함수(recursive function)로 문제를 풀었다는 것.&amp;nbsp;소수점 나오면 무조건 double 을 써야하고,&amp;nbsp;재귀함수는 for loop 과 배열로 계산했었어야 했다. 다음번에는 실수하지 말자 ㅠㅜ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;일단 추후의 대회나, 처음 (취미로)&amp;nbsp;코드잼을 시작하는 사람을 위해 구글 문서(https://docs.google.com/document/d/1gfJrZdn_dOxwL3cyfYw7iqezsuyI89SnB0yY-pxNoZU/edit) 하나 만들어 둔다. 계속 정리하고, 보완할 예정~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt; &quot;&gt;문제 내용&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;2012년 Google Codejam round 1 A - Password problem&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(의역을 좀 함)키보드를 안보고 암호를 입력하는데, 특정 키를 제대로 잘 누를 확률이 주어진다. 그리고 암호를 입력 도중 어느 순간 이후로는 키보드를 보면서 제대로(!) 입력을 했을 때, 최소 몇번을 눌러야 암호를 제대로 입력할 수 있을까의 문제이다.&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;좀 더 풀어보면, 현재까지 입력한 암호의 자리수와 전체 암호의 자리수, 그리고 각 자리의 키를 잘 입력할 확률이 주어졌을 때, 가장 작은&amp;nbsp;expected 값을 구하는 것이다. expected 값은 특정 상황에서 몇번 더 키를 입력해야하는지에 대한 값이며, 다음과 같이 구할 수 있다. 단, 현재 상황에서 '백스페이스키로 한자리를 지우거나', '엔터키로 현재 입력을 그냥 넣어서 틀리고 다시 더 입력할 수 있다', 그리고 '현재 상황 이후의 모든 입력은 100% 제대로 입력한다', '백스페이스, 엔터키는 키를 한 번 더 입력한 것으로 취급한다' '특히 암호를 다 입력한 마지막은 항상 엔터키를 입력한다'&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:462px;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/120D933E4F9B926115A3FD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/120D933E4F9B926115A3FD&quot; filemime=&quot;image/jpeg&quot; filename=&quot;googlecodejam.png&quot; height=&quot;110&quot; style=&quot;&quot; width=&quot;462&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;만약 암호가 &quot;guest&quot; 이고 현재 2자리의 암호를 입력했고, 첫번째 자리를 제대로 입력할 확률이 60%, 두번째 자리도 60% 라면, 위와 같이 expected 값을 구할 수 있다. &quot;gu&quot; 는 제대로 &quot;gu&quot; 를 입력했다는 뜻이고, &quot;gX&quot; 는 &quot;g&quot; 는 제대로 입력했고, &quot;X&quot; 는 &quot;u&quot; 를 입력해야하는 자리에 다른 글자를 입력했다는 뜻이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;위의 그림은 다음과 같은 입력값과 출력값을 가지게 된다.&lt;/p&gt;&lt;p&gt;입력:&lt;/p&gt;&lt;p&gt;2 5&lt;/p&gt;&lt;p&gt;0.6 0.6&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;출력:&amp;nbsp;&lt;/p&gt;&lt;p&gt;7.0&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&quot;guest&quot; 는 5개의 글자이고, 현재까지 입력된 문자는 2개 이므로, &quot;2 5&quot; 로 한 줄 입력을 받게 되고, 첫째 자리를 제대로 입력할 확률이 60% -&amp;gt; 0.6, 두번째 자리도 60% 이므로 0.6이 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;그리고 위의 그림에서 Expected 값이 가장 작은 값이 7 이므로, 7.0을 출력하게 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;위의 그림을 좀 더 분석해보면, Probability &quot;gu&quot; 는 첫째자리도 맞고, 둘때자리도 맞으므로 0.6 * 0.6 = 0.36 의 확률이다. &quot;gX&quot;, &quot;Xu&quot;, &quot;XX&quot; 는 마찬가지.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Keystrokes if I keep typing 은 현재 &quot;gu&quot;, &quot;gX&quot; 등을 입력했는 상황에서 각각 몇번 더 키를 입력해야 암호를 맞출 수 있다는 것이다. &quot;gu&quot; 가 4 인 이유는 e,s,t,엔터 를 더 입력하면 되므로 4번. &quot;gX&quot; 는 e,s,t,엔터 입력하면 암호가 틀리게 되므로 여기서 다시 g,u,e,s,t,엔터 를 입력해서 4번+6번해서 10번이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Keystrokes if I press backspace once 중 &quot;gu&quot; 는 백스페이스,u,e,s,t,엔터 이므로 6번. &quot;Xu&quot; 는 백스페이스,u,e,s,t,엔터 하면 암호가 틀리므로 다시 g,u,e,s,t,엔터. 그래서 6번+6번해서 12번 이런식이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Keystrokes if I press enter right away 는 모두 7 인 이유가 엔터를 바로 넣어서 현재 입력중인 암호는 틀려버리고 다시 g,u,e,s,t,엔터 해서 1번+6번 = 7번이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;아... 다시 적어보니 이것도 쉬운 로직은 아니구나 ㅋ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; &quot;&gt;&amp;nbsp;문제해결과정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;이 문제를 저렇게 진짜 테이블을 다 그리려고 하니 머리가 아프기도 하고, 저 테이블을 진짜로 그리려면, large 문제를 도저히 해결할 수 없겠다는 생각이 들었다(large 문제는 암호의 길이가 10만이므로 이것을 제곱한 만큼 하려면 도저히 풀 수가 없다..... 사실 10만 제곱이 얼만큼 걸리는가해서 그냥 이중for 를 돌려봤는데 꽤 오래걸림;; 그리고 여기서 다시 10만 번을 돌아야하므로 일단 저 테이블을 그리는 건 포기.&lt;/p&gt;&lt;p&gt;&amp;nbsp;그래서 다시 손으로 문제를 계속 풀어보기 시작함. 분명히 무슨 규칙이 있을거라는 생각에... 일단은 '가지치기' 가 생각나서, 특정 최소 값을 구하고 나머지는 표를 안 그래도 될 거 같다는 생각을 해봤는데, 결과값이 '계산된 값' 이라서 '어? 그럼 그려야하나? -_-' 싶었는데 이것도 아니었음.&lt;/p&gt;&lt;p&gt;다시 이런저런 생각을 해보다가 문득 떠오른 것이 '백스페이스를 한번 하면 이전 상태가 된다' 였음. 즉, 현재 입력된 암호가 5개이고, 백스페이스를 한번 입력하면, '입력된 암호가 4개인 상태' 가 된다는 것. 결과적으로는 고등학교 때 배운 점화식 문제;; An = An-1 + 9 같은 ㅋ&lt;/p&gt;&lt;p&gt;&amp;nbsp;결론적으로는 테이블을 3부분으로 나누어보았다.&amp;nbsp;&lt;/p&gt;&lt;ol style=&quot;list-style-type: decimal; &quot;&gt;&lt;li&gt;Keep : Keystrokes if I keep typing&lt;/li&gt;&lt;li&gt;Backspace : Keystrokes if I press backspace once twice.......&lt;/li&gt;&lt;li&gt;EnterNow :&amp;nbsp;Keystrokes if I press enter right away&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&amp;nbsp;그래서, 현재 암호의 갯수가 주어졌을 때 Keep 부분, Backspace 부분, EnterNow 부분 중 expected 가 최소인 값을 찾는 것이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;Keep 은 간단히 계산이 가능하다. (현재까지 입력한 암호가 맞을 확률 * 남은 키입력 갯수 + 현재까지 입력한 암호가 틀릴 확률 * (남은 키입력 갯수)) 이다. 다만, 암호가 맞을 때는 남은 키입력 갯수가 (전체 암호 길이 - 현재까지 입력한 길이 + 1 ) 이지만(엔터가 +1), 암호가 틀릴 때는 남은 키입력 갯수가 (전체 암호길이 - 현재까지 입력한 길이 + 1 ) + ( 전체 암호길이 + 1) 이 되는 것이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;Backspace 부분은 나중에 다시~&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;EnterNow 부분도 Keep 과 비슷하게 계산할 수 있다. 다만, 무조건 현재 상황에서 엔터이므로 모두가 같은 값을 가진다. ( 1 + 전체 암호 길이 + 1 ) 이된다. +1은 엔터키.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;이렇게 생각해보면 다음과 같은 점화식을 만들 수 있다. N 이 현재까지 입력된 암호의 길이라고 하면, 우리가 원하는 값은 다음과 같이 3개의 값 중 최소값(min) 이다. minimumExpected(N-1) 에 +1 을 하는 이유는 한글자를 지우기 위해서 backspace 를 눌렀기 때문이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;minimumExpected(N) = min ( Keep, minimumExpected(N-1)+1 , enterNow )&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;점화식에서 항상 등장하는 시작값은, '암호를 하나도 입력하지 않은 상태' 이다. 그러므로 minimumExpected(0) 은 암호 전체 길이 + 1 이다. 마지막의 +1은 엔터.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;정리해보면, N 자리까지 암호가 입력되었을 때는, N-1 자리까지 암호가 입력되었을 때의 값을 구하고, keep, enternow 값을 계산하면 된다. keep, enternow 는 쉽게 확률을 곱하고, 더하면 되고, minimumexpected 는 재귀호출로 구할 수 있다.&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;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;#include &amp;lt;algorithm&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;vector&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;iostream&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;sstream&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;using namespace std;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;stringstream emptyOut;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#define DP_ON 0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#if DP_ON&lt;/div&gt;&lt;div&gt;#define DP std::cout &amp;lt;&amp;lt; &quot;[DebugPrint]:&quot;&lt;/div&gt;&lt;div&gt;#else&lt;/div&gt;&lt;div&gt;#define DP emptyOut&lt;/div&gt;&lt;div&gt;#endif&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int getintline()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;string data;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;getline(cin, data);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;stringstream s;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;s &amp;lt;&amp;lt; data;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int ret;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;s &amp;gt;&amp;gt; ret;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return ret;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;vector &amp;lt; int &amp;gt; getintvectorline()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;vector &amp;lt; int &amp;gt; ret;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;string data;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;getline(cin, data);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;stringstream s, debugstream;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;s &amp;lt;&amp;lt; data;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;debugstream &amp;lt;&amp;lt; &quot;getintvector : &quot;;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;while ( !s.eof() )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;int v;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;s &amp;gt;&amp;gt; v;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;debugstream &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; v;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;ret.push_back(v);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;DP &amp;lt;&amp;lt; debugstream.str().c_str() &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return ret;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;vector &amp;lt; double &amp;gt; getdoublevectorline()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;vector &amp;lt; double &amp;gt; ret;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;string data;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;getline(cin, data);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;stringstream s, debugstream;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;s &amp;lt;&amp;lt; data;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;debugstream &amp;lt;&amp;lt; &quot;getintvector : &quot;;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;while ( !s.eof() )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;double v;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;s &amp;gt;&amp;gt; v;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;debugstream &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; v;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;ret.push_back(v);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;DP &amp;lt;&amp;lt; debugstream.str().c_str() &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return ret;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;vector &amp;lt; double &amp;gt; probabilities;&lt;/div&gt;&lt;div&gt;double expected(double currentTyped, double totalCharacters)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if ( currentTyped == 0 )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;return totalCharacters + 1.0;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;double expected_previous = expected(currentTyped-1, totalCharacters) + 1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;double keepTyping = 0.0f;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{// calc keep&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;double all_ok_probability = 1.0;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;for ( int i=0; i&amp;lt;currentTyped; ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;all_ok_probability *= probabilities[i];&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;keepTyping = all_ok_probability * (totalCharacters-currentTyped+1.0);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;keepTyping += (1.0-all_ok_probability) * (totalCharacters-currentTyped+1.0+totalCharacters+1.0);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;double enterNow = 1.0 + totalCharacters + 1.0;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;double min = expected_previous &amp;lt; keepTyping ? expected_previous : keepTyping;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;min = min &amp;lt; enterNow ? min : enterNow;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return min;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void doOperation(int caseNo)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;vector &amp;lt; int &amp;gt; singleline = getintvectorline();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int A_currentTypedCharacters = singleline[0];&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int B_totalToTypeCharacters = singleline[1];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;probabilities = getdoublevectorline();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;double min = expected(A_currentTypedCharacters, B_totalToTypeCharacters);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;cout &amp;lt;&amp;lt; &quot;Case #&quot; &amp;lt;&amp;lt; caseNo &amp;lt;&amp;lt; &quot;: &quot;;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;cout.setf(ios::fixed);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;cout.precision(10);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;cout &amp;lt;&amp;lt; min &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int main(int argc, char * [])&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;DP &amp;lt;&amp;lt; &quot;Start testing...&quot; &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int numberOfCase = getintline();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;for ( int i=0; i&amp;lt;numberOfCase; ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;doOperation(i+1);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return 0;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;그리고 이번 round 에서 1등한 사람의 소스는 다음과 같다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;div&gt;#include &amp;lt;cstdio&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;iostream&amp;gt;&lt;/div&gt;&lt;div&gt;using namespace std;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;double p[100001];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;main() {&lt;/div&gt;&lt;div&gt;&amp;nbsp; int T, A, B, prob = 1;&lt;/div&gt;&lt;div&gt;&amp;nbsp; for (cin &amp;gt;&amp;gt; T; T--;) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; cin &amp;gt;&amp;gt; A &amp;gt;&amp;gt; B;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; A; i++) cin &amp;gt;&amp;gt; p[i];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; double ret = 2+B;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; double pr = 1.0;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt;= A; i++) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ret = min(ret, pr * ((A-i)+(B-i)+1) + (1-pr) * ((A-i)+(B-i)+1+B+1));&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pr *= p[i];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; printf(&quot;Case #%d: %.10lf\n&quot;, prob++, ret);&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;역시 코드잼은 위와 같이 짜는 것인가보다 ㅠㅜ&amp;nbsp;&amp;nbsp;(그리고 내가 만들어놓은 유틸리티 함수들은 다 쓸모없는 거였;;&amp;nbsp;) 참고로 이전 구글 코리아 코드잼 대회도 1등의 소스를 보면 한 화면을 넘어가지 않더라;;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 남의 코드를 보면 이해는 힘들지만 배울 점이 많다. 군더더기 없는 깔끔한 코드 +_+ 나는 재귀호출을 통해서, N, N-1, N-2 를 구해가는데, 처음부터 1,2,3 으로 시작해서 배열에 넣고 있다. 나도 다음부터는 저렇게 배열로 해야겠다 큭&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;large 입력에 대해 속도를 비교해보면.... 처참하다 ㅋ 그래도 나도 문제를 풀었다구!!!! 라고 위안삼아본다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/389&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>개발관련</category>
			<category>code jam</category>
			<category>Contest</category>
			<category>GCJ</category>
			<category>Google</category>
			<category>google codejam</category>
			<category>구글 코드잼</category>
			<category>대회</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/389</guid>
			<comments>http://blog.wimy.com/389#entry389comment</comments>
			<pubDate>Sat, 28 Apr 2012 16:46:23 +0900</pubDate>
		</item>
		<item>
			<title>구글 코드잼 준비 및 Dancing With the Googlers 풀이</title>
			<link>http://blog.wimy.com/386</link>
			<description>&lt;div&gt;구글 코드잼(&lt;a href=&quot;http://code.google.com/codejam&quot;&gt;http://code.google.com/codejam&lt;/a&gt;) 은 일종의 알고리즘 대회이다. 주어진 문제를 원하는 프로그래밍 언어로 풀고, 입력값을 받아서 출력값을 소스코드와 함께 제한된 시간 안에 제출하면 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;각 문제당 small/large 2종류의 입력값이 있고, 이에 따른 점수가 다르며, small 문제를 제대로 풀어야 large 문제를 풀 수 있다. small 문제는 한번 틀리면 다시 제출이 가능하지만, large 문제는 한번만 제출이 가능하며 대회 끝난 후 정답 체크를 해준다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;일단 해당 사이트에 들어가면 연습 문제를 풀어볼 수 있는데, 연습문제를 풀다보면 어떤 형태로 문제가 제출되는지를 알 수 있다. 그리고 모든 문제가 예제 입력/예제 결과가 있는데, 이를 이용하면 TDD(Test Driven Development) 형태로 자신의 프로그램을 테스트해가면서 프로그래밍할 수 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;지난 구글 코리아 한국대회를 일주일 정도(퇴근 후 집에서) 준비하면서, 몇 문제를 풀어보면서 실제 대회에서 쓰일 기본 코드와 unittest 환경을 만들었다. 아무래도 주 사용언어는 C++ 이고, 10년 정도 써온 Visual Studio 를 쓰면 좋았겠지만, 무료 개발툴만 사용이 권장되었고, 마침 집에서는 linux desktop(ubuntu)을 쓰고 있어서 linux + gcc + python + vim 을 사용하기로 했다. 사실 많이 익숙하지는 않지만, 그래도 제법 손에 익어있는 상태라서 써보기로 했다. 참고로 구글 코리아 한국대회는 예선통과 실패. 이번 세계 대회는 예선 통과 ㅋ 딱히 공부는 안 했는데 경험 문제도 있겠지만, 구글 코리아 문제가 훨씬 어렵게 나온듯;;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;일단 unittest 환경은 간단히 직접 만들어보았는데, test.in 파일을 입력받아서, test.expect 의 내용과 같은 출력을 해주느냐를 비교하기로 했다. 코드잼 사이트의 문제는 항상 예제 입력/예제 결과가 있으므로, 예제 입력을 copy/paste 해서 test.in 파일에 넣고, 예제 결과를 test.expect 에 넣고 python 으로 내 프로그램을 동작시키고 입력을 test.in 에서 받아 넣고, 출력을 test.expect 파일과 비교하는 것이다. 그리고 unittest 가 failed 면, 간단히 gvim 으로 어떻게 잘못되었는지 diff 를 보여주도록 했다.&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;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;div&gt;#!/usr/bin/python&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;import os&lt;/div&gt;&lt;div&gt;import subprocess&lt;/div&gt;&lt;div&gt;import filecmp&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;testInputFilename = &quot;test.in&quot;&lt;/div&gt;&lt;div&gt;testExpectFilename = &quot;test.expect&quot;&lt;/div&gt;&lt;div&gt;testExeFilename = &quot;./a.out&quot;&lt;/div&gt;&lt;div&gt;testCompareOutputFilename = &quot;test.result&quot;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def checkFile(filename):&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if os.path.exists(filename) == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;print(&quot;No &quot; + filename + &quot; file&quot;)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;return False;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return True&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def checkCondition():&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;allOK = True&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if checkFile(testInputFilename) == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;allOK = False&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if checkFile(testExpectFilename) == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;allOK = False&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if checkFile(testExeFilename) == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;allOK = False&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return allOK&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def checkResult():&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;print(&quot;Checking result...&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if checkFile(testCompareOutputFilename) == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;return False&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if checkFile(testExpectFilename) == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;return False&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;print(&quot;###################################################&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if filecmp.cmp(testCompareOutputFilename, testExpectFilename) == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;print(&quot;[FAILED] Test failed&quot;)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;print(&quot;###################################################&quot;)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;#os.system(&quot;diff -urN &quot; + testExpectFilename + &quot; &quot; + testCompareOutputFilename)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;os.system(&quot;gvim -d &quot; + testCompareOutputFilename + &quot; &quot; + testExpectFilename + &quot; &amp;amp;&quot;)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;else:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;print(&quot;[OK] Test pass&quot;)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;print(&quot;###################################################&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;print(&quot;###################################################&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def compile():&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;os.system(&quot;rm ./a.out&quot;)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;os.system(&quot;g++ -g a.cpp&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return os.path.exists(&quot;./a.out&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def testmain():&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if compile() == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;return&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if checkCondition() == False:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;return&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;fin = open(testInputFilename, &quot;r&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;results = subprocess.check_output(testExeFilename, stdin=fin)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;print(results)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;fresult = open(testCompareOutputFilename, &quot;w&quot;)&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;fresult.write(results)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;fresult.close()&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;fin.close()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if results.find(&quot;DebugPrint&quot;) == -1:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;checkResult()&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;else:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;print(&quot;[DebugPrint mode is on]&quot;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;if __name__ == &quot;__main__&quot;:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;testmain()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;위의 unittest 를 쓸 때는&amp;nbsp;항상 소스 파일 명을 a.cpp 로&amp;nbsp;저장하고, codejam.py 를 실행시킨다. 그러면 위의 코드가 컴파일과 실행, test.in 에서의 입력, test.expect 와의 비교를 하는 것이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;이 예제 입력/결과를 통한 unittest 를 통과하면, 실제로 코드잼 사이트에서 실제 입력을 받아서 실행시키고, 제출하였다. 대부분 small 문제는 거의 바로 통과가 되었다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;일단 위와 같은 방법으로 코드잼을 위한 기본 unittest 설정을 하였고, 최근에 코드잼에 있었던 &lt;a href=&quot;http://code.google.com/codejam/contest/dashboard?c=1460488#s=p1&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&quot;Dancing With the Googlers&quot;&lt;/a&gt; 문제를 한번 풀어보자.&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;&amp;nbsp;춤을 추는 구글직원을 보고 3명이 평가를 한다. 한 명의 심사위원이 0부터 10점까지의 점수를 매길 수 있다. 하지만 심사 위원이 거의 비슷한 기준을 가지고 있어서 거의 비슷한 점수를 주는데, 3명이 평가한 점수 중 2점 넘게 차이는 나지 않는다. 2점 점수 차이가 나면 surprising 라고 부른다.&amp;nbsp;예를 들면, (8,8,8), (7,8,7) 이렇게 점수가 날 수 있고, (6,7,8), (6,8,8) 은 surprising 이다. (7,6,9) 와 같은 점수는 절대 나오지 않는다(6점과 9점은 3점 차이가 나므로). 특정 점수 p 와 surprising 의 갯수 s가 주어졌을 때 한 명이 받은 점수 중 가장 큰 값이 p 이상인 갯수가 가장 큰 값(Answer)을 찾는 것이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;(사실 설명이 좀 복잡하다 -_- 이게 사실 영어라서 더 헛갈리는데;;;;)&lt;/div&gt;&lt;div&gt;&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&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: 'bogus font here', monospace; font-size: 13px; line-height: normal; text-align: left; background-color: rgb(239, 239, 239); &quot;&gt;3 1 5 15 13 11&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이렇게 한줄당 하나의 결과값 3 을 얻게 되는데, 숫자 하나씩 분석해보자.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;제일 앞의 숫자 3은 춤을 춘 구글직원이 3명이라는 뜻이다.&lt;/div&gt;&lt;div&gt;두번째 숫자 1은 surprising 의 갯수이다. 즉, 3명이 춤을 줬고, 한명당 3개의 점수를 받는데(심사위원이 3명이니), 이 3명 중 누군가 1명이 받은 점수는 제일 작은 점수와 제일 큰 점수가 2점 차이가 난다는&amp;nbsp;뜻이다.&lt;/div&gt;&lt;div&gt;세번째 숫자 5는 앞에서 설명한 특정 점수 p 이다. p 점 이상을 받은 적이 있는 사람의 숫자를 카운트해야한다.&lt;/div&gt;&lt;div&gt;나머지 3개의 숫자(15 13 11) 은 각 한명당 받은 총점이다. 제일 앞의 숫자가 3이었기 때문에, 여기 숫자가 3개(15 13 11)가 오는 것이다.&amp;nbsp;이 총점을 가지고, 각 사람이 받은 점수를 찾아내야 한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;15 13 11 이 숫자 3개는 각 사람이 받은 총점인데,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;15점 받았다면, (5,5,5) 혹은 (4,5,6) 을 받았을 수도 있다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;마찬가지로 13점을 받은 사람은 (4,4,5) 점을 받거나, (3,5,5) 점을 받았을 것이다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;마찬가지로 11 점은 (3,4,4) 혹은 (3,3,5) 점을 받았다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;즉, 다음과 같은 점수를 받았다. 잘 살펴보면, 왼쪽이 일반(!) 점수, 오른쪽이 surprising 이 발생했을 때의 점수이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1번 구글직원 : (5,5,5) 혹은 (4,5,6)&lt;/div&gt;&lt;div&gt;2번 구글직원 : (4,4,5) 혹은 (3,5,5)&lt;/div&gt;&lt;div&gt;3번 구글직원 : (3,4,4) 혹은 (3,3,5)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;일단 각 사람이 받은 점수가 나왔으니, 이제 특정 점수 p 를 살펴보자. p 가 5점이다. 3명의 구글직원 중에 surprising 없이도 자신의 점수 중 최고점이 5점 이상이 되는 사람은 2명(1번,2번)이다. 여기서 surprising 의 갯수가 1이므로, 만약 surprising 이 3번 구글직원에게 발생했다면, 3번의 점수는 (3,3,5) 이 되므로, 최고점이 5점 이상이 되는 직원은 &amp;nbsp;3명(1번,2번,3번 모두)이 되게 된다. 만약 surprising 이 1번 혹은 2번에게 발생했다면 2명이 된다. 그러므로 우리는 3번이 surprising 이 발생했다고 생각하는게 좋다. 그래야만 좀 더 큰 결과값을 얻기 때문이다. 그래서 이 문제의 답은 3. 3명이 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;이 문제의 핵심은 2가지로 볼 수 있다. 하나는 총점 x 가 주어졌을 때 받은 점수 (a,b,c) 를 결정하는 것이고, 다른 하나는&amp;nbsp;surprising 이 있을 경우 누가 surprising 을 받느냐를 잘 결정하는 것이다. surprising 을 잘 줘야 큰 결과값을 얻을 수 있게 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&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;&amp;nbsp;총점 x 가 있을 때 점수 (a,b,c) 를 어떻게 계산할까. 사실 이런 부분이 알고리즘 문제를 풀 때 많이 막막하긴 한데, 직접 이리저리 예제를 가지고 몇번 풀어보면 어떤 법칙을 발견할 수 있기도 하고, 일종의 직관으로 해답을 찾을 수 있기도 하다. 뭐, 제대로 풀려면 수학적인 '증명' 이 필요할 거 같기도 하지만, 일단 중요한건 풀어내는 것이니;; 일단 총점 x = a + b + c 이고, 채점 기준이 비슷하다고 해서 간단히 나누기 3을 해봤다....;;; 채점은 항상 정수이니 소수점은 간단히 버렸다.&amp;nbsp;그러니 재미있는 현상을 발견할 수 있는데,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;15 는 (5,5,5) 가 나온다. ok&lt;/div&gt;&lt;div&gt;13 은 (4,4,4) 가 나온다. 4+4+4 = 12 이므로 어딘가에는 +1 을 해줘야한다. 그냥 아무대나 해보자 (4,4,5). ok&lt;/div&gt;&lt;div&gt;11 은 (3,3,3) 이 나온다. 3+3+3 = 9 이므로, 2점이 모자란다. 이리저리 해볼 경우의 수가 많다. 어느 한 숫자에 +2 를 해줘도 되고. 2개의 숫자에 각각 +1 을 해줘도 된다. 일단 한 숫자에 +2를 해보면, (3,3,5) ok. 2개의 숫자에 +1 을 해보면, (3,4,4) ok.&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&gt;&amp;nbsp;my1 : 숫자 3개의 나열은 순서에 의미가 없다. 즉, (3,4,5) 나 (5,4,3) 은 결과적으로 같다. 왜냐하면, 답을 구하기 위해 필요한 것은 최대값이기 때문이다. 그러므로 이제 점수의 조합은 보기쉽게, 항상 오름차순으로 정렬해서 생각하자. 이제 총점이 x 일 때 (x/3, x/3, x/3) 을 만든 후, 1점이 부족하면 제일 뒤의 숫자에 1을 더해주고, 2점이 부족하면, 두번째와 세번째에 각각 1을 더해주면, (a,b,c) 조합을 찾을 수 있다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;my2 : 총점이 15점이면, (5,5,5) 가 될 수 있고, (4,5,6) 이 될 수 있고, (3,5,7) 도 될 수 있지만, 앞의 규칙(2점 넘게 차이가 나면 안됨)에 의해서, 3점 7점이 동시에 나올 수는 없다. 그래서 (5,5,5), (4,5,6) 밖에 될 수 없다. 숫자의 조합을 여러게 만들 수 있지만, 총점이 15점으로 고정되어 있다는 것은, 어떤 숫자가 변화되면, 그 변화된만큼 다른 숫자가 가져가게 된다. 그러므로, 만약 (5,5,5) 에서 앞의 숫자가 4가 되면, 뒤의 숫자 중 하나는 반드시 6이 되어야한다. 그리고 my1 에 의해서 순서는 의미가 없으므로, (5,5,5) 를 기준으로 1만큼 변화가 되는 조합은 (4,5,6) 밖에 없다. 즉, 앞의 숫자에서 1을 빼고, 뺀 1을 뒤의 숫자에 더해주는 것이다. 이제 2만큼 변화가 되는 조합을 생각해보자. (5,5,5) 에서 앞의 숫자에서 2를 빼고, 뒤에 숫자에 2를 더해보자. (3,5,7) 이 나온다. 3,7은 4만큼 차이가 나므로 안된다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;my3 : 숫자 조합에서 변화가 있으려면, 같은 숫자가 2개 있어야 변화가 가능하다. 그래야 둘중 하나에서 1을 빼서 다른 하나에 1을 더해야 총점이 유지되며, 2개 숫자의 차이가 2를 초과하지 않는다. 즉, (3,4,5) 은 (2,5,5) 가 될 수 없다. 그리고 이 '변화' 를 하면, 항상 surprising 이 되는 셈이다. 즉, my1 에서 구한 숫자 조합 중에 같은 숫자가 2개 있으면 '변화' 를 시킬 수 있으며, '변화' 가 일어나면 항상 surprising 이 된다.&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;&amp;nbsp;여튼 결론은,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;- 총점 x 가 있을 때 (x/3, x/3, x/3) 으로 3개의 숫자를 일단 만들고, 부족한 점수는 3번째, 2번째 순서로 +1 씩을 해서 총점 x 를 맞추자.&lt;/div&gt;&lt;div&gt;&amp;nbsp;- (a,b,c) 조합 중에서 같은 숫자 2개가 있으면 앞의 숫자에서 1을 빼고, 뒤의 숫자에 1을 더하는&amp;nbsp;'변화' 가 되어서, surprising 이 될 수 있다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;- surprising 이 될 때 최대값이 +1 될 수 있다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;- '답' 을 구할 때는, 특정점수 p 와 surprising 갯수 s&amp;nbsp;가 주어졌을 때 surprising 하지 않았을 때는 p 보다 작지만, surprising 했을 때 p 이상이 되는 경우를 s 갯수만큼 찾으면 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&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;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;div&gt;#include &amp;lt;algorithm&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;#include &amp;lt;vector&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;stack&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;iostream&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;sstream&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;fstream&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;using namespace std;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;stringstream emptyOut;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#define DP_ON 0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#if DP_ON&lt;/div&gt;&lt;div&gt;#define DP std::cout &amp;lt;&amp;lt; &quot;[DebugPrint]:&quot;&lt;/div&gt;&lt;div&gt;#else&lt;/div&gt;&lt;div&gt;#define DP emptyOut&lt;/div&gt;&lt;div&gt;#endif&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;const int CANNOT_GO = -1;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int getintline()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;string data;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;getline(cin, data);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;stringstream s;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;s &amp;lt;&amp;lt; data;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int ret;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;s &amp;gt;&amp;gt; ret;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return ret;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;vector &amp;lt; int &amp;gt; getintvectorline()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;vector &amp;lt; int &amp;gt; ret;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;string data;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;getline(cin, data);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;stringstream s, debugstream;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;s &amp;lt;&amp;lt; data;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;debugstream &amp;lt;&amp;lt; &quot;getintvector : &quot;;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;while ( !s.eof() )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;int v;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;s &amp;gt;&amp;gt; v;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;debugstream &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; v;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;ret.push_back(v);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;DP &amp;lt;&amp;lt; debugstream.str().c_str() &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return ret;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;string getstringline()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;string data;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;getline(cin, data);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return data;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;struct P2&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int max1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int max2;&lt;/div&gt;&lt;div&gt;};&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;vector &amp;lt; P2 &amp;gt; g;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P2 getV(int input)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if ( g[input].max1 &amp;gt;= 0 ) return g[input];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;P2 result;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int v = input/3;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;vector &amp;lt; int &amp;gt; r;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;r.push_back(v);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;r.push_back(v);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;r.push_back(v);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int current = r[0] + r[1] + r[2];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;result.max1 = -1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;result.max2 = -1;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if ( current &amp;lt; input )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;r[2] = r[2] + 1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;current = r[0] + r[1] + r[2];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if ( current &amp;lt; input )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;r[1] = r[1] + 1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;result.max1 = result.max2 = r[2];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;bool bChanged = false;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;for ( int i=0; i&amp;lt;3; ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;for ( int j=0; j&amp;lt;3; ++j )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;if ( i == j ) continue;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;if ( r[i] == r[j] &amp;amp;&amp;amp; r[i] != 0 )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;DP &amp;lt;&amp;lt; &quot;same found&quot; &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;r.push_back(r[0]);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;r.push_back(r[1]);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;r.push_back(r[2]);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;r[3+i] = r[3+i] - 1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;r[3+j] = r[3+j] + 1;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;result.max2 = r[3+j];&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;bChanged = true;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;break;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;if ( bChanged ) break;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;for ( int i=0; i&amp;lt;r.size(); ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;DP &amp;lt;&amp;lt; &quot;r[&quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;] : &quot; &amp;lt;&amp;lt; r[i] &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;g[input] = result;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return result;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void doOperation(int caseNo)&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;vector &amp;lt; int &amp;gt; singleline = getintvectorline();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int N_numberOfGooglers = singleline[0];&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int S_numberOfSurprising = singleline[1];&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int p = singleline[2];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int answer = 0;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;P2 * points = new P2[N_numberOfGooglers];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;for ( size_t i=0; i&amp;lt;N_numberOfGooglers; ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;points[i] = getV(singleline[i+3]);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;DP &amp;lt;&amp;lt; &quot;before points &quot; &amp;lt;&amp;lt; points[i].max1 &amp;lt;&amp;lt; &quot;,&quot; &amp;lt;&amp;lt; points[i].max2 &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;if ( points[i].max1 &amp;lt; p &amp;amp;&amp;amp; points[i].max2 &amp;gt;= p&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;				&lt;/span&gt;&amp;amp;&amp;amp; S_numberOfSurprising &amp;gt; 0 )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;--S_numberOfSurprising;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;points[i].max1 = points[i].max2;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;DP &amp;lt;&amp;lt; &quot;after points &quot; &amp;lt;&amp;lt; points[i].max1 &amp;lt;&amp;lt; &quot;,&quot; &amp;lt;&amp;lt; points[i].max2 &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;for ( size_t i=0; i&amp;lt;N_numberOfGooglers; ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;if ( points[i].max1 &amp;gt;= p )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;			&lt;/span&gt;++answer;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;cout &amp;lt;&amp;lt; &quot;Case #&quot; &amp;lt;&amp;lt; caseNo &amp;lt;&amp;lt; &quot;: &quot; &amp;lt;&amp;lt; answer &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;delete [] points;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void init()&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;DP &amp;lt;&amp;lt; &quot;init...&quot; &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;g.resize(31);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;for ( int i=0; i&amp;lt;= 30; ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;g[i].max1 = -1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;g[i].max2 = -1;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int main(int argc, char * [])&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;DP &amp;lt;&amp;lt; &quot;Start testing...&quot; &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;init();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;int numberOfCase = getintline();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;for ( int i=0; i&amp;lt;numberOfCase; ++i )&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;doOperation(i+1);&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;return 0;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#define DP_ON&lt;/div&gt;&lt;div&gt;&amp;nbsp;: 1 일 때는 DP &amp;lt;&amp;lt; &quot;aaa&quot; 와 같이 aaa 를 cout 처럼 사용할 수 있다. DP_ON 일 때는 아무 출력도 되지 않는다. 즉, 디버그용 cout.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int getintline()&lt;/div&gt;&lt;div&gt;&amp;nbsp;: 한줄을 읽어서 int 반환한다. 주로 문제 갯수를 알려주는 첫줄을 입력받을 때 사용.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;vector &amp;lt; int &amp;gt; getintvectorline()&lt;/div&gt;&lt;div&gt;&amp;nbsp;: int 로 된 한 줄을 읽어서 vector 로 반환한다. 숫자로만 된 한 줄을 쉽게 읽을 때 사용.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;string getstringline()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;: 이 문제에서는 사용하지 않지만, 입력에서 한 줄을 읽어서 string 으로 반환.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P2 getV(int input)&lt;/div&gt;&lt;div&gt;&amp;nbsp;: 총점이 input 일 때 max1, max2 로 된 구조체 P2 를 반환한다. 규칙을 분석해보니, 총점이 x 일 때 점수는 surprising 전, 후 이렇게 2개만 나와서 간단히 각 경우의 최대값을 저장해서 max1, max2 에 저장하여 돌려준다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void doOperation(int caseNo)&lt;/div&gt;&lt;div&gt;&amp;nbsp;: 한 줄을 읽어서 그 줄에 대한 답을 구해서 Case # caseNo 로 출력한다. 총점이 여러개 이므로 각 총점에 대한 max1, max2 를 받아와서, 남은 surprising 갯수가 있고, max1 이 특정 점수 p 보다 작고, max2 가 p 이상이면 남은 surprising 갯수를 1빼고, max1 을 max2 값으로 바꾼다. 이 과정을 다 거친 후, max1 이 p 이상인 것을 갯수를 카운트하면 그 값이 결과값(Answer)이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void init()&lt;/div&gt;&lt;div&gt;&amp;nbsp;: 혹시나 특정 총점에 대한 max1, max2 를 구하는데 시간이 많이 걸릴까해서 한번 구한 값은 전역변수 g 에 저장해두고 같은 총점에 대한 값을 구할 때 미리 구한 값을 쓰는데, 이 때 g 를 초기화해주는 함수이다. (실제로 오래 걸리지 않아서 별 의미는 없을듯;;;;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int main()&lt;/div&gt;&lt;div&gt;&amp;nbsp;: 시작점. 문제 갯수를 읽고 각 문제에 대해서 doOperation 을 호출한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;아래는 시험 결과. 토,일 둘다 결혼식이라서 늦게 시작해서, 예선 통과 점수만 넘어서 다음날 결혼식을 위해 자버렸다는;;; 나머지 문제들은 나중에 풀려고 했는데 일주일 넘게 지난 오늘도 안 풀어보고 있음...;; 1,2번 문제 small 풀어서 25점. large 하나 10점으로. 35점. 정확히 몇명이 참가했는지는 모르겠는데, 1번 문제(가장 쉬움)를 19998명이 낸걸 봐서는 약 2만명 정도가 참가한거 같다. 난 11608등 ㅋㅋ 딱 중간이라고 하고 싶음 -0-&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:620px;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/2079E4384F95734C244158&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/2079E4384F95734C244158&quot; filemime=&quot;image/jpeg&quot; filename=&quot;submission.png&quot; height=&quot;149&quot; style=&quot;&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;참고로 1번 Speaking in Tongues 문제는 알파벳을 뒤섞어놓아서, 1:1 mapping table 만 만들면 쉽게 풀 수 있다. 예제&amp;nbsp;입력/출력으로 간단히 table 만들고, 빠진 2개 문자만 찾으면 끝~&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ps : 코드잼과 같은 알고리즘 문제를 풀려면, 기본 자료 구조와 알고리즘을 공부하고, 알고리즘 트레이닝 북(&lt;a href=&quot;http://www.yes24.com/24/Goods/1396784?Acode=101&quot;&gt;http://www.yes24.com/24/Goods/1396784?Acode=101&lt;/a&gt;) 과 같은 책으로 공부하는게 좋다... 라고 생각하지만 정작 사놓고 잘 안보고 있음;; 역시 난 과학과보다는 공학과 스타일(!) ㅋ&lt;/p&gt;&lt;/div&gt;&lt;div&gt;ps2 : 이 포스팅은 Outsider 님의 포스팅(&lt;a href=&quot;http://blog.outsider.ne.kr/775&quot;&gt;http://blog.outsider.ne.kr/775&lt;/a&gt;)을 보고 자극받아서 2시간째 문제를 다시 떠올리면서 작성 중... 역시 뭐라도 자꾸 블로그에 글을 남겨야한다는 생각으로~ 시작했는데, 처음에는 내 생각을 쉽게 풀어 써봐야지 했는데 적다보니 글로 (알고리즘)생각을 적어낸다는게 정말 어려움을 느낌 ㅠㅜ&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ps3 :&amp;nbsp;아래는 코드잼을 처음 시작할 때 참고사항&lt;/div&gt;&lt;div&gt;&amp;nbsp;- 해당 언어로 숫자값 입력, 문자 입력, 처리하기 쉬운 형태로 입력을 받아보기.&lt;/div&gt;&lt;div&gt;&amp;nbsp;- 출력값이 0-base 인지 1-base 인지 확인. 특히 최종값은 1-base 이다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;- 출력값이 해당 값을 출력하라는 말인지, 해당 값의 index 를 출력하라는 말인지&lt;/div&gt;&lt;div&gt;&amp;nbsp;- 실행 시간을 측정하는 툴이 있나? - large 문제 도전하기 전에...&lt;/div&gt;&lt;div&gt;&amp;nbsp;- large 문제의 scale 은 어느 값이 많이 늘어나나? 이 값으로 large 문제가 어느 부분이 최적화가 필요한지 짐작할 수 있다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;- 컴파일 최적화를 할 줄 아나? (굳이 필요는 없을듯. 어차피 large 문제에 가면 컴파일러 최적화로 해결되는 시간이 아니더라는;;)&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/386&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>개발관련</category>
			<category>Algorithm</category>
			<category>codejam</category>
			<category>CPP</category>
			<category>Google</category>
			<category>google codejam</category>
			<category>unittest</category>
			<category>구글</category>
			<category>구글 코드잼</category>
			<category>알고리즘</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/386</guid>
			<comments>http://blog.wimy.com/386#entry386comment</comments>
			<pubDate>Tue, 24 Apr 2012 00:55:59 +0900</pubDate>
		</item>
		<item>
			<title>올블릿 클릭당 수익이 5분의 1로 줄다 ㅠㅜ</title>
			<link>http://blog.wimy.com/388</link>
			<description>&lt;p&gt;&amp;nbsp;wimybox 덕분에 하루에 500명 정도 방문자가 있어서, 한달에 약 1만원 정도는 벌었는데,&amp;nbsp;3월부터 1 클릭에 10원이라니 ㅠㅜ 검색해보니, 올블릿 제정이 안 좋다는 얘기도 들리고;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;이전에는 1 클릭에 50원부터 시작이어서, 한달에 1만원이었는데, 이제 한달에 2천원... 일년하면 정말 도메인 유지비 겨우 나올 정도. 다른 광고를 알아봐야하려나 쩝... 어디 좋은 거 없으려나, 올블릿이 신청도 괜찮고, 계좌 팩스로 보낸다던지 이런거 없어서 무척(!!) 괜찮았는데...&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;구글 애드센스는 경고도 없이 갑자기 광고주의 이익을 침해한다면서 짤려버리고 -_-; 자신들 사이트에서 제공하는 api 를 썼는데 쩝... 다행히 대부분의 수익은 한번 받고 끝나긴 했지만, 구글 애드센스만큼 화면 레이아웃 다양하고 깔끔한게 없었는데 많이 아쉬움.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;뭐 여튼 어디 다른 좋은거 없는지 찾아봐야 할 듯~&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/388&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>IT</category>
			<category>Adsense</category>
			<category>allblet</category>
			<category>wimybox</category>
			<category>광고</category>
			<category>수익</category>
			<category>애드센스</category>
			<category>올블릿</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/388</guid>
			<comments>http://blog.wimy.com/388#entry388comment</comments>
			<pubDate>Sat, 21 Apr 2012 01:52:59 +0900</pubDate>
		</item>
		<item>
			<title>clipdic 크롬 확장 배포 - 클립보드를 바로 사전 검색해주는 프로그램</title>
			<link>http://blog.wimy.com/387</link>
			<description>&amp;nbsp;clipdic 이라고, 클립보드를 감시하고 있다가 새로운 단어가 클립보드에 들어오면 바로 인터넷 사전에서 검색해주는 프로그램을 만들고 있었다. 취미 삼아, C#, Java, Python 버젼으로 만들고 쓰고 있었는데, 이번에 크롬 웹 브라우저 확장 버젼으로 만들어봤다.&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;이 &lt;a href=&quot;https://chrome.google.com/webstore/detail/agjdiciiahomininjbanepahjidnkddo?utm_source=chrome-ntp-icon&quot; target=&quot;_blank&quot; title=&quot;[https://chrome.google.com/webstore/detail/agjdiciiahomininjbanepahjidnkddo?utm_source=chrome-ntp-icon]로 이동합니다.&quot;&gt;링크&lt;/a&gt; 를 따라가거나, 크롬 웹 스토어(Chrome Web Store) 에서 clipdic 으로 검색하면 설치할 수 있다.&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;설치가 되면 아래와 같이 버튼이 하나 추가되며, 버튼을 클릭하면 팝업이 뜨게되고, 클립보드에 있는 단어를 바로 daum 사전에서 찾아서 보여준다.&lt;br /&gt;
&lt;br /&gt;&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/144A8F4A4F6DE487018D4B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/144A8F4A4F6DE487018D4B&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;toolbar.png&quot; height=&quot;58&quot; width=&quot;235&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;&amp;nbsp;&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/17760F374F6DE54920CABF&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/17760F374F6DE54920CABF&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;clipdic.png&quot; height=&quot;632&quot; width=&quot;502&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;영어문서를 볼 때, 궁금한 단어를 더블 클릭하거나, 드래그 한 후, ctrl+c 만 누르면 바로 단어를 검색해주니 꽤 쓸만하다~ 그리고 크롬 확장이지만, 클립보드를 체크하기 때문에, MS Word 의 문서를 보면서라든지, adobe pdf reader 를 볼 때라든지도 사용 가능하다.&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;ps : 참고로 이걸 크롬 확장으로 만든 이유는, 웹 브라우저와 연동하면서 윈도우즈, 리눅스 동시에 돌아가는 프로그램을 C#, Java 로 만들었을 때 (가능하지만, 개발 및 설치 등이)제법 까다롭기 때문이다.... 자세한 설명은 생략 ㅋ&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/387&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>개발관련</category>
			<category>chrome</category>
			<category>chrome extension</category>
			<category>chrome web browser</category>
			<category>clipdic</category>
			<category>Dictionary</category>
			<category>Google</category>
			<category>구글</category>
			<category>사전</category>
			<category>크롬</category>
			<category>크롬 웹 브라우저</category>
			<category>크롬 확장</category>
			<category>클립딕</category>
			<category>확장</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/387</guid>
			<comments>http://blog.wimy.com/387#entry387comment</comments>
			<pubDate>Sun, 25 Mar 2012 00:22:10 +0900</pubDate>
		</item>
		<item>
			<title>pop.wimy.com 에서 box.wimy.com 로 branding 하고 디자인을 새롭게!!!</title>
			<link>http://blog.wimy.com/385</link>
			<description>&amp;nbsp;오랜만에 주말동안 열코딩을 했습니다. 사실 코딩쪽은 코드 정리와 html5 YouTubeAPI 정도이고, CSS 를 통한 디자인 작업을 거의 했습니다.&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;기능 추가는 다음과 같습니다.&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;- mobile device 에서 접속 혹은 창 크기가 작을 때 mobile 용 레이아웃으로 보여줌&lt;br /&gt;
&amp;nbsp;- html5 YouTubeAPI 를 통해 html5 기반의 플레이어를 지원합니다. flash 를 지원하지 않는 iPhone 에서도 반수동으로 플레이가 (겨우) 가능. 안드로이드 폰에서도 html5 mode 로 재생 지원 가능&lt;br /&gt;
&amp;nbsp;- 불필요한 라이브러리를 제거하여 시작 속도를 향상&lt;br /&gt;
&amp;nbsp;- color tag design 에서 사용한 이미지 파일을 CSS 에 내장하여 속도 저하가 거의 없음&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;디자인은 아래와 같이 변경되었습니다.&amp;nbsp;아래의 before / after 만 봐도 훨씬 산뜻하게 변경되었습니다~ color tag design 이라고 하면 될듯~ (색상은 안드로이드 ICS 에서 권장색상들을 사용 ^^)&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p style=&quot;margin:0&quot;&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/183EF0414F37E2AB22E8F5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/183EF0414F37E2AB22E8F5&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;before.png&quot; height=&quot;588&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/original/193EF0414F37E2AB230536&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/193EF0414F37E2AB230536&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;after.png&quot; height=&quot;599&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;앞으로 box.wimy.com 로 이용해주세요~ pop.wimy.com 라고 웹주소만 쓰다가 이제 WimyBox 라는 이름도 생겼답니다. 조만간 pop.wimy.com 접속시 box.wimy.com 로 자동으로 옮겨가도록 할 예정입니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=blog.wimy.com/385&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>IT</category>
			<category>color tag</category>
			<category>color tag design</category>
			<category>DESIGN</category>
			<category>Mashup</category>
			<category>pop.wimy.com</category>
			<category>wimybox</category>
			<category>youtube</category>
			<category>youtubeapi</category>
			<category>YouTubeMashup</category>
			<category>위미박스</category>
			<author>zelon</author>
			<guid>http://blog.wimy.com/385</guid>
			<comments>http://blog.wimy.com/385#entry385comment</comments>
			<pubDate>Mon, 13 Feb 2012 01:15:19 +0900</pubDate>
		</item>
	</channel>
</rss>
