2021. 11. 28. 16:48ใProgramming/Algorithms
1. ๋ฌธ์
n๊ฐ์ ์ ์๋ฅผ ์ผ๋ ฌ๋ก ๋์ด๋์ ๊ฒ์ํ์ ๊ฐ์ง๊ณ ํ์ฐ์ ์ํ๊ฐ ๊ฒ์์ ํฉ๋๋ค. ๊ฒ์์ ํ์ฐ๋ถํฐ ์์ํด์ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์งํํ๋ฉฐ, ๊ฐ ์ฐธ๊ฐ์๋ ์๊ธฐ ์ฐจ๋ก๋ง๋ค ๋ ๊ฐ์ง ์ผ ์ค ํ๋๋ฅผ ํ ์ ์์ต๋๋ค.
- ๊ฒ์ํ์ ์ผ์ชฝ ๋์ ์๋ ์ซ์๋ ์ค๋ฅธ์ชฝ ๋์ ์๋ ์ซ์ ์ค ํ๋๋ฅผ ํํด ๊ฐ์ ธ๊ฐ๋๋ค. ๊ฐ์ ธ๊ฐ ์ซ์๋ ๊ฒ์ํ์์ ์ง์์ง๋๋ค.
- ๊ฒ์ํ์ ๋ ๊ฐ ์ด์์ ์ซ์๊ฐ ์์ ๊ฒฝ์ฐ, ์ผ์ชฝ ๋์์ 2๊ฐ, ํน์ ์ค๋ฅธ์ชฝ ๋์์ 2๊ฐ๋ฅผ ์ง์๋๋ค.
๊ฒ์์ ๋ชจ๋ ์ซ์๊ฐ ๋ค ์์ด์ก์ ๋ ๋๋๋ฉฐ, ๊ฐ ์ฌ๋์ ์ ์๋ ์์ ์ด ๊ฐ์ ธ๊ฐ ์ซ์๋ค์ ํฉ์ ๋๋ค. ํ์ฐ์ ์ํ๋ ์ ์๊ฐ ๋ ๋ฎ์ ์ชฝ์ด ์ ์ ๋์ ์ชฝ์ ํ ์ ์ฐจ์ด๋ง๋ค ๋ฐฑ ์์ฉ ์ฃผ๊ธฐ๋ก ๋ด๊ธฐ๋ฅผ ํ์ต๋๋ค. ๋ ์ฌ๋ ๋ชจ๋ ์ต์ ์ ๋คํ ๋, ๋ ์ฌ๋์ ์ต์ข ์ ์ ์ฐจ์ด๋ ์ผ๋ง์ผ๊น์?
2. ํ์ด
/*
[์ซ์ ๊ฒ์ ๋ฌธ์ ]
n๊ฐ์ ์ ์๋ฅผ ์ผ๋ ฌ๋ก ๋์ด๋์ ๊ฒ์ํ์ ๊ฐ์ง๊ณ ํ์ฐ์ ์ํ๊ฐ ๊ฒ์์ ํฉ๋๋ค.
๊ฒ์์ ํ์ฐ๋ถํฐ ์์ํด์ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์งํํ๋ฉฐ,
๊ฐ ์ฐธ๊ฐ์๋ ์๊ธฐ ์ฐจ๋ก๋ง๋ค ๋ ๊ฐ์ง ์ผ ์ค ํ๋๋ฅผ ํ ์ ์์ต๋๋ค.
๊ฒ์ํ์ ์ผ์ชฝ ๋์ ์๋ ์ซ์๋ ์ค๋ฅธ์ชฝ ๋์ ์๋ ์ซ์ ์ค ํ๋๋ฅผ ํํด ๊ฐ์ ธ๊ฐ๋๋ค.
๊ฐ์ ธ๊ฐ ์ซ์๋ ๊ฒ์ํ์์ ์ง์์ง๋๋ค.
๊ฒ์ํ์ ๋ ๊ฐ ์ด์์ ์ซ์๊ฐ ์์ ๊ฒฝ์ฐ, ์ผ์ชฝ ๋์์ 2๊ฐ, ํน์ ์ค๋ฅธ์ชฝ ๋์์ 2๊ฐ๋ฅผ ์ง์๋๋ค.
๊ฒ์์ ๋ชจ๋ ์ซ์๊ฐ ๋ค ์์ด์ก์ ๋ ๋๋๋ฉฐ,
๊ฐ ์ฌ๋์ ์ ์๋ ์์ ์ด ๊ฐ์ ธ๊ฐ ์ซ์๋ค์ ํฉ์
๋๋ค.
ํ์ฐ์ ์ํ๋ ์ ์๊ฐ ๋ ๋ฎ์ ์ชฝ์ด ์ ์ ๋์ ์ชฝ์ ํ ์ ์ฐจ์ด๋ง๋ค ๋ฐฑ ์์ฉ ์ฃผ๊ธฐ๋ก ๋ด๊ธฐ๋ฅผ ํ์ต๋๋ค.
๋ ์ฌ๋ ๋ชจ๋ ์ต์ ์ ๋คํ ๋, ๋ ์ฌ๋์ ์ต์ข
์ ์ ์ฐจ์ด๋ ์ผ๋ง์ผ๊น์?
*/
/*
play(state) : ํ์ฌ ๊ฒ์ํ์ ๋จ์ ์๋ค์ด state์ผ ๋,
(์ด๋ฒ ์ฐจ๋ก์ธ ์ฐธ๊ฐ์์ ์ ์ - ๋ค๋ฅธ ์ฐธ๊ฐ์์ ์ ์)์ ์ต๋์น
board[] : ๊ฒ์ํ์ ๊ฐ ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
- ๋ฐํ ๊ฐ์ด -1๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์,
์์ง ๊ณ์ฐ๋์ง ์์ EMPTY ๊ฐ์ -987654321๋ก ์ค์ ํ๋ค.
*/
const int EMPTY = -987654321;
int n;
int board[50];
int cache[50][50];
int play(int left, int right) {
if (left > right) {
return 0;
// ๊ธฐ์ ์ฌ๋ก
}
int& ret = cache[left][right];
// ๋ฉ๋ชจ์ด์ ์ด์
if (ret != EMPTY) {
return ret;
}
// ์๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ
ret = max(
board[left] - play(left + 1, right),
board[right] - play(left, right-1)
// ๋ด๊ฐ ์ํ๋ ๊ฐ์ ๊ตฌํ๊ณ ์ถ๋ค๋ฉด ์๋ค์ play ๊ฐ์ -๋ฅผ ์ทจํ๋ฉด ๋๋ค.
);
//์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ
if (right - left + 1 >= 2) {
ret = max(ret, -play(left + 2, right));
// ์ผ์ชฝ ๋ ๊ฐ ์ญ์
ret = max(ret, -play(left, right - 2));
// ์ค๋ฅธ์ชฝ ๋ ๊ฐ ์ญ์
// ์ธ๋ฑ์ค์ 2์นธ ์ด๋์ผ๋ก ์ญ์ ํ๋ ๊ณผ์ ์ ํํํ๋ค.
}
return ret;
}
3. MINIMAX ALGORITHM : ๋ฏธ๋๋งฅ์ค ์๊ณ ๋ฆฌ์ฆ
minimax algorithm:
- ๊ฒ์ ํธ๋ฆฌ์ ๊ฐ ์ธต๋ง๋ค ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์ต๋ํ / ์ต์ํ ํ๋ค๋ ์๋ฏธ์์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฏธ๋๋งฅ์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์๋๋ฐฉ์ด ์ต์ ์ ์ ํ์ ํ๋ค๋ ๊ฐ์ ํ์, ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌํํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ์ด๋ ํ ๋ชฉ์ ์ด ์์ผ๋ฉด, ๊ทธ๊ฒ์ ์ํ ์ต์ ์ ๊ฒฐ์ ์ ์ค๊ณํ๋ค. ๊ทธ ๋ค์์ ๋์ฌ ์ ์๋ ์ต์ ์ ์๋ฅผ ์์ํ์ฌ, ๊ฐ ํด๋ง๋ค ์ต์ ์ ์๋ฅผ ์ฐพ์๋ธ๋ค.
- ํธ๋ฆฌ ๊ตฌ์กฐ: ๊น์ด๊ฐ ๊น์ด์ง์ ๋ฐ๋ผ ๋ ธ๋๊ฐ ๊ธฐํ ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๋ฏ๋ก, ํธ๋ฆฌ์ ๊น์ด๋ฅผ ์ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
4. GIT-HUB
5. ์ถ์ฒ
- https://algospot.com/judge/problem/read/NUMBERGAME
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jerrypoiu&logNo=221280459884
- https://wiserloner.tistory.com/1027
-
'Programming > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด] STRJOIN ๋ฌธ์์ด ํฉ์น๊ธฐ / ํํ๋ง ์ฝ๋ (0) | 2021.11.30 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด] TICTACTOE game (0) | 2021.11.28 |
[์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด] ZIMBABWE (0) | 2021.11.27 |
[์๊ณ ๋ฆฌ์ฆ] ๋์ ๊ณํ๋ฒ, ๋ฉ๋ชจ์ด์ ์ด์ ์ด๋? (0) | 2021.11.27 |