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

파이썬에서 k 일 후 감옥의 상태를 찾는 프로그램

<시간/>

이진 목록(목록의 1과 0)과 또 다른 값 k가 있다고 가정합니다. 숫자의 각 값은 감옥의 상태를 나타내며 1은 점유된 감방을 나타내고 0은 빈 감방을 나타냅니다. 셀에 인접한 두 셀이 모두 채워져 있거나 둘 다 비어 있으면 매일 셀이 채워집니다. 그렇지 않으면 비어 있게 됩니다. 그래서 우리는 k일 후에 감옥의 상태를 찾아야 합니다.

따라서 입력이 nums =[1, 0, 1, 0, 0, 0, 0, 0] k =1과 같으면 출력은 [0, 1, 1, 0, 1, 1, 1, 0], 우리가 알 수 있듯이 첫 번째와 마지막 인덱스는 절대 2개의 이웃을 가질 수 없기 때문에 점유될 수 없습니다.

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

  • next_day_state() 함수를 정의합니다. 셀이 필요합니다.
  • new_cells :=셀 사본
  • new_cells[0] :=0, new_cells[7] :=0
  • 1~6 범위의 j에 대해
    • cell[j - 1]이 cells[j + 1]과 같으면
      • new_cells[j] :=1
    • 그렇지 않으면
      • new_cells[j] :=0
  • new_cell 반환
  • 기본 방법에서 다음을 수행합니다.
  • 본 :=새 지도
  • 플래그 :=거짓, 나는 :=0
  • 내가
  • ns :=next_day_state(cells)
  • ns가 표시되지 않으면
    • ns를 본 대로 표시
  • 그렇지 않으면
    • 플래그 :=참
    • 루프에서 나오다
  • 셀 :=ns
  • 나는 :=나는 + 1
  • 플래그가 참이면
    • N :=N 모드(본 항목 수)
    • i :=0
    • i
    • ns :=next_day_state(cells)
    • 나는 :=나는 + 1
    • 셀 :=ns
  • 반환 셀
  • 더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

    예시

    import copy
    class Solution:
       def next_day_state(self, cells):
          new_cells = copy.copy(cells)
          new_cells[0] = 0
          new_cells[7] = 0
          for j in range(1, 7):
             if cells[j - 1] == cells[j + 1]:
                new_cells[j] = 1
             else:
                new_cells[j] = 0
          return new_cells
    
       def solve(self, cells, N):
          seen = dict()
          flag, i = False, 0
    
          while i < N:
             ns = self.next_day_state(cells)
             if tuple(ns) not in seen:
                seen[tuple(ns)] = True
             else:
                flag = True
                break
             cells = ns
             i += 1
    
          if flag:
             N = N % len(seen)
             i = 0
             while i < N:
                ns = self.next_day_state(cells)
                i += 1
                cells = ns
          return cells
    
    ob = Solution()
    nums = [1, 0, 1, 0, 0, 0, 0, 0]
    k = 1
    print(ob.solve(nums, k))

    입력

    [4, 7, 2, 5], 6

    출력

    [0, 1, 1, 0, 1, 1, 1, 0]