<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4%2F2015%2F%EC%9D%98%EC%82%AC%EC%96%91%EB%B0%98%2FForgetfulnessOfSantaClaus</id>
	<title>새싹교실/2015/의사양반/ForgetfulnessOfSantaClaus - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4%2F2015%2F%EC%9D%98%EC%82%AC%EC%96%91%EB%B0%98%2FForgetfulnessOfSantaClaus"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2015/%EC%9D%98%EC%82%AC%EC%96%91%EB%B0%98/ForgetfulnessOfSantaClaus&amp;action=history"/>
	<updated>2026-05-15T21:32:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2015/%EC%9D%98%EC%82%AC%EC%96%91%EB%B0%98/ForgetfulnessOfSantaClaus&amp;diff=57483&amp;oldid=prev</id>
		<title>imported&gt;장용운 at 19:32, 5 May 2015</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%83%88%EC%8B%B9%EA%B5%90%EC%8B%A4/2015/%EC%9D%98%EC%82%AC%EC%96%91%EB%B0%98/ForgetfulnessOfSantaClaus&amp;diff=57483&amp;oldid=prev"/>
		<updated>2015-05-05T19:32:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;주의 : 인터페이스가 몹시 더러움&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;콘솔 프로그램은 예쁘게 만들려면.. 귀찬타&amp;#039;&amp;#039;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= 소개 =&lt;br /&gt;
&amp;#039;&amp;#039;Forgetfulness of Santa Claus&amp;#039;&amp;#039;&lt;br /&gt;
 산타 클로스는 10개의 집에 100개의 선물을 나누어줘야 한다.&lt;br /&gt;
 10개의 집은 일렬로 나열돼 있으며, 산타는 현재 굴뚝에서 옆집 굴뚝으로 점프할 수 있다.&lt;br /&gt;
 산타는 한 번에 하나의 굴뚝을 점프할 수 있으며, 선물을 전부 나눠주고 끝났다고 생각되면 퇴근한다.&lt;br /&gt;
 퇴근한 산타는 선물을 잘못 나누어주었다는 사실을 깨닫는다.&lt;br /&gt;
 올바른 선물 갯수를 종이에 적은 산타는 선물을 회수하여 올바르게 분배하기 위해 다시 출발한다.&lt;br /&gt;
 선물의 분배는 갯수만 맞으면 완료된 것으로 간주한다.&lt;br /&gt;
 올바른 분배가 완료된 산타는 정말로 퇴근한다.&lt;br /&gt;
&lt;br /&gt;
= 프로젝트 구성 = &lt;br /&gt;
* myfunc.h : 헤더파일&lt;br /&gt;
* main.c : 메인&lt;br /&gt;
* myfunc.c : 함수정의부&lt;br /&gt;
&lt;br /&gt;
= 코드 =&lt;br /&gt;
== myfunc.h ==&lt;br /&gt;
 #include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
 #pragma warning(disable:4996)&lt;br /&gt;
 &lt;br /&gt;
 //define DEBUG here when you&amp;#039;re debugging&lt;br /&gt;
 #ifdef DEBUG&lt;br /&gt;
 &lt;br /&gt;
 #ifndef SHOW_INIT&lt;br /&gt;
 #define SHOW_INIT&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #define HOUSE_NUMBER 10&lt;br /&gt;
 #define MAX_PACKAGE 100&lt;br /&gt;
 &lt;br /&gt;
 #define SHOW_INIT&lt;br /&gt;
 &lt;br /&gt;
 void printHouse(const int* arr);&lt;br /&gt;
 void printHouseSelected(const int* arr, int n);&lt;br /&gt;
 &lt;br /&gt;
 void presentHouse(int* pack, int* house);&lt;br /&gt;
 &lt;br /&gt;
 char getInput(void);&lt;br /&gt;
 void showRealAssignment(int* arr);&lt;br /&gt;
 int chkResult(int* base, int* cmp);&lt;br /&gt;
&lt;br /&gt;
== main.c ==&lt;br /&gt;
 #include &amp;quot;myfunc.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
 	int package = MAX_PACKAGE;&lt;br /&gt;
 	int houses[HOUSE_NUMBER];&lt;br /&gt;
 	int correct[HOUSE_NUMBER] = { 15, 6, 8, 12, 5, 2, 6, 19, 17, 10 };&lt;br /&gt;
 &lt;br /&gt;
 	for (int i = 0; i &amp;amp;lt; HOUSE_NUMBER; i++) houses[i] = 0;&lt;br /&gt;
 	printf(&amp;quot;시작합니다.\n\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 #ifdef SHOW_INIT&lt;br /&gt;
 	printHouse(houses);&lt;br /&gt;
 	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 	int now = 0;&lt;br /&gt;
 	int phase = 0;&lt;br /&gt;
 	while (phase &amp;amp;lt; 2) {&lt;br /&gt;
 		char c = -1;&lt;br /&gt;
 		&lt;br /&gt;
 		c = getInput();&lt;br /&gt;
 		switch (c) {&lt;br /&gt;
 		case &amp;#039;&amp;amp;lt;&amp;#039;:&lt;br /&gt;
 			if (now &amp;amp;lt;= 0) now = 0;&lt;br /&gt;
 			else now--;&lt;br /&gt;
 &lt;br /&gt;
 			printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
 			printHouseSelected(houses, now);&lt;br /&gt;
 			break;&lt;br /&gt;
 		case &amp;#039;&amp;amp;gt;&amp;#039;:&lt;br /&gt;
 			if (now &amp;amp;gt;= (HOUSE_NUMBER - 1)) now = HOUSE_NUMBER - 1;&lt;br /&gt;
 			else now++;&lt;br /&gt;
 &lt;br /&gt;
 			printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
 			printHouseSelected(houses, now);&lt;br /&gt;
 			break;&lt;br /&gt;
 		case &amp;#039;q&amp;#039;:&lt;br /&gt;
 			if (package &amp;amp;gt; 0) {&lt;br /&gt;
 				printf(&amp;quot;아직 선물이 남아있습니다.\n\n&amp;quot;);&lt;br /&gt;
 				break;&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 			if (phase == 0) {&lt;br /&gt;
 				phase = 1;&lt;br /&gt;
 				showRealAssignment(correct);&lt;br /&gt;
 			} else&lt;br /&gt;
 				if (chkResult(houses, correct) == 1) {&lt;br /&gt;
 					printf(&amp;quot;\n\n축하합니다!\n&amp;quot;);&lt;br /&gt;
 					return 0;&lt;br /&gt;
 				} else {&lt;br /&gt;
 					printf(&amp;quot;분배가 틀렸습니다.&amp;quot;);&lt;br /&gt;
 					showRealAssignment(correct);&lt;br /&gt;
 				}&lt;br /&gt;
 &lt;br /&gt;
 			break;&lt;br /&gt;
 		case &amp;#039;a&amp;#039;:&lt;br /&gt;
 			presentHouse(&amp;amp;amp;package, &amp;amp;amp;(houses[now]) );&lt;br /&gt;
 &lt;br /&gt;
 			break;&lt;br /&gt;
 		default:&lt;br /&gt;
 			printf(&amp;quot;ERROR&amp;quot;);&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== myfunc.c ==&lt;br /&gt;
 #include &amp;quot;myfunc.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 void printHouse(const int* arr) {&lt;br /&gt;
 	printf(&amp;quot;Printing houses...\n&amp;quot;);&lt;br /&gt;
 	for (int i = 0; i &amp;amp;lt; HOUSE_NUMBER; i++) {&lt;br /&gt;
 		printf(&amp;quot;%6d &amp;quot;, arr[i]);&lt;br /&gt;
 	}&lt;br /&gt;
 	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void printHouseSelected(const int* arr, int n) {&lt;br /&gt;
 	printf(&amp;quot;Printing houses...\n&amp;quot;);&lt;br /&gt;
 	for (int i = 0; i &amp;amp;lt; HOUSE_NUMBER; i++) {&lt;br /&gt;
 		if (i == n) printf(&amp;quot;[%4d] &amp;quot;, arr[i]);&lt;br /&gt;
 		else printf(&amp;quot;%6d &amp;quot;, arr[i]);&lt;br /&gt;
 	}&lt;br /&gt;
 	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void presentHouse(int* pack, int* house) {&lt;br /&gt;
 	int input;&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;선물을 주거나 회수합니다. (양수: 선물주기, 음수: 선물회수)\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 	while (1) {&lt;br /&gt;
 		printf(&amp;quot;입력(%d) : &amp;quot;, *pack);&lt;br /&gt;
 		scanf(&amp;quot;%d&amp;quot;, &amp;amp;amp;input);&lt;br /&gt;
 		fflush(stdin);&lt;br /&gt;
 &lt;br /&gt;
 		if (input &amp;amp;gt; 0) {&lt;br /&gt;
 			if (input &amp;amp;gt; *pack)&lt;br /&gt;
 				printf(&amp;quot;그만큼 주기엔 선물이 부족합니다.\n&amp;quot;);&lt;br /&gt;
 			else {&lt;br /&gt;
 				*pack -= input;&lt;br /&gt;
 				*house += input;&lt;br /&gt;
 				printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 				return;&lt;br /&gt;
 			}&lt;br /&gt;
 		} else if (input &amp;amp;lt; 0) {&lt;br /&gt;
 			if (input &amp;amp;gt; *house)&lt;br /&gt;
 				printf(&amp;quot;이 집에서 회수할 수 있는 양이 아닙니다.\n&amp;quot;);&lt;br /&gt;
 			else {&lt;br /&gt;
 				*pack -= input;&lt;br /&gt;
 				*house += input;&lt;br /&gt;
 				printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 				return;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		else {&lt;br /&gt;
 			printf(&amp;quot;올바르지 못한 입력입니다.\n\n&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 char getInput(void) {&lt;br /&gt;
 	char input;&lt;br /&gt;
 &lt;br /&gt;
 	printf(&amp;quot;조작 : &amp;quot;);&lt;br /&gt;
 	printf(&amp;quot;왼쪽[&amp;amp;lt;] 오른쪽[&amp;amp;gt;] 선물증감[a] 퇴근하기[q]\n&amp;quot;);&lt;br /&gt;
 	while (1) {&lt;br /&gt;
 &lt;br /&gt;
 		printf(&amp;quot;입력 : &amp;quot;);&lt;br /&gt;
 		scanf(&amp;quot;%c&amp;quot;, &amp;amp;amp;input);&lt;br /&gt;
 		fflush(stdin);&lt;br /&gt;
 &lt;br /&gt;
 		if (input == &amp;#039;a&amp;#039; || input == &amp;#039;q&amp;#039; || input == &amp;#039;&amp;amp;lt;&amp;#039; || input == &amp;#039;&amp;amp;gt;&amp;#039;)&lt;br /&gt;
 			return input;&lt;br /&gt;
 &lt;br /&gt;
 		printf(&amp;quot;입력 값이 부적절합니다.\n\n&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	//이 줄에 도달하는 것은 불가능함&lt;br /&gt;
 	return (char)-1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void showRealAssignment(int* arr) {&lt;br /&gt;
 	printf(&amp;quot;사실 원래는 이렇게 나눠주어야 했다고 한다.\n&amp;quot;);&lt;br /&gt;
 	printHouse(arr);&lt;br /&gt;
 	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int chkResult(int* base, int* cmp) {&lt;br /&gt;
 	for (int i = 0; i &amp;amp;lt; HOUSE_NUMBER; i++)&lt;br /&gt;
 		if (*(base+i) != *(cmp+i)) return 0;&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
[[새싹교실/2015]]&lt;br /&gt;
[[새싹교실/2015/의사양반]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;장용운</name></author>
	</entry>
</feed>