Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

DevDave

[Algorithm]백준15889<python>(sil3)Greedy 본문

Algorithm

[Algorithm]백준15889<python>(sil3)Greedy

Dave Song 2022. 6. 22. 16:15

호 안에 수류탄이야!! 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
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일때를 처리해주어야 한다.