학교 식당에서는 점심 시간에 원형과 사각형 샌드위치를 제공합니다. 이 샌드위치는 각각 숫자 0과 1로 나타냅니다. 모든 학생들은 줄을 서서 각자 원형 또는 사각형 샌드위치를 선호합니다.
식당의 샌드위치 수는 학생 수와 같습니다. 샌드위치는 스택에 쌓여 있습니다. 각 단계에서:
1. 만약 줄의 맨 앞 학생이 스택 맨 위의 샌드위치를 선호하면, 그 학생은 샌드위치를 가져가고 줄에서 나갑니다.
2. 그렇지 않으면, 그 학생은 샌드위치를 남겨두고 줄의 끝으로 이동합니다.
이 과정은 줄의 학생들이 더 이상 스택 맨 위의 샌드위치를 가져가지 않을 때까지 계속됩니다.
두 개의 정수 배열 students와 sandwiches가 주어집니다. 여기서 sandwiches[i]는 스택의 i번째 샌드위치 종류(위에서부터 아래로), students[j]는 초기 줄에서 j번째 학생의 선호도를 나타냅니다. 먹을 수 없는 학생 수를 반환하세요.
• 입력: students = [1,1,0,0], sandwiches = [0,1,0,1]
• 출력: 0
• 설명:
• 앞 학생이 맨 위의 샌드위치를 남기고 줄 끝으로 이동하여 학생들이 [1,0,0,1]이 됩니다.
• 앞 학생이 맨 위의 샌드위치를 남기고 줄 끝으로 이동하여 학생들이 [0,0,1,1]이 됩니다.
• 앞 학생이 맨 위의 샌드위치를 가져가서 줄에서 나가 학생들이 [0,1,1], 샌드위치가 [1,0,1]이 됩니다.
• 이 과정이 반복되어 모든 학생들이 샌드위치를 먹을 수 있습니다.
• 입력: students = [1,1,1,0,0,1], sandwiches = [1,0,0,0,1,1]
• 출력: 3
• 설명:
• 이 과정이 반복되어 3명의 학생들이 샌드위치를 먹을 수 없습니다.
• 1 <= students.length, sandwiches.length <= 100
• students.length == sandwiches.length
• sandwiches[i]는 0 또는 1입니다.
• students[i]는 0 또는 1입니다.
class Solution:
def countStudents(self, students: List[int], sandwiches: List[int]) -> int:
students = deque(students)
sandwiches = deque(sandwiches)
count = 0
while students and count != len(students):
if students[0] == sandwiches[0]:
students.popleft()
sandwiches.popleft()
count = 0
else:
students.append(students.popleft())
count += 1
return len(students)