Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 회문 문자열을 먼저 얻기 위해 문자를 재배열하는 플레이어 찾기


소문자가 포함된 문자열 S가 있다고 가정하고 이제 두 명의 플레이어가 게임을 하고 있습니다. 규칙은 다음과 같습니다 -

  • 플레이어가 이동 시 문자열의 문자를 섞어 회문 문자열을 얻을 수 있는 경우 플레이어가 게임에서 승리합니다.

  • 플레이어는 문자열에서 문자를 제거해야 할 때 승리할 수 없습니다.

우리는 두 플레이어 모두 게임을 최적으로 플레이하고 플레이어 1이 게임을 시작한다는 점을 명심해야 합니다. 게임의 승자를 찾아야 합니다.

따라서 입력이 "pqpppq"와 같으면 첫 번째 단계에서 플레이어-1이 캐릭터를 정렬하여 "ppqqpp"를 얻고 게임에서 승리하므로 출력은 Player1이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • l :=시퀀스의 크기

  • freq :=크기가 26이고 0으로 채워진 목록을 만듭니다.

  • 범위 0에서 l의 i에 대해 1씩 증가, 수행

    • 시퀀스[i]의 주파수를 1 증가

    • 개수 :=0

    • 0에서 25 사이의 i에 대해 수행

      • freq[i] mod 2가 0이 아니면

        • 개수 :=개수 + 1

    • 개수가 0이거나 개수가 홀수이면

      • 1 반환

    • 그렇지 않으면

      • 반환 2

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def who_is_the_winner(sequence):
   l = len(sequence)
   freq = [0 for i in range(26)]
   for i in range(0, l, 1):
      freq[ord(sequence[i]) - ord('a')] += 1
   count = 0
   for i in range(26):
      if (freq[i] % 2 != 0):
         count += 1
   if (count == 0 or count & 1 == 1):
      return 1
   else:
      return 2
sequence = "pqpppq"
print("Player:", who_is_the_winner(sequence) )

입력

"pqpppq"

출력

Player: 1