문제 요약:
N개의 팀 중, 카약을 안 가져온 팀의 수 S, 여분의 카약이 있는 팀의 수 R.
R 개의 팀은 앞뒤의 팀에게 카약을 빌려줄 수 있다.
카약이 없는 최소 팀의 수는?
안 가져온 팀의 번호를 que_S에 넣고, 여분이 있는 팀의 번호를 que_R에 넣는다.
que_S를 최대한 조금 남기는 게 목적이므로, que_S안의 팀을 돌면서 빌릴 팀이 있나 탐색한다.
이때, que_S, que_R이 sort하고 시작하자.
가장 작은 팀의 번호부터 돌 경우, 앞번호의 있는 팀에게서 빌리는 것을 원칙으로 하자.
( 1번 팀이 가지고 있는 여분을 못 빌리는 것을 방지할 수 있다.)
def solve(S,R): # 참가팀 수, 안가져온 팀 수, 여분 가져온 팀 수
que_S = S.copy() #[2,4]
que_S = sorted(que_S)
que_R = R.copy() # [3]
for s in que_S:
if s-1 in que_R: que_R.remove(s-1)
elif s+1 in que_R: que_R.remove(s+1)
ans = len(S)-(len(R)-len(que_R))
return ans
if __name__=='__main__':
lst = list(map(int,input().split()))
S =list(map(int,input().split()))
R = list(map(int,input().split()))
print(solve(S,R))
가장 뒷번호 팀부터 for문을 돌 경우, que_R을 reverse_sort한 후에, if와 elif문을 바꿔주면 된다.
'공부하는 것들 > 알고리즘' 카테고리의 다른 글
백준 9440 : 숫자 더하기(그리디)*** (0) | 2021.03.12 |
---|---|
백준 4796 : 캠핑(그리디) (0) | 2021.03.12 |
백준 1783 : 병든 나이트(그리디) **** (0) | 2021.03.07 |
백준 1439 : 뒤집기(그리디) (0) | 2021.03.06 |
백준 17262 : 팬덤이 넘쳐흘러(그리디)*** (0) | 2021.03.05 |