그때 그때 프린트로 출력하기 vs 리스트에 모아서 표준출력으로 바로 출력하기
- 파이썬은 비슷하고 파이파이는 차이 있어 보임.
t, *data = map(int,open(0).read().split())
it = iter(data)
res = []
for _ in range(t):
n, k = next(it),next(it)
happy = 0
for _ in range(n):
happy += next(it) // k
res.append(happy)
open(1,"w").write('\n'.join(map(str,res)))
#pyth3 36ms
#pypy3 96ms
t, *data = map(int,open(0).read().split())
it = iter(data)
res = []
for _ in range(t):
n, k = next(it),next(it)
happy = 0
for _ in range(n):
happy += next(it) // k
print(happy)
#pyth3 36ms
#pypy3 104ms
문자 붙이기 vs 리스트JOIN하기
- 문자 붙이기가 이번엔 더 빨랐다.
t, *data = map(int,open(0).read().split())
it = iter(data)
res = ""
for _ in range(t):
n, k = next(it),next(it)
happy = 0
for _ in range(n):
happy += next(it) // k
res+=str(happy)+'\n'
open(1,"w").write(res)
#pyth3 32ms
#pypy3 92ms
이터레이터를 생성하지 않고 바로 리스트 인덱스로 하면 더 빠르지 않을까?
- 파이파이 왜 더 느려?
t, *data = map(int,open(0).read().split())
idx = 0
res = ""
for _ in range(t):
n, k = data[idx],data[idx+1]
happy = 0
for i in range(n):
happy += data[idx+i+2] // k
idx+=2+n
res+=str(happy)+'\n'
open(1,"w").write(res)
#pyth3 32ms
#pypy3 96ms
이쯤에서 그만하려고 했는데 파이썬 28ms 비공개 코드가 1위에 있어서 뭐가 더 있을까 생각해 보았다.
아무리 생각해봐고 없어서 리스트 컴프리헨션과 sum이라도 써 봤는데 이론상 리스트 만들어서 더하면 더 느리겠지...
- 그런데 왜 단일변수로 누적합하는 위 코드보다 컴프리헨션 쓴 코드가 파이파이는 빠른 것일까.
t, *data = map(int,open(0).read().split())
idx = 0
res = ""
for _ in range(t):
n, k = data[idx],data[idx+1]
happy = sum(data[idx + i + 2] // k for i in range(n))
idx+=2+n
res+=str(happy)+'\n'
open(1,"w").write(res)
#pyth3 32ms
#pypy3 92ms