원형 좌석 seats에서 0은 빈 자리이고 양의 정수는 이미 앉은 사람의 번호예요. arrivals 순서대로 새 사람을 배정해요. 매번 현재 확인 위치부터 앞으로 돌며 처음 찾은 빈 자리에 앉히고, 그 자리의 다음 위치를 새 확인 위치로 삼아요. 처음 확인 위치는 start예요. 빈 자리가 없으면 이후 도착자는 모두 배정하지 않아요.
solution(seats, arrivals, start)가 배정 후 좌석 리스트를 반환하도록 작성해 주세요. 함수가 seats를 직접 변경해도 괜찮아요.
매개변수와 반환값
- 좌석 수 n은 1
300, 도착자 수 m은 0500이에요. - seats의 값은 0
1,000, arrivals의 번호는 11,000이에요. 같은 번호가 여러 번 나와도 각각 독립된 도착자로 배정해요. - start는 0~n-1이며 반환 리스트 길이는 n이에요.
예시
seats = [0, 9, 0, 0],arrivals = [1, 2, 3],start = 2이면 결과는[3, 9, 1, 2]이에요.seats = [5, 0, 0],arrivals = [7, 8, 9],start = 2이면 결과는[5, 8, 7]이에요.
실행용 입출력
첫 줄에 n m start, 둘째 줄에 좌석 n개, 셋째 줄에 도착자 m개를 입력해요. m=0이면 셋째 줄은 빈 줄이에요. 반환 리스트를 한 줄에 출력해요.
예시 입력
4 3 2 0 9 0 0 1 2 3
예상 결과
3 9 1 2
예시 입력
3 3 2 5 0 0 7 8 9
예상 결과
5 8 7
핵심 개념
array-1d: 0인지 확인해 빈 자리와 점유된 자리를 구분해요. 반환값은 도착자 목록이 아니라 배정 후 좌석 상태예요.loops: 사람마다 최대 n개 위치를 확인하면 빈 자리가 없는 경우에도 반복을 끝낼 수 있어요.break는 가장 가까운 반복문 하나를 종료해요.conditionals: 배정 성공 여부에 따라 다음 사람을 처리할지 정해요.
% n은 원형 인덱스를 만들어요. len(seats)로 좌석 수를 얻고 리스트의 seats[i]에 정수를 대입해 한 자리를 바꿔요. 입력의 빈 줄을 .split()하면 빈 리스트가 되어 도착자 0명도 읽을 수 있어요.
입력 하네스의 input()은 한 줄의 문자열을 읽고, .split()은 공백으로 항목을 나눠요. map(int, ...)는 각 항목을 정수로 바꾸고 list(...)는 그 결과를 리스트로 모아요. range(n)은 0부터 n-1까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.