카약과 강풍
문제
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)
다른 코드를 어제도 그렇고 참고했었기 때문에 일주일 후에 다시 풀어보겠다.
'✍️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 |