본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #2605: 줄 세우기

www.acmicpc.net/problem/2605

 

2605번: 줄 세우기

점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을

www.acmicpc.net

 

[문제]

학생들이 한 줄로 줄을 선 후, 첫 번째 학생부터 차례로 번호를 뽑는다. 첫 번째로 줄을 선 학생은 무조건 0번 번호를 받아 제일 앞에 줄을 선다. 두 번째로 줄을 선 학생은 0번 또는 1번 둘 중 하나의 번호를 뽑는다. 0번을 뽑으면 그 자리에 그대로 있고, 1번을 뽑으면 바로 앞의 학생 앞으로 가서 줄을 선다. 세 번째로 줄을 선 학생은 0, 1 또는 2 중 하나의 번호를 뽑는다. 그리고 뽑은 번호만큼 앞자리로 가서 줄을 선다. 마지막에 줄을 선 학생까지 이와 같은 방식으로 뽑은 번호만큼 앞으로 가서 줄을 서게 된다. 각자 뽑은 번호는 자신이 처음에 선 순서보다는 작은 수이다.

줄을 선 학생들이 차례로 뽑은 번호가 주어질 때 학생들이 최종적으로 줄을 선 순서를 출력하는 프로그램을 작성하시오.

 

[문제 접근]

insert()함수를 사용하여 줄을 서게 한다.

 

 

[정답]

 

1. 학생의 수를 N에 입력받는다. 학생들이 뽑은 번호를 리스트 num에 입력받는다. 최종적으로 줄을 선 순서를 저장할 리스트 ans을 선언한다.

2. for문을 돌면서 insert()함수를 사용하여 해당 학생을 뽑은 번호를 기반하여 줄을 세운다.

ex) num=[0, 1, 1, 3, 2]

i=0) ans.insert(0,1) → ans=[1]

i=1) ans.insert(0,2) → ans=[2,1]

i=2) ans.insert(1,3) → ans=[2,3,1]

i=3) ans.insert(0,4) → ans=[4,2,3,1]

i=4) ans.insert(2,5) → ans=[4,2,5,3,1]

3. 최종적으로 줄을 선 순서 ans를 출력한다.