← 실전 문제

빈 자리부터 배정하기

Python완성형

원형 좌석 seats에서 0은 빈 자리이고 양의 정수는 이미 앉은 사람의 번호예요. arrivals 순서대로 새 사람을 배정해요. 매번 현재 확인 위치부터 앞으로 돌며 처음 찾은 빈 자리에 앉히고, 그 자리의 다음 위치를 새 확인 위치로 삼아요. 처음 확인 위치는 start예요. 빈 자리가 없으면 이후 도착자는 모두 배정하지 않아요.

solution(seats, arrivals, start)가 배정 후 좌석 리스트를 반환하도록 작성해 주세요. 함수가 seats를 직접 변경해도 괜찮아요.

매개변수와 반환값

  • 좌석 수 n은 1300, 도착자 수 m은 0500이에요.
  • seats의 값은 01,000, arrivals의 번호는 11,000이에요. 같은 번호가 여러 번 나와도 각각 독립된 도착자로 배정해요.
  • start는 0~n-1이며 반환 리스트 길이는 n이에요.

예시

  1. seats = [0, 9, 0, 0], arrivals = [1, 2, 3], start = 2이면 결과는 [3, 9, 1, 2]이에요.
  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까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기