1681: 흥미진진 AI 턴제 게임
[만든사람 : 이건우]
문제 설명
턴제 게임이란?
서로 한번씩 공격, 방어 등의 행동을 취하여 대결하는 게임이다.
게임 규칙
나부터 행동을 시작한다.
나의 행동이 끝난 뒤 AI의 행동이 시작된다.
나와 AI는 각각 100의 체력이 있다.
게임 도중 상대방의 체력이 0 이하가 되거나 마지막에 상대방보다 체력이 많으면 승리한다!
할 수 있는 행동은 다음과 같다. (나와 AI가 할 수 있는 행동은 같다.)
공격하기 (상대방의 체력을 30만큼 줄인다.)
물약먹기 (나의 체력을 20만큼 늘린다.)
마법쓰기 (상대방의 체력을 무작위 0~50만큼 줄인다.)
게임의 예시 진행 방식은 다음과 같다. (4번의 턴이 있다고 가정한다)
초기 상태: 내 체력: 100 / AI 체력: 100
1번째 턴
나: 공격하기 (내 체력: 100 / AI 체력: 70)
AI: 물약먹기 (내 체력: 100 / AI 체력: 90)
2번째 턴
나: 공격하기 (내 체력: 100 / AI 체력: 60)
AI: 공격하기 (내 체력: 70 / AI 체력: 60)
3번째 턴
나: 공격하기 (내 체력: 70 / AI 체력: 30)
AI: 공격하기 (내 체력: 40 / AI 체력: 30)
4번째 턴
나: 공격하기 (내 체력: 40 / AI 체력: 0) => 나의 승리!
1. AI의 행동이 무작위다!
2. 마법쓰기 기술은 0~50 까지 무작위로 체력을 줄인다!
무작위를 구현하기 위해 다음과 같은 식을 사용하고자 한다.
(Seed는 게임을 시작할 때 입력하는 무작위 숫자이다.)
첫 번째 턴
X1 = (17 * Seed + 35 ) % 10000
두 번째 턴
X2 = (17 * X1 + 35 ) % 10000
세 번째 턴
X3 = (17 * X2 + 35 ) % 10000
… 이후 동일한 규칙으로 진행
턴 마다 무작위 X값이 정해지며 이 값을 사용해 무작위를 구현한다.
1. AI의 행동 무작위
다음과 같은 식으로 무작위 행동을 결정한다.
X % 3
0 일 경우 공격하기를 선택한다.
1 일 경우 물약먹기를 선택한다.
2 일 경우 마법쓰기를 선택한다.
2. 마법 쓰기의 무작위 위력
다음과 같은 식으로 체력 줄이는 정도를 결정한다. (AI와 나는 동일한 위력을 갖는다.)
(X + 1 ) % 51
난수 적용예시
만약 Seed가 16763 일 경우
X1 = (17 * 16763 + 35 ) % 10000 = 5006 이다.
X2 = (17 * 5006 + 35 ) % 10000 = 5137 이다.
X3 = (17 * 5137 + 35 ) % 10000 = 7364 이다.
게임 적용 예시
첫 번째 턴 설명
AI 행동 무작위 생성식은
5006 % 3
즉 2이며 이는 마법쓰기에 해당된다.
마법 쓰기의 식은
(5006 + 1) % 51
즉, 9이며 상대방의 체력을 9만큼 줄인다.
두 번째 턴 설명
AI 행동 무작위 생성식은
5137 % 3
즉, 1이며 이는 물약먹기에 해당된다.
세 번째 턴 설명
AI 행동 무작위 생성식은
7364 % 3
즉, 2이며 이는 마법쓰기에 해당된다.
마법 쓰기의 식은
(7364 + 1) % 51
즉, 21이며 상대방의 체력을 21만큼 줄인다.
3번째 턴 까지 정리한 내용이다.
AI 1번째 턴 행동: 마법쓰기(9의 체력을 줄인다.)
AI 2번째 턴 행동: 물약먹기
AI 3번째 턴 행동: 마법쓰기(21의 체력을 줄인다.)
시드값과 나의 행동을 입력했을 때 누가 이겼는지 출력하는 프로그램을 작성해라!
입력 설명
첫 번째 줄에 Seed를 입력한다. Seed의 범위는 (1 ~ 100000) 이다.
두 번째 줄에 턴의 수를 입력한다. 범위는 (1 ~ 20) 이다.
세 번째 줄부터 턴의 수만큼 나의 행동을 입력한다.
0 – 공격하기
1 – 물약먹기
2 – 마법쓰기
출력 설명
승패가 출력이 된다.
마지막 명령 수행 후 나의 체력이 많거나 도중에 AI의 체력이 0 이하로 떨어졌을 경우 “승리”
마지막 명령 수행 후 AI의 체력이 많거나 도중에 나의 체력이 0 이하로 떨어졌을 경우 “패배”
체력이 동일하다면 “무승부”
라고 출력이 된다.
입력 예시 Copy
56644
4
0
0
1
2
출력 예시 Copy
승리