공부하기/백준

[Python] 백준 풀기 2605 - 줄 세우기

XEV 2023. 1. 29. 23:42

파이썬 백준 2605번

브론즈 2

https://www.acmicpc.net/problem/2605

 

2605번: 줄 세우기

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현, 자료 구조

 

 

 

 

 

문제 풀기

학생 번호와 뽑은 번호표와의 관계를 통해 줄 선 순서를 확인해 보면, (학생 번호 - 번호표) 가 그 순서 위치임을 알 수 있다.

이 관계를 통해 해당 위치에 학생을 중간에 넣기 위해서 list, insert() 를 사용한다.

index 를 학생의 번호와 맞추기 위해 index 0 에 0 을 초기화하여 리스트 student_ls 를 사용하였다.

student_ls.insert(studentNum - t, studentNum) 로 학생의 줄 순서를 저장하고 초기 입력된 index 0 을 제거하고 출력한다.

 

 

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline


def fnGetInLine():
    studentNum = 1 # 첫 번째 (1 번) 학생.
    for t in ticket_ls: # 번호표 리스트에서 학생 순서에 맞게 하나씩 그 번호를 빼냄.
        student_ls.insert(studentNum - t, studentNum) # (번호표 - 학생순서) index 위치에 학생 번호를 삽입.
        studentNum += 1 # 학생 번호를 하나씩 늘려가며 반복.
    
    student_ls.pop(0) # index 를 맞추기 위해 초기값으로 넣은 index 0 값 제거.
    print(*student_ls) # 출력 요건에 맞게 print.


if __name__ == "__main__":
    n = int(inputdata().strip())
    
    student_ls = [0] # 학생의 번호를 저장할 리스트. index 를 맞추기 위해 0 으로 시작.
    ticket_ls = list(map(int, inputdata().split()))
    
    fnGetInLine()