- 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์์ผ์ค๋ค. (๋ฌธ์ ์์ ๊ทธ๋ฌ๋ผ๊ณ ํ๋ค) ๋ง์ฝ ์๋๋ฉด ๋ชฉํ ์ซ์์์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํด์ ๊ทธ๋์ ๋์จ ์ฐจ์ด์ ์ต์๊ฐ๋ณด๋ค ์์์ง ์๋์ง ๊ฒ์ฌํด๋ณธ๋ค. ๋ง์ฝ ์ต์๊ฐ๋ณด๋ค ๋ ์๋ค๋ฉด, ์ต์๊ฐ์ ๊ฐฑ์ ํ๊ณ ๋ต ๋ณ์์ ํฉ์ ์ ์ฅํ๋ค.
ํฌ๋ฌธ์ ๋ค ๋์๋ค๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ์๋ํด๋ณธ ๊ฒ์ด๋ฏ๋ก ๋ต์ ์ถ๋ ฅํ๋ค.
'๐ก๐ธ๐ธ๐ถ๐ฃ: ๐๐๐๐๐๐พ๐๐ฝ๐ > ๐ก๐ฃ๐ข๐ฃ: ๐๐๐๐๐๐พ๐๐ฝ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ALPS Study] DFS(๊น์ด ์ฐ์ ํ์) - ํ ํ๋ก์ ํธ(BOJ 9466) (0) | 2020.07.22 |
---|---|
[ALPS Study] ํ์ -๊ทธ๋ํ์ DFS(๊น์ด ์ฐ์ ํ์)(2) (0) | 2020.07.17 |
[ALPS Study] ํ์ -๊ทธ๋ํ์ DFS(๊น์ด ์ฐ์ ํ์)(1) (0) | 2020.07.16 |
[ALPS Study] ์์ ํ์ - N๊ณผ M(ํด๊ฒฐ์ค) + ๋ณต์ต (0) | 2020.07.15 |
[ALPS Study] ์์ ํ์ - ๋ธ๋์ญ2, ์ํ๊ฐ๋ ์ (0) | 2020.07.14 |