[HackerRank] Game of Stones

아르당·2024년 5월 31일
0

HackerRank

목록 보기
99/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

P1과 P2로 불리는 두 명의 플레이어는 돌의 시작 숫자와 함께 게임을 하고 있다. 플레이어 1은 항상 첫 번째로 시작하고, 두 플레이어는 번갈아가면서 진행한다. 게임의 규칙은 아래와 같다.

  • 한 번의 움직임으로 플레이어는 게임 보드에서 2개, 3개, 5개의 돌을 제거할 수 있다.
  • 만약 플레이어가 움직일 수 없다면, 플레이어는 게임에서 진다.

돌의 시작 숫자가 주어질 때, 이긴 플레이어를 찾고, 출력해라. P1의 이름은 First이고 P2의 이름은 Second이다. 각 플레이어는 최적의 방식으로 플레이하며, 이길 수 있는 움직임이 존재할 경우 자신이 게임에서 지게 만드는 움직임을 하지 않는다.
예를 들어 n이 4일때 P1은 아래와 같은 움직임을 보여준다.

  • P1은 2개의 돌을 남기고 2개의 돌을 제거한다. P2는 2개의 돌을 제거하고 승리한다.
  • P1은 1개의 돌을 남기고 3개의 돌을 제거한다. P2는 움직일 수 없고 지게 된다.

P1은 2번째 플레이를 하고 게임에서 승리한다.

Function Description

gameOfStones 함수를 완성해라. 문자열 First 또는 Second를 반환해야한다.
gameOfStones 함수는 아래와 같은 매개변수를 가지고 있다.

  • n: 시작 돌의 개수를 나타내는 정수

Constraints

  • 1 <= n, t <= 100

Solved

점화식을 이용해서 문제를 해결했다. n을 7로 나눴을 때, 나머지가 0 또는 1이면 P2가 이기게 된다.

if문을 통해 n을 7로 나누고 나머지가 0 또는 1인지 확인한다. 그리고 조건을 만족한다면 Second를 반환한다.

if(n % 7 <= 1){ // 1보다 작거나 같으면 나머지가 0 또는 1이 된다
	return "Second";
}

if문을 빠져나왔다면 P1이 이긴 경우라서 First를 반환한다.

return "First";

All Code

public static String gameOfStones(int n) {
	if(n % 7 <= 1){
		return "Second";
	}

	return "First";
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글