촬리의늘솔길

[BOJ/2891]번 그리디 문제 본문

✍️2023/Algorithm

[BOJ/2891]번 그리디 문제

리촬리 2023. 4. 23. 16:34

카약과 강풍

문제

2890번 을 보면 알겠지만, 상근이는 카약 대회를 개최했다. 그런데, 갑자기 엄청난 강풍이 경기장에 불었고, 일부 카약이 부서졌다. 경기는 5분 안에 시작해야 하는 상황이다.

다행히 일부 팀은 혹시 모를 사태에 대비해서 카약을 하나 더 경기장에 들고 왔다. 카약은 매우 무겁고 운반하기 어렵다. 따라서, 자신의 바로 다음이나 전에 경기하는 팀에게만 카약을 빌려주려고 한다. 즉, 팀 4는 여분의 카약을 3이나 5에게만 빌려줄 수 있다. 다른 팀에게서 받은 카약은 또 다른 팀에게 빌려줄 수 없다. 또, 카약을 하나 더 가져온 팀의 카약이 손상되었다면, 여분의 카약으로 경기에 출전하게되고, 이 카약은 다른 팀에게 빌려줄 수 없다.

카약이 부서진 팀과 하나 더 가져온 팀이 주어진다. 카약을 적절히 빌렸을 때 출발하지 못하는 팀의 최솟값은 몇 팀인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 팀의 수 N, 카약이 손상된 팀의 수 S, 카약을 하나 더 가져온 팀의 수 R이 주어진다. (2 ≤ N ≤ 10, 1 ≤ S, R ≤ N)

둘째 줄에는 카약이 손상된 팀의 번호가 주어진다. 팀 번호는 중복되지 않는다.

셋째 줄에는 카약을 하나 더 가져온 팀의 번호가 주어진다. 팀 번호는 중복되지 않는다.

출력

첫째 줄에 출발을 할 수 없는 팀의 최솟값을 출력한다.

예제 입력 1 복사

5 2 1
2 4
3

예제 출력 1 복사

1

예제 입력 2 복사

5 2 3
2 4
1 3 5

예제 출력 2 복사

0

 


막간 파이썬 문법 ( 다 까먹어서 이렇게 중간중간 찾아보면서 익히는게..나을듯함..)

- 띄어쓰기로 구분된 여러개 문자 입력값을 리스트에 넣고 싶은경우

s = list(input().split())

- 띄어쓰기로 구분된 여러개 숫자 입력값을 리스트에 넣고 싶은경우

number = list(map(int,input().split()))

 

이문제도 체육복과 마찬가지로 중복 금지에 초점을 맞춰서 

중복된 것이 있을경우에 제거해주는 코드를 짜 줘야 한다.

N, S, R = map(int, input().split())
loss = list(map(int, input().split()))
more = list(map(int, input().split()))
cnt = 0

set_loss = [a for a in loss if a not in more]
set_more = [b for b in more if b not in loss]

for i in set_loss:

  if i - 1 in set_more:
    set_more.remove(i - 1)

  elif i + 1 in set_more:
    set_more.remove(i + 1)
  else:
    cnt += 1

print(cnt)

 

다른 코드를 어제도 그렇고 참고했었기 때문에 일주일 후에 다시 풀어보겠다.

728x90

'✍️2023 > Algorithm' 카테고리의 다른 글

[BOJ/1244] 구현 문제  (0) 2023.04.26
[BOJ/20053] 구현 기초문제  (0) 2023.04.23
[프로그래머스/그리디] - 체육복  (0) 2023.04.22
[BOJ/1212] 구현 문제  (0) 2023.04.21
구현  (1) 2023.04.21