문제
A나라와 B나라가 싸우고 있는데 A나라에서 발사한 미사일은 x축에 평평한 직선형태의 모양입니다.
정수쌍 [s,e]의 형태로 표현됩니다.
B 나라는 특정 x 좌표에서 y 축에 수평이 되도록 미사일을 발사하며, 발사된 미사일은 해당 x 좌표에 걸쳐있는 모든 폭격 미사일을 관통하여 한 번에 요격할 수 있습니다.
A나라에서 발사한 미사일이 targets라는 변수로 주어질때 B나라에서 A나라의 미사일을 요격하기 필요한 미사일의 수의 최솟값을 return하세요
문제 풀러 가기
풀이
- A나라에서 발사한 미사일을 처음 발사한 s로 정렬한다.
- 정렬 후 end_value에 미사일의 마지막 좌표인 e를 저장한다.
- 이 때 정렬한 미사일 좌표를 돌면서 end_value에 저장한 값이 새로운 미사일의 시작좌표보다 크면 end_value를 기존 end_value와 새로운 미사일의 끝좌표를 비교하여 작은 값을 넣어준다
- 만약 end_value에 저장한 값이 새로운 미사일의 시작좌표보다 작으면 cnt를 추가해주고 end_value를 새로운 미사일의 끝좌표로 바꿔준다
코드
def solution(targets):
# targets값 정렬
sorted_target = sorted(targets)
end_value = 0
cnt = 0
for target in sorted_target:
# 처음 시작
if end_value == 0:
# 끝 범위 추가
end_value = target[1]
cnt += 1
continue
# end_value가 새로운 미사일의 끝좌표보다 클 경우 end_value값을 새로운 미사일의 끝좌표와 비교해 더 작은 값을 넣어준다.
if end_value > target[0]:
end_value = min(end_value, target[1])
continue
# end_value값을 새로운 미사일의 끝좌표로 교체해주고 미사일 값을 늘려준다
else:
end_value = target[1]
cnt += 1
return cnt