Python/online judge

백준 [10810.공 넣기] | Python

구름솜:D 2023. 11. 29. 17:49
728x90

✏️ 문제

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

 

10810번: 공 넣기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이

www.acmicpc.net

 

 

✏️ 풀이방법

1. 0으로 초기화된 1차원리스트(basket)를 생성해서 인덱스를 활용하여 일정범위까지 숫자를 변경한다.

2. 숫자를 변경하는 과정을 m번 동안 반복한다.

 - 리스트는 변형(mutable)가능한 자료형이기 때문에 인덱스를 활용해서 값을 변경할 수 있다.

 

 

📌 코드

n ,m = map(int,input().split())
basket = [0 for _ in range(n)]
put = []
for x in range(m):
    put.append(list(map(int,input().split())))
    i = put[x][0]
    j = put[x][1]
    for y in range(i,j+1):
        basket[y-1] = put[x][2] #인덱스는 -1

print(' '.join([str(_) for _ in basket]))

 

 

📌 결과

#입력
5 4
1 2 3
3 4 4
1 4 1
2 2 2

#출력
1 2 1 1 0

 

 

🤔 시행착오.1

n ,m = map(int,input().split())
basket = [0 for _ in range(n)]
put = []
for _ in range(m):
    put.append(list(map(int,input().split())))

for x in range(m):
    i = put[x][0]
    j = put[x][1]
    ball = put[x][2]
    basket[i:j+1] = [ball]
print(basket)
[0, 1, 2]

- basket[i:j+1] = [ball]을 실행하면 basket[i:j+1]는 리스트(basket)의 i부터 j까지 원소를 바꾸는 것이 아니라 리스트(basket)의 i부터 j까지로 슬라이싱을 한 것이다.

 

 

🤔 시행착오.2

n ,m = map(int,input().split())
basket = [0 for _ in range(n)]
put = []
for x in range(m):
    put.append(list(map(int,input().split())))
    i = put[x][0]
    j = put[x][1]
    for y in range(i,j+1):
        basket[y] = put[x][2] 

print(' '.join([str(_) for _ in basket]))
0 1 2 1 1

- basket[y] = put[x][2]에서 y값이 인덱스번호로 들어가야하기 때문에 -1을 해줘야한다.