Baekjoon/IM Level

[백준] 2605 줄세우기 (브론즈2) / insert(), extend()

hellosonic 2023. 3. 9. 12:34

문제요약

나의 코드 및 설명

  • n : 학생의 수
  • num_list : 줄을 선 학생대로 뽑은 번호
  • students : 학생들이 줄을 선 현황을 리스트로 표현하였다.
  • for문 : 학생 수 만큼 반복하는 반복문을 작성하였다. 
    첫 번째 학생(i = 0)의 경우는 무조건 통과하게 되고, 두 번째 학생(i = 1)부터 본격적으로 반복문을 수행하게 되는데,
    for문 내의 for문으로 해당 학생이 뽑은 번호 만큼 자리 이동이 될 수 있도록 작성하였다. 예를 들어 4번째 학생(i = 3)이 뽑은 번호는 <3>인데, 이때 인덱스 3을 인덱스 2의 값으로 바꾸고, 인덱스 2를 인덱스 1의 값으로 바꾸고 인덱스 1을 인덱스 0의 값으로 바꾸고, for문을 나와서 인덱스 <i - 뽑은 번호> 를 학생 번호로 바꿔주면 된다.(뽑은 번호만큼 앞으로 가야하니까)
n = int(input())
num_list = list(map(int, input().split())) # 0 1 1 3 2
students = list(range(1,n+1))

for i in range(len(students)): 
    # i = 0 / 1 2 3 4 5
    # i = 1 / 1 1 3 4 5 / 2 1 3 4 5
    # i = 2 / 2 1 1 4 5 / 2 3 1 4 5
    # i = 3 / 2 3 1 1 5 / 2 3 3 1 5 / 2 2 3 1 5 / 4 2 3 1 5
    # i = 4 / 4 2 3 1 1 / 4 2 3 3 1 / 4 2 5 3 1(end)
    if i == 0:
        continue
    for j in range(num_list[i]):
        students[i-j] = students[i-j-1] 
    students[i - num_list[i]] = i + 1
    
for i in range(len(students)):
    print(students[i], end = " ")
    if i == len(students) - 1:
        print()

다른 코드 및 설명

  • insert() 메서드를 이용해 리스트의 원하는 인덱스 지점에 값을 추가할 수 있다.
n = int(input())
arr = list(map(int, input().split()))
li = []
# 0 1 1 3 2
for i in range(n):
    if i == 0:
        li.insert(0, i+1)
    else:
        li.insert(arr[i], i+1)
li.reverse()
for i in range(len(li)):
    print(li[i], end = " ")
    if i == len(li) - 1:
        print()

insert(위치, 값) : 리스트의 원하는 위치에 값을 추가한다.

>>> nums = [1, 2, 3]
>>> nums.insert(0, [10, 20])  # 0번째(맨앞에) 추가
[[10, 20], 1, 2, 3]

>>> nums.insert(-1, 100)  # 끝에서 1번째 전에 추가
>>> print(nums)
[[10, 20], 1, 2, 100, 3]  # 리스트 맨 끝에 저장되지 않음


>>> nums = [1, 2, 3]
>>> nums.insert(len(nums), 100)
[1, 2, 3, 100]

extend(리스트) : 리스트를 확장한다.

>>> nums = [1, 2, 3]
>>> nums.extend([4, 5])
[1, 2, 3, 4, 5]  #리스트로 주어진 [4, 5]의 요소가 각각 추가 되었음

>>> a = [10]
>>> nums.extend(a) 
[1, 2, 3, 4, 5, 10]