알고리즘(Python)/백준
210525 [백준] AC(5430) / 구간합4(11659) / 수강신청(13414)
제이드Jade
2021. 5. 26. 13:24
[BOJ] 5430 - AC
# deque는 슬라이싱을 할 수 없다
# len 이용하기 전 갯수를 입력으로 받는지 여부를 잘 판단하자. len이 정확한 원소개수를 돌려주지 않을 수 있음
# 출력형식이 [,,,]이면 [, , ,]는 틀린 것이다.
# 뒤집는 연산은 시간이 많이 든다. 매번 앞 원소를 제거하는 것이므로 reverse 후 D는 맨 뒤 원소를 뽑는 것으로 대체할 수 있고 reverse는 마지막에 몰아서 처리한다.
import sys
from collections import deque
T=int(input())
for _ in range(T):
p=list(sys.stdin.readline().strip())
N=int(sys.stdin.readline().strip())
xrr=deque((sys.stdin.readline().strip())[1:-1].split(','))
if N<p.count('D'):
print('error')
continue
if N==0:
print("[]")
continue
rever=0
for i in range(len(p)):
if p[i]=='D':
if rever%2==0:
xrr.popleft()
else:
xrr.pop()
elif p[i]=='R':
rever+=1
if rever%2==1:
xrr.reverse()
printrr='['+','.join(xrr)+']'
print(printrr)
[BOJ] 11659 - 구간합4
#구간들의 합을 구하는건 누적합을 이용한다! 미리 누적합을 리스트에 저장한 후 accums[j]-accums[i]로 한다!#누적합을 편리하게 해주는 라이브러리~~~itertools.accumualte()!!
import sys
import itertools
N,M=map(int,sys.stdin.readline().split())
list_n=list(map(int,sys.stdin.readline().split()))
accums=list(itertools.accumulate(list_n))
for _ in range(M):
i,j=map(int,sys.stdin.readline().split())
print(accums[j-1]-accums[i-2]) if i>1 else print(accums[j-1])
[BOJ] 13414 - 수강신청
#허용되는 크기보다 적게 신청할 수도 있다. 슬라이싱 할 때 용량보다 더 크게 끝 인덱스를 잡으면 알아서 모든 값을 반환하는걸 이용하자.
import sys
K,L=map(int,input().split())
s_list={}
for i in range(L):
sincheong=sys.stdin.readline().strip()
s_list[sincheong]=i
for final_list in sorted(s_list.items(),key=lambda x:x[1])[:K]:
print(final_list[0])