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

Python에서 다른 사서함의 중요한 메일을 정렬하는 프로그램

<시간/>

사서함 목록이 있다고 가정합니다. 여기 각 사서함에 문자열 목록이 제공됩니다. 여기서 각 문자열은 정크의 경우 "J", 개인의 경우 "P", 작업의 경우 "W"입니다. 첫 번째 사서함부터 라운드 로빈 순서로 각 사서함을 살펴보고 J를 필터링하여 단일 목록을 만들고 목록을 반환합니다.

따라서 입력이 메일박스 =[["W", "P"],["J", "P", "J"],["W"]]인 경우 출력은 ["W" , "W", "P", "P"], 필터링 없이 순서대로 W -> J -> W -> P -> P -> J가 있습니다. 이제 정크를 걸러내므로 W를 얻습니다. -> 여 -> P -> P.

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

  • n_mailboxes :=편지함 크기
  • 결과:=새 목록
  • counts :=n_mailboxes 크기 목록, 0으로 채우기
  • 자세히 :=사실
  • more가 0이 아닌 동안 do
    • 더 :=거짓
    • 0에서 n_mailboxes 범위의 i에 대해 다음을 수행합니다.
      • 색인 :=개수[i], 편지함 :=편지함[i]
      • 인덱스 <메일박스 크기인 경우
        • 자세히 :=사실
        • counts[i] :=counts[i] + 1
        • 메일:=편지함[색인]
        • 메일이 "J"와 같지 않으면
          • 결과 끝에 메일 삽입
  • 반환 결과

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

class Solution:
   def solve(self, mailboxes):
      n_mailboxes = len(mailboxes)
      result = []
      counts = [0]*n_mailboxes
      more = True
      while more:
         more = False
         for i in range(n_mailboxes):
            index, mailbox = counts[i], mailboxes[i]
            if index < len(mailbox):
               more = True
               counts[i] += 1
               mail = mailbox[index]
               if mail != "J":
                  result.append(mail)
         return result
ob = Solution()
mailboxes = [["W", "P"],["J", "P", "J"],["W"]]
print(ob.solve(mailboxes))

입력

[["W", "P"],["J", "P", "J"],["W"]]

출력

['W', 'W', 'P', 'P']