SlideShare a Scribd company logo
ALGORITHM  GAME By  rasto6sk TopCoder Member
ALGORITHM GAME 두명의 플레이어 상대방과 정보를 공유함 더 이상 움직일 수 없을 때 승패가 결정 종착점에 도착 전까지 서로 교대로 행동함  ( 턴방식 ) 모든 플레이어는 최적화된 선택을 함 카드게임류는 상대방의 패를 모르기 때문에 해당하지 않는다 .
THE BASICS < 규칙 > 최초  n  개의 코인이 존재 플레이어는 자기 차례에 특정한 개수 만큼의 코인을 가져갈 수 있음  ( 예 : 1 개 ,3 개 ,4 개 ) 더 이상 가져갈 코인이 없다면 패배
THE BASICS < 예시 > 조건  :  플레이어는  1 개 ,3 개 ,4 개의 코인만을 가져갈 수 있다 최초 코인이  0 개 일 때 첫번째 플레이어는 패배  ( Terminal P0sition ) 최초 코인이  1 개 ,3 개 ,4 개 일 때 첫번째 플레이어는 반드시 승리가 가능하다 . ( Winning Position ) 최초 코인이  2 개 일 때 첫번째 플레이어는 코인  1 개를 가져감  ->  두번째 플레이어는 코인이  1 개 ( Losing Position )
THE BASICS < 법칙 > 마지막 종착점에서는 패배한다 플레이어가  Losing Position 으로 갈 수 있다면  ( 상대방이  Losing Position 이 됨 )   플레이어는  Winning Position 플레이어가  Winning Position 으로 밖에 못간다면  ( 상대방이  Winning Position 이 됨 )  플레이어는  Losing Position 플레이어는 상대방이  Losing Position 으로 가도록 선택한다 ( 최적화 )
THE BASICS 코인은  11 개 ,  플레이어는  1 개 ,3 개 ,4 개의 코인을 가져갈때 더 이상 가져갈 코인이 없다면 패배 N 0 1 2 3 4 5 6 7 8 9 10 11 Position L W L W W W W L W L W W
THE BASICS 코인은  11 개 ,  플레이어는  1 개 ,3 개 ,4 개의 코인을 가져갈때 마지막으로 코인을 가져간 사람이 패배일때 Terminal position 의 조건만 바꾸어 주면 됨 !! N 0 1 2 3 4 5 6 7 8 9 10 11 Position W L W L W W W W L W L W
THE BASICS <WL-Algorithm> boolean   isWinning ( position   pos ) { moves[]  // pos 로부터 갈 수 있는 위치들 for   ( all   x   in   moves )   if   (! isWinning ( x ))   return   true ;   //  하나라도  Losing position 이라면  Winning position return   false ;   //  모두가  Winning position 이라면  Losing position  }
THE GAME OF NIM < 규칙 > 최초  N 개의 더미가 존재함 플레이어는 하나의 더미를 선택하고 적어도 일 이상의 값을 버릴 수 있음 더 이상 버릴 더미가 없을 때 패배 http://www.transience.com.au/pearl3.html  ( 조금 다르지만 )
THE GAME OF NIM xor : 1 이 홀수개면  1,  짝수개면  0 xor 이  0 이 아니므로 반드시 승리한다 !!  이진수 6 1 1 0 9 1 0 0 1 3 1 1 6∧9∧3 1 1 0 0
THE GAME OF NIM < 성질 > 더 이상 버릴 것이 없다면  xor == 0 (Terminal position) xor == 0  (Losing position) 하나 이상의 값을 버릴 때 반드시  xor 은  0 이 아닌 수가 됨 xor != 0  (Winning position) 가장 큰 더미의 값을 변경하면  xor 은 항상  0 이 되도록 만들 수 있음 필승 전략  :  상대방의  xor 이 항상  0 이 되도록 선택함  ( 최적화 )
GRUNDY NUMBER < 규칙 > N x N  사이즈의 체스판에  K 개의 나이트가 존재함 나이트는 좌표값의 합이 적어지는 방향으로만 이동 가능  ( 다음 페이지 그림 참조 ) 하나의 좌표에는 하나 이상의 나이트가 위치할 수 있음
GRUNDY NUMBER < 규칙 >   호구같은 움직임
GRUNDY NUMBER   int   grundyNumber ( position   pos )   { moves[] //pos 에서 갈수 있는 위치를 저장 set   s ; for   ( all   x   in   moves ) insert   into   s   grundyNumber ( x ); // 각각의 위치들의  grundy number 를  s 에 추가  int   ret =0; while   ( s . contains ( ret ))   ret ++; // 하나씩 증가하면서  s 에 값이 있으면  ret++  return   ret ; }
GRUNDY NUMBER
GRUNDY NUMBER < 성질 > 더 이상 움직일 나이트가 없을때 나이트가 위치한 좌표의  Grundy number 의  xor 은  0 (Terminal position) xor == 0 (Losing position) 나이트를 움직이면 반드시  xor 은  0 이 아닌 값 xor != 0  (Winning position) Grundy number 가 가장 큰 나이트를 이동하여  xor 이 항상  0 이 되도록 만들 수 있음 필승 전략  :  상대방의  xor 이 항상  0 이 되도록 선택함  ( 최적화 )

More Related Content

PPTX
First Study Reference(Editted)
PDF
GPU를 위한 병렬 음원 방향 추정 알고리즘
PPTX
알고리듬? 알고리즘?
PDF
[4차]왓챠 알고리즘 분석(151106)
PDF
Build Features, Not Apps
PPTX
NIM game
PDF
한양대학교 ALOHA - 봄내전대회_알고리즘반
PDF
Matlab tetris
First Study Reference(Editted)
GPU를 위한 병렬 음원 방향 추정 알고리즘
알고리듬? 알고리즘?
[4차]왓챠 알고리즘 분석(151106)
Build Features, Not Apps
NIM game
한양대학교 ALOHA - 봄내전대회_알고리즘반
Matlab tetris

Similar to Algorithm Games (20)

PPTX
Matlab tetris
PDF
2018 Ajou Programming Contest solutions
PDF
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
PDF
쏙 알고스터디 01
PDF
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
PDF
인하대 프로그래밍 경진대회 - 문제
PDF
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
PDF
2015 한양대학교 프로그래밍 경시대회 - advanced division
PDF
shake! 2016 예선 문제 풀이
PDF
자료구조02
PDF
게임 필승법과 Sprague–Grundy 정리 - Sogang ICPC Team, 2020 Winter
PPTX
하스켈 성능 튜닝 2
PDF
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
PPTX
Solvability of n-puzzle
PDF
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
PDF
2017 cupc solution
PPTX
테트리스 플랫폼 V1.0
PDF
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
PDF
[KAIST - RUN] 프로그래밍 경진대회 문제
PDF
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
Matlab tetris
2018 Ajou Programming Contest solutions
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
쏙 알고스터디 01
[한양대 aloha] 프로그래밍 경진대회 문제_Beginner part
인하대 프로그래밍 경진대회 - 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
2015 한양대학교 프로그래밍 경시대회 - advanced division
shake! 2016 예선 문제 풀이
자료구조02
게임 필승법과 Sprague–Grundy 정리 - Sogang ICPC Team, 2020 Winter
하스켈 성능 튜닝 2
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
Solvability of n-puzzle
[KAIST - RUN] 프로그래밍 경진대회 문제 풀이
2017 cupc solution
테트리스 플랫폼 V1.0
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
[KAIST - RUN] 프로그래밍 경진대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
Ad

More from skku_npc (14)

PDF
Maximum Flow
PDF
Computational Complexity
PPT
String Searching Algorithms
PPTX
disjoint-set data structures
PPTX
Line sweep algorithms
PPTX
Data Structures
PPT
Prime numbers, factorization
PDF
Mathematics
PDF
Greedy is Good
PDF
Binary Search
PDF
How to find a solution
PDF
Dynamic programming
PPT
An introduction to recursion
PPTX
Introduction to Graphs
Maximum Flow
Computational Complexity
String Searching Algorithms
disjoint-set data structures
Line sweep algorithms
Data Structures
Prime numbers, factorization
Mathematics
Greedy is Good
Binary Search
How to find a solution
Dynamic programming
An introduction to recursion
Introduction to Graphs
Ad

Algorithm Games

  • 1. ALGORITHM GAME By  rasto6sk TopCoder Member
  • 2. ALGORITHM GAME 두명의 플레이어 상대방과 정보를 공유함 더 이상 움직일 수 없을 때 승패가 결정 종착점에 도착 전까지 서로 교대로 행동함 ( 턴방식 ) 모든 플레이어는 최적화된 선택을 함 카드게임류는 상대방의 패를 모르기 때문에 해당하지 않는다 .
  • 3. THE BASICS < 규칙 > 최초 n 개의 코인이 존재 플레이어는 자기 차례에 특정한 개수 만큼의 코인을 가져갈 수 있음 ( 예 : 1 개 ,3 개 ,4 개 ) 더 이상 가져갈 코인이 없다면 패배
  • 4. THE BASICS < 예시 > 조건 : 플레이어는 1 개 ,3 개 ,4 개의 코인만을 가져갈 수 있다 최초 코인이 0 개 일 때 첫번째 플레이어는 패배 ( Terminal P0sition ) 최초 코인이 1 개 ,3 개 ,4 개 일 때 첫번째 플레이어는 반드시 승리가 가능하다 . ( Winning Position ) 최초 코인이 2 개 일 때 첫번째 플레이어는 코인 1 개를 가져감 -> 두번째 플레이어는 코인이 1 개 ( Losing Position )
  • 5. THE BASICS < 법칙 > 마지막 종착점에서는 패배한다 플레이어가 Losing Position 으로 갈 수 있다면 ( 상대방이 Losing Position 이 됨 ) 플레이어는 Winning Position 플레이어가 Winning Position 으로 밖에 못간다면 ( 상대방이 Winning Position 이 됨 ) 플레이어는 Losing Position 플레이어는 상대방이 Losing Position 으로 가도록 선택한다 ( 최적화 )
  • 6. THE BASICS 코인은 11 개 , 플레이어는 1 개 ,3 개 ,4 개의 코인을 가져갈때 더 이상 가져갈 코인이 없다면 패배 N 0 1 2 3 4 5 6 7 8 9 10 11 Position L W L W W W W L W L W W
  • 7. THE BASICS 코인은 11 개 , 플레이어는 1 개 ,3 개 ,4 개의 코인을 가져갈때 마지막으로 코인을 가져간 사람이 패배일때 Terminal position 의 조건만 바꾸어 주면 됨 !! N 0 1 2 3 4 5 6 7 8 9 10 11 Position W L W L W W W W L W L W
  • 8. THE BASICS <WL-Algorithm> boolean isWinning ( position pos ) { moves[] // pos 로부터 갈 수 있는 위치들 for ( all x in moves ) if (! isWinning ( x )) return true ;   // 하나라도 Losing position 이라면 Winning position return false ; // 모두가 Winning position 이라면 Losing position }
  • 9. THE GAME OF NIM < 규칙 > 최초 N 개의 더미가 존재함 플레이어는 하나의 더미를 선택하고 적어도 일 이상의 값을 버릴 수 있음 더 이상 버릴 더미가 없을 때 패배 http://www.transience.com.au/pearl3.html ( 조금 다르지만 )
  • 10. THE GAME OF NIM xor : 1 이 홀수개면 1, 짝수개면 0 xor 이 0 이 아니므로 반드시 승리한다 !! 이진수 6 1 1 0 9 1 0 0 1 3 1 1 6∧9∧3 1 1 0 0
  • 11. THE GAME OF NIM < 성질 > 더 이상 버릴 것이 없다면 xor == 0 (Terminal position) xor == 0 (Losing position) 하나 이상의 값을 버릴 때 반드시 xor 은 0 이 아닌 수가 됨 xor != 0 (Winning position) 가장 큰 더미의 값을 변경하면 xor 은 항상 0 이 되도록 만들 수 있음 필승 전략 : 상대방의 xor 이 항상 0 이 되도록 선택함 ( 최적화 )
  • 12. GRUNDY NUMBER < 규칙 > N x N 사이즈의 체스판에 K 개의 나이트가 존재함 나이트는 좌표값의 합이 적어지는 방향으로만 이동 가능 ( 다음 페이지 그림 참조 ) 하나의 좌표에는 하나 이상의 나이트가 위치할 수 있음
  • 13. GRUNDY NUMBER < 규칙 > 호구같은 움직임
  • 14. GRUNDY NUMBER   int grundyNumber ( position pos ) { moves[] //pos 에서 갈수 있는 위치를 저장 set s ; for ( all x in moves ) insert into s grundyNumber ( x ); // 각각의 위치들의 grundy number 를 s 에 추가 int ret =0; while ( s . contains ( ret )) ret ++; // 하나씩 증가하면서 s 에 값이 있으면 ret++ return ret ; }
  • 16. GRUNDY NUMBER < 성질 > 더 이상 움직일 나이트가 없을때 나이트가 위치한 좌표의 Grundy number 의 xor 은 0 (Terminal position) xor == 0 (Losing position) 나이트를 움직이면 반드시 xor 은 0 이 아닌 값 xor != 0 (Winning position) Grundy number 가 가장 큰 나이트를 이동하여 xor 이 항상 0 이 되도록 만들 수 있음 필승 전략 : 상대방의 xor 이 항상 0 이 되도록 선택함 ( 최적화 )