일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코테
- javascript
- simulation
- DFS
- 1012
- Vue.js
- floyd washall
- 백준
- algorithm
- programming
- 출처:장기효vue.js
- Python
- greedy
- implementaion
- Today
- Total
DevDave
[Algorithm]백준15889<python>(sil3)Greedy 본문
호 안에 수류탄이야!! 성공
2 초 | 512 MB | 1449 | 401 | 300 | 28.143% |
문제
“호 안에 수류탄!!”
대한건아 욱제는 수류탄 투척 훈련을 받고 있다. 욱제를 필두로, 훈련장에는 욱제를 포함한 N명의 전우들이 일렬(1열 횡대 ㅎ)로 서있다. 군대에 끌려온 사실에 심술이 난 욱제는 수류탄의 안전핀을 뽑아 전우에게 던졌다. 마찬가지로 심술이 난 전우들도 욱제가 던진 수류탄을 받아 전우들에게 던지기 시작했다.
이제 수류탄은 뜨거운 감자처럼 욱제와 전우들 사이를 옮겨 다닌다. 전우들은 팔 힘이 모두 다르기 때문에 수류탄을 던질 수 있는 사거리도 모두 다르다. 욱제와 전우들이 가지고 노는 훈련용 수류탄은 바닥에 떨어지기 전에는 절대 터지지 않는 특수한 수류탄이다.
욱제와 전우들은 특급 전사이기 때문에 사거리 내에 있는 누구에게나 정확히 수류탄을 던질 수 있고, 마찬가지로 정확히 날아오는 수류탄은 항상 받을 수 있다. 한 위치에 여러명의 전우가 서있다면 그 중 아무나 받아 다음 전우에게 던질 수 있다.
누군가의 팔 힘이 모자라 수류탄이 다음 전우에게 전달되지 못하고 바닥에 떨어지는 경우도 있을 수 있다. 이때는 수류탄에서 폭죽이 터지며 불꽃놀이가 시작되고, 동시에 욱제와 전우들의 영창 생활도 시작된다.
???: “중대장은 오늘 너희에게 큰 실망을 했다”
이 게임을 중대장님이 모르게 끝마치려면 마지막 전우(왼쪽에서부터 N번째 전우)가 수류탄을 받아 조용히 행사용 폭죽 더미에 섞어놓아야 한다. 욱제와 전우들은 항상 최선을 다해 최적의 방법으로 게임을 조용히 끝마칠 수 있도록 노력한다. 과연 영창을 건 이 게임의 끝은 어디일까?
입력
첫째 줄에 욱제를 포함한 전우들의 인원 수 N이 주어진다. (1 ≤ N ≤ 30,000)
둘째 줄에 욱제를 포함한 N명 전우들의 좌표가 주어진다. 이는 수직선 위의 음이 아닌 정수로 표현되어 주어지며 욱제의 좌표는 항상 0이다. (0 ≤ 좌표 ≤ 1,000,000)
N이 1보다 크다면, 셋째 줄에 욱제를 포함하고 마지막 전우를 제외한 N-1명 전우들의 사거리가 욱제부터 순서대로 주어진다. N이 1이면 셋째 줄이 주어지지 않는다. (0 ≤ 사거리 ≤ 1,000,000)
출력
게임이 조용히 마무리 될 수 있으면 “권병장님, 중대장님이 찾으십니다”를, 그렇지 않으면 “엄마 나 전역 늦어질 것 같아”을 출력한다.
예제 입력 1 복사
5
0 5 10 15 100
10 5 6 100
예제 출력 1 복사
권병장님, 중대장님이 찾으십니다
예제 입력 2 복사
5
0 5 10 15 100
10 5 6 0
예제 출력 2 복사
엄마 나 전역 늦어질 것 같아
<Code>
import sys
input = sys.stdin.readline
n = int(input())
arr1 = list(map(int,input().split()))
arr2 = list(map(int,input().split()))
#print(arr1)
#print(arr2)
max = 0 # 최대 날아 갈수 있는 길이
if n == 1:
print("권병장님, 중대장님이 찾으십니다.")
for i in range(len(arr2)):
if max <= arr1[i] + arr2[i]:
max = arr1[i] + arr2[i]
if max < arr1[i+1]:
print("엄마 나 전역 늦어질 것 같아")
exit()
print("권병장님, 중대장님이 찾으십니다")
<Insight>
- 처음에 자신의 바로 오른편 사람과 왼편 사람 한테만 수류탄을 넘길 수 있다고 생각해 헤메었다.
- 문제는 대원들은 최적인 방법으로 수류탄을 던질것이란게 전제로 깔려 있고 이렇게 했는데도 실패하면 오류를 출력한다.
- 관건은 처음대원부터 n-1 번째 대원까지 for문을 돌며 현재 인원의 던질 수 있는 거리가 최대 거리보다 크면 갱신해 주는 것이고, 갱신된 최대거리가 다음 대원까지 미치지 못하면 오류를 출력한다.
- n==1일때를 처리해주어야 한다.
'Algorithm' 카테고리의 다른 글
[Algorithm]백준1024<python>(sil2)Math (0) | 2022.06.23 |
---|---|
[Algorithm]백준1012<python>(sil2)DFS (0) | 2022.06.23 |
[Algorithm]백준1448<python>(sil3)DP (0) | 2022.06.21 |
[Algorithm]백준1463<python>(sil3)DP (0) | 2022.06.21 |
[Algorithm]백준1063<python>(sil3)simulation (0) | 2022.06.17 |