백준 문제 링크: https://www.acmicpc.net/problem/15889
문제 요약
수류탄을 마지막 사람까지 무사히 전달해야
각자 팔힘에 따라 사거리가 다름. 사거리 내의 누구에게나 수류탄 전달 가능.
사거리가 짧아 다음 전우에게 전달되지 못하면 영창 생활 시작
게임이 무사히 마무리될 수 있을지 구하기
핵심 아이디어
다음 사람까지의 거리보다 사거리가 짧으면 실패한다고 보면 된다.
"사거리 내의 누구에게나" 전달 가능하기 때문에 바로 다음 사람한테 전달하지 않아도 되고, 건너뛸 수도 있다.
현재 사람의 좌표에 사거리를 더한 거리가 다음 사람의 좌표보다 작으면 실패한다고 보면 된다.
풀이
# silver4-15889. 호 안에 수류탄이야!!
import sys
input = sys.stdin.readline
n = int(input())
location = list(map(int, input().split())) # 좌표
# n이 1보다 크다면 다음줄 입력 주어짐. 1이면 안 주어짐
if n == 1:
print("권병장님, 중대장님이 찾으십니다")
exit()
else:
# 두 사람의 거리보다 사거리가 크면 성공, 작으면 실패
# location[i+1] - location[i] > distance[i] ====> 실패
# 근데 중간에 건너뛰는 경우도 있음.
# 현재좌표 + 사거리가 다음사람 좌표보다 작으면 실패
# location[i] + distance[i] < location[i+1] ====> 실패
distance = list(map(int, input().split())) #사거리
max_distance = 0
for i in range(n-1):
max_distance = max(max_distance, location[i] + distance[i])
if max_distance >= location[i+1]:
continue
else:
print("엄마 나 전역 늦어질 것 같아")
exit()
print("권병장님, 중대장님이 찾으십니다")
Trouble Shooting
건너뛸 수 있다는 생각을 못하고 무조건 바로 다음 사람한테 넘기는 것으로 이해해서 두 사람의 거리와 사거리만 비교해서 틀렸었다.
실행 시간
메모리 36008KB, 시간 68ms (python3)
'ALGORITHM > 백준' 카테고리의 다른 글
[BOJ/PYTHON] 9012. 괄호 (0) | 2023.06.01 |
---|---|
[BOJ/PYTHON] 1026. 보물 (1) | 2023.05.25 |
[BOJ/PYTHON] 9009. 피보나치 (0) | 2023.05.25 |
[BOJ/PYTHON] 2437. 저울 (0) | 2023.05.25 |
[BOJ/PYTHON] 2003. 수들의 합 2 (0) | 2023.05.25 |
댓글