๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐“ก๐“ธ๐“ธ๐“ถ๐Ÿฃ: ๐’œ๐“๐‘”๐‘œ๐“‡๐’พ๐“‰๐’ฝ๐“‚/๐“ก๐Ÿฃ๐Ÿข๐Ÿฃ: ๐’œ๐“๐‘”๐‘œ๐“‡๐’พ๐“‰๐’ฝ๐“‚

[ALPS Study] ์™„์ „ํƒ์ƒ‰ - ํ•˜๋…ธ์ดํƒ‘, ๋ธ”๋ž™์žญ

- BOJ 11729 ํ•˜๋…ธ์ดํƒ‘

 

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void hanoi(int n, int start, int mid, int end);
int cnt = 0;

int main() {
	int n; int start = 1, mid = 2, end = 3;
//	printf("์›ํŒ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ");
	scanf("%d", &n);
	hanoi(n, start, mid, end);
	printf("%d\n", cnt);
	return 0;
}

void hanoi(int n, int start, int mid, int end) {
	if (n == 1) {
		cnt++; 
		printf("%d %d\n", start, end);

	}
	else {
		hanoi(n - 1, start, end, mid);
		printf("%d %d\n", start, end);
		cnt++;
		hanoi(n - 1, mid, start, end);
	}
}

 

2ํ•™๋…„ ์ •๋ณด๊ณผํ•™์‹œ๊ฐ„์— ์ฃผ๊ตฌ์žฅ์ฐฝ ํ–ˆ๊ณ  ์‹œํ—˜๋ฌธ์ œ์—๋„ ๋‚˜์™”๋˜ ํ•˜๋…ธ์ดํƒ‘ ๋ฌธ์ œ! ์ด์ง€๋งŒ... ๊ทธ ๋•Œ ๋‹น์‹œ์—๋„ ๋ฐ˜๊ฐ•์ œ๋กœ ์™ธ์› ๊ณ  ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ๋กœ ๋๋‚˜์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์žฌ๊ท€ํ•จ์ˆ˜ ๊ณต๋ถ€ํ•  ๊ฒธ ๋‹ค์‹œ ํ’€์–ด๋ณด์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌด๋ ค 2๋…„๋งŒ์— ์ข€ ์ดํ•ดํ•œ ๊ฒƒ ๊ฐ™๋‹ค... 

(์•„๊นŒ ํฐ์œผ๋กœ ์—„์ฒญ ์—ด์‹ฌํžˆ ์ผ๋Š”๋ฐ ์ง€๊ธˆ ๋…ธํŠธ๋ถ์œผ๋กœ ๋“ค์–ด์™€๋ณด๋‹ˆ ์™œ ์ ˆ๋ฐ˜ ์ด์ƒ ๋‚ ์•„๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ..? ๋‚˜ํ•œํ…Œ ์›จ๊ทธ๋ž˜ ํ‹ฐ์Šคํ† ๋ฆฌ์•ผใ…กใ…ก)

 

- ๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ

 

n๊ฐœ์˜ ์›ํŒ์ด ์žˆ์„ ๋•Œ, ์šฐ๋ฆฌ๋Š” ์ด ์›ํŒ์„ ์ฒ˜์Œ ๊ธฐ๋‘ฅ์—์„œ ๋ชฉํ‘œ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๊ณ ์ž ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งจ ์•„๋ž˜์— ์žˆ๋Š” ์›ํŒ ์œ„์˜ n-1๊ฐœ์˜ ์›ํŒ์„ ๊ฐ€์šด๋ฐ๋กœ ์˜ฎ๊ธฐ๊ณ , ๋งจ ์•„๋ž˜์˜ ์›ํŒ์„ ๋ชฉํ‘œ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธด ๋’ค, ๋‹ค์‹œ ๊ฐ€์šด๋ฐ์— ์˜ฎ๊ฒจ๋†“์€ n-1๊ฐœ์˜ ์›ํŒ์„ ๋ชฉํ‘œ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค. 

์ด ์›๋ฆฌ๋Š” n์ด 2์ผ ๋•Œ๊นŒ์ง€ ์ญ‰ ์ ์šฉ๋˜๋‹ค๊ฐ€ n์ด 1์ด ๋˜๋ฉด ๊ทธ๋ƒฅ ๋ฐ”๋กœ ์ฒ˜์Œ ๊ธฐ๋‘ฅ์—์„œ ๋ชฉํ‘œ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค. (1๊ฐœ์˜ ์›ํŒ์„ ์˜ฎ๊ธธ ๋•Œ์—๋Š” ๋ณ„๋‹ค๋ฅธ ์ž‘์—…์ด ํ•„์š”๊ฐ€ ์—†๋‹ค!)

์ด๋ฅผ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.

 

- ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ๋Š” ๊ธ€

 

n์ด 3์ด๋ผ๊ณ  ํ•ด๋ณด์ž. ์•ž์„œ ์„ค๋ช…ํ–ˆ๋“ฏ ๋จผ์ € 2๊ฐœ์˜ ์›ํŒ์„ ์‹œ์ž‘ ๊ธฐ๋‘ฅ(start)์—์„œ ์ค‘๊ฐ„ ๊ธฐ๋‘ฅ(mid)์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค. ์ฆ‰, n=3์ธ ํ•จ์ˆ˜ ์•ˆ์—์„œ n=2, start->mid ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•œ๋‹ค.

 

์ด์ œ n=2์ผ ๋•Œ start ๊ธฐ๋‘ฅ์—์„œ mid ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค! (์ด์ œ ๋ชฉํ‘œ๊ธฐ๋‘ฅ์ด mid์ด๋‹ค) ์ด์ œ 2๊ฐœ์˜ ์›ํŒ์„ ๋ชฉํ‘œ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๋ ค๋ฉด 2๊ฐœ ์ค‘ ์œ„์˜ ์›ํŒ ํ•˜๋‚˜๋ฅผ ์ค‘๊ฐ„ ๊ธฐ๋‘ฅ์— ์ž„์‹œ๋กœ ๋‚ด๋ ค๋†“์•„์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„  ์ค‘๊ฐ„ ๊ธฐ๋‘ฅ์ด end์ด๊ฒ ์ง€?(์™œ๋ƒ๋ฉด ์‹œ์ž‘ ๊ธฐ๋‘ฅ์ด start๊ณ  ๋ชฉํ‘œ๊ธฐ๋‘ฅ์ด mid๋‹ˆ๊นŒ!) ๊ทธ๋ž˜์„œ ๋˜ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ด์ œ n=1, start->end ์ธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

n=1, ์‹œ์ž‘ ๊ธฐ๋‘ฅ์—์„œ ์ค‘๊ฐ„ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค. (์—ฌ๊ธฐ์„  ๋ชฉํ‘œ๊ธฐ๋‘ฅ์ด ๋‹ค์‹œ end์ด๋‹ค) n=1์ด๋ฏ€๋กœ if๋ฌธ ์•ˆ์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค. start ๊ธฐ๋‘ฅ --> end ๊ธฐ๋‘ฅ ์„ ์ถœ๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

 

n=2 ์ผ ๋•Œ์˜ ํ•จ์ˆ˜๋กœ ๋Œ์•„์˜จ๋‹ค. ๋งจ ์œ„์˜ ์›ํŒ์„ ์˜ฎ๊ฒจ๋†“์•˜์œผ๋ฏ€๋กœ ์ด์ œ ์‹œ์ž‘ ๊ธฐ๋‘ฅ์—์„œ ๋ชฉํ‘œ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธด๋‹ค. ์ฆ‰ start ๊ธฐ๋‘ฅ --> mid ๊ธฐ๋‘ฅ์ด๊ฒ ์ง€. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ n=1 hanoiํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ค‘๊ฐ„ ๊ธฐ๋‘ฅ(end)์œผ๋กœ ์˜ฎ๊ฒจ๋‘” ๊ฐ€์žฅ ์ž‘์€ ์›ํŒ์„ ๋ชฉํ‘œ๊ธฐ๋‘ฅ(mid)์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

 

n=3 ์ผ ๋•Œ์˜ ํ•จ์ˆ˜๋กœ ๋Œ์•„์™”๋‹ค! ์œ„ 2๊ฐœ์˜ ์›ํŒ์„ ์ด๋ฏธ ์ค‘๊ฐ„ ๊ธฐ๋‘ฅ(mid)๋กœ ์˜ฎ๊ฒจ๋†“์•˜์œผ๋ฏ€๋กœ ๋งจ ์•„๋ž˜์˜ ๊ฐ€์žฅ ํฐ ์›ํŒ์„ ๋ชฉํ‘œ ๊ธฐ๋‘ฅ(end)๋กœ ์˜ฎ๊ธด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘๊ฐ„ ๊ธฐ๋‘ฅ์— ์žˆ๋Š” 2๊ฐœ์˜ ์›ํŒ์„ ๋‹ค์‹œ ๋ชฉํ‘œ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ฒจ์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์‹œ n=2, mid->end ์ธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค์‹œ 2๊ฐœ์˜ ์›ํŒ์ด ์ฐจ๋ก€์ฐจ๋ก€ end ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.

 

 

- ๋ง๋ถ™์ด๊ธฐ

 

์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์–•๋ณด๋ฉด ์•ˆ๋˜๋Š” ๊ต‰์žฅํžˆ ๋จธ๋ฆฌ ์•„ํ”ˆ ๋…€์„์ด๋‹ค. ํƒˆ์ถœ ์กฐ๊ฑด ๋นผ๋จน์–ด์„œ ๋ฌดํ•œ ๋ฃจํ”„์— ๊ฐ‡ํžˆ๊ธฐ๋„ ํ•˜๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆœ์„œ ์ž˜๋ชป๋˜์–ด์„œ ๊ดด์ƒํ•œ ๋‹ต์ด ๋‚˜์˜ค๊ธฐ๋„ ํ•˜๊ณ  ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์ƒ๋‹นํžˆ ๋งŽ์€ ์•„์ด์ด๋‹ค. ์—ฐ์Šต์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

- BOJ 2798 ๋ธ”๋ž™์žญ

 

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h> 

int main() {
	int n,i,j, k, m;
	int tmp, min, sum;
	int numset[100];
	int answer=0;
	//printf("์นด๋“œ์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” : ");
	scanf("%d", &n);
	//printf("๋”œ๋Ÿฌ๊ฐ€ ์™ธ์น  ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
	scanf("%d", &m);
	for (i = 0; i < n; i++) {
	//printf("์นด๋“œ์— ์ ํžŒ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
	scanf("%d", &numset[i]);
	}

	min = m;
	for (i = 0; i < n ; i++) {
		for (j = i+1; j < n ; j++) {
			for (k = j+1; k < n; k++) {
				sum = numset[i] + numset[j] + numset[k];
				if (sum > m)
					continue;
				tmp = m - sum;
				if (tmp < min) {
					min = tmp;
					answer = sum;
				}
			}

		}
	}
	printf("%d", answer);
	return 0;
}

 

๋ฌธ์ œ๋ฅผ ๋”ฑ ๋ดค์„ ๋•Œ ๋“  ์ƒ๊ฐ : ์„ค๋งˆ 3์ค‘ for๋ฌธ์„ ์“ฐ๋ผ๊ณ ? ๋‹ค ๊ฒ€์‚ฌํ•ด๋ด์•ผํ•ด? ์—์ด ์„ค๋งˆ.. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€.. 

๊ทผ๋ฐ ํ•ด๋‹ต์ธ์ง„ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ ์ผ๋‹จ ๋™์•„๋ฆฌ ์ž๋ฃŒ์—๋Š” ์‹ค์ œ๋กœ.. ๊ทธ๋ ‡๊ฒŒ ํ’€์—ˆ๋‹ค.  ๋ณด๋‹ˆ๊นŒ stack ์ด์šฉํ•ด์„œ ํ‘ผ ์ฝ”๋“œ๋„ ์žˆ์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„ ๊ด€๊ณ„์ƒ(์˜ค๋Š˜ ๋งค์šฐ ๋ฐ”๋นด..) ์šฐ์„ ์€ 3์ค‘ for๋ฌธ์„ ์ด์šฉํ•œ ์™„์ „ ๋…ธ๊ฐ€๋‹ค์‹ ํ’€์ด๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด๋ณด์•˜๋‹ค. 

๋‚ด๊ฐ€ ์ž ๊น ์ƒ๊ฐํ–ˆ๋˜ ๋ฐฉ์‹์€ ์ € ์นด๋“œ์— ์ ํžŒ ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•ด์„œ ํ’€์–ด๋ณผ๊นŒ.. ํ–ˆ์ง€๋งŒ ์ƒ๊ฐ๋งŒ ํ•ด๋ณด๊ณ  ๋”์ด์ƒ ๊ณ ๋ฏผ์„ ๋ชป ํ•ด๋ดค๋‹ค. ๋‚ด์ผ ๋งˆ์ € ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

 

- ๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ

 

์‚ฌ์‹ค ์›๋ฆฌ๋ผ๊ณ  ํ•  ๊ฒƒ๋„ ๋ณ„๋กœ ์—†๋‹ค. ์นด๋“œ์˜ ์ˆ˜, ๋”œ๋Ÿฌ๊ฐ€ ๋งํ•  ์ˆ˜, ์นด๋“œ์— ์ ํžŒ ์ˆ˜๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ž…๋ ฅ๋ฐ›์€ ๋’ค, ์‚ผ์ค‘ ํฌ๋ฌธ์„ ์ด์šฉํ•ด 3๊ฐœ์˜ ์นด๋“œ ์กฐํ•ฉ์œผ๋กœ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ˆซ์ž ํ•ฉ์„ ์ „๋ถ€ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ด ๋•Œ ๊ฐ™์€ ์นด๋“œ๋ฅผ ์ค‘๋ณตํ•ด์„œ 3๊ฐœ์˜ ์นด๋“œ์— ํฌํ•จ์‹œํ‚ค๋ฉด ์•ˆ๋˜๋ฏ€๋กœ j = i+1, k= j+1๋กœ ์‹œ์ž‘ํ•œ๋‹ค. (์‚ฌ์‹ค ๊ทธ๋ž˜์„œ j<n์ด์ง€๋งŒ k=j+1, k<n ์ด๋ฏ€๋กœ j<n-1์ด๋‚˜ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. j๊ฐ€ n-1์ด๊ฒŒ ๋˜๋ฉด ์• ์ดˆ์— k ํฌ๋ฌธ์— ๋ชป ๋“ค์–ด์˜ด) 

ํฌ๋ฌธ์„ ๋Œ ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๊ณ , ํ•ฉ์ด ์ฃผ์–ด์ง„ ์ˆ˜ m ๋ณด๋‹ค ํฌ๋ฉด ๋ฐ”๋กœ continue์‹œ์ผœ์ค€๋‹ค. (๋ฌธ์ œ์—์„œ ๊ทธ๋Ÿฌ๋ผ๊ณ  ํ–ˆ๋‹ค) ๋งŒ์•ฝ ์•„๋‹ˆ๋ฉด ๋ชฉํ‘œ ์ˆซ์ž์™€์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๊ทธ๋™์•ˆ ๋‚˜์˜จ ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’๋ณด๋‹ค ์ž‘์€์ง€ ์•„๋‹Œ์ง€ ๊ฒ€์‚ฌํ•ด๋ณธ๋‹ค. ๋งŒ์•ฝ ์ตœ์†Ÿ๊ฐ’๋ณด๋‹ค ๋” ์ž‘๋‹ค๋ฉด, ์ตœ์†Ÿ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๊ณ  ๋‹ต ๋ณ€์ˆ˜์— ํ•ฉ์„ ์ €์žฅํ•œ๋‹ค. 

ํฌ๋ฌธ์„ ๋‹ค ๋Œ์•˜๋‹ค๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ์‹œ๋„ํ•ด๋ณธ ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.