처음에 문제조건을 잘못 읽어서 공을 계속 추가해서 넣는 줄 알았는데, 알고보니 하나 넣으면 하나 빼는 방식이었다. 문제해결할 때에는 조건을 잘 읽고 헛으로 삽질하지 않도록 유의하자!!
나의 풀이
import sys
n_basket, n_round = map(int, sys.stdin.readline().split())
result = [0] * n_basket
for i in range(n_round):
start, end, num = map(int, sys.stdin.readline().split())
for i in range(start, end+1):
result[i-1] = num
for i in result:
print(i, end=" ")
for 문을 돌려서 현재 상태를 result에 저장 후 update한 뒤에 최종 결과를 print하는 식으로 작성했다.
고수들의 풀이 참고하기!
f=lambda:map(int,input().split())
n,m=f();b=[0]*n
exec("i,j,k=f();b[i-1:j]=[k]*(j-i+1);"*m)
print(*b)
- input 받을 때 매번 적어주는 것보다는 lambda를 활용해서 깔끔하게 적자!
-
f=lambda:map(int, input().split())
선언 후에f()
로 간편하게 불러올 수 있다.f=lambda:map(int, sys.stdin.readline().split())
로도 응용가능
-
- exec는 문자열 안의 코드를 실행하고 return하지 않는다.
- "”안의 내용을 m번 반복해라
- i,j,k=f()로 불러오고
- b의 (i-1)요소부터 (j)요소까지는 [k] 저장
- print(*)
- ans = [1, 2, 3]일 경우 print(*ans)는 1 2 3을 출력한다.
극한의 숏코딩
p,_,*l=map(int,open(0).read().split())
L=[0]*p
while l:p,q,r,*l=l;L[p-1:q]=[r]*(q-p+1)
print(*L)
- 심지어 f() 두번 쓰는 것도 귀찮다. 범용성있게 input()받아올랭
- p, _, *l
- 세 번째 요소는 있으면 받아오고 없으면 안받아
- open(0)으로 계속 읽어오깅
- 나머진 위의 풀이와 동일. exec 대신 while 쓴 것 뿐이다.