[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด] NUMBERGAME : ์ˆซ์ž ๊ฒŒ์ž„

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

 

- https://github.com/SohyeonKim-dev/AlgorithmicProblem/blob/main/DynamicProgramming_technique/numbergame.cpp

 

 

 

 

 

5. ์ถœ์ฒ˜

 

- https://algospot.com/judge/problem/read/NUMBERGAME

- https://going-to-end.tistory.com/entry/Minimax-algorithm-%EB%AF%B8%EB%8B%88%EB%A7%A5%EC%8A%A4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jerrypoiu&logNo=221280459884 

- https://wiserloner.tistory.com/1027