사서함 목록이 있다고 가정합니다. 여기 각 사서함에 문자열 목록이 제공됩니다. 여기서 각 문자열은 정크의 경우 "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']