티스토리 뷰

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181188

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

A 나라가 B 나라를 침공하였습니다. B 나라의 대부분의 전략 자원은 아이기스 군사 기지에 집중되어 있기 때문에 A 나라는 B 나라의 아이기스 군사 기지에 융단폭격을 가했습니다.
A 나라의 공격에 대항하여 아이기스 군사 기지에서는 무수히 쏟아지는 폭격 미사일들을 요격하려고 합니다. 이곳에는 백발백중을 자랑하는 요격 시스템이 있지만 운용 비용이 상당하기 때문에 미사일을 최소로 사용해서 모든 폭격 미사일을 요격하려 합니다.
A 나라와 B 나라가 싸우고 있는 이 세계는 2 차원 공간으로 이루어져 있습니다. A 나라가 발사한 폭격 미사일은 x 축에 평행한 직선 형태의 모양이며 개구간을 나타내는 정수 쌍 (s, e) 형태로 표현됩니다. B 나라는 특정 x 좌표에서 y 축에 수평이 되도록 미사일을 발사하며, 발사된 미사일은 해당 x 좌표에 걸쳐있는 모든 폭격 미사일을 관통하여 한 번에 요격할 수 있습니다. 단, 개구간 (s, e)로 표현되는 폭격 미사일은 s와 e에서 발사하는 요격 미사일로는 요격할 수 없습니다. 요격 미사일은 실수인 x 좌표에서도 발사할 수 있습니다.
각 폭격 미사일의 x 좌표 범위 목록 targets이 매개변수로 주어질 때, 모든 폭격 미사일을 요격하기 위해 필요한 요격 미사일 수의 최솟값을 return 하도록 solution 함수를 완성해 주세요.

내 답안

def solution(targets):
    targets = sorted(targets, key = lambda x : x[1]) # e 기준 오름차순 정렬

    limit = -1
    cnt = 0
    for target in targets :
        if target[0] > limit :
            limit = target[1] - 0.1
            cnt += 1

    return cnt

해설

그래프 탐색 문제만 주궁장창 풀다가 갑자기 다른 유형의 문제를 풀려고 하니까 초반에 살짝 막혔다.

어떻게 풀 지 감만 잡으면 코드 자체는 하나도 어렵지 않다.

 

이 문제에서 중요한 포인트는 범위가 개구간(양 끝점 포함 X)이라는 건데, 이 부분은 한 미사일당 요격 가능한 영역을 기준치 - 0.1 해줌으로써 해결하였다.

 

해결 방법은 간단하다

 

1. e 기준으로 오름차순 정렬

2. 리스트를 순회하면서 아래 기능 수행

2.1. s값이 요격 가능한 최대 영역(limit)보다 작으면 pass(미사일로 사격 가능함)
2.2. s값이 limit 크면 limit 값을 e-0.1으로 재설정하고 cnt + 1

피드백

파이썬 정렬(sorted(리스트), 리스트.sort())

리스트를 정렬할 때 기준을 명시하는 방법 :  key = lambda x : 기준

 

일반적으로 lambda x에서 x순회할 리스트의 각 원소를 의미하며 : 기준에는 정렬 기준이 되는 값을 명시한다.

 

예시 1 : 각 리스트의 원소 기준으로 오름차순 정렬하기(문자열의 경우 사전순 정렬)

sorted([2,5,1,3], key = lambda x : x) # [1, 2, 3, 5]

내림차순 정렬기준-을 붙여주면 된다. (ex. key = lambda x : -x)

 

예시 2 : 각 리스트의 첫 번째 원소 기준으로 오름차순 + 첫 번째 원소가 같다면 두 번째 원소 기준으로 정렬

sorted([[1,4],[1,2],[5,6],[3,5]], key = lambda x : (x[0], x[1])) # [[1, 2], [1, 4], [3, 5], [5, 6]]
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함