프로그래머스_2일차(lv2)

김현두·2023년 7월 27일
post-thumbnail

파이썬 LV2 미사일 요격 시스템 문제

https://school.programmers.co.kr/learn/courses/30/lessons/181188?language=python3

작성코드

참조(https://school.programmers.co.kr/questions/50167)

우선 이번풀이에 쓰인 lambda 라는 함수에 대하여 먼저 찾아보았다.

참고 블로그(https://wikidocs.net/64)

해당 블로그는 파이썬을 처음 접하는 사람들을 위해 쉽게 풀어쓴 기초 문법과 실습이 나와 있는데 생각 보다 정리가 깔끔해서 놀랐던 것으로 기억한다.

이상 람다 함수에 대한 설명을 마치고 이번 프로그래머스에서 사용한 코드를 다시 리뷰해 보겠다.

이번 코드에서 쓰인 lambda함수의 기능중 하나인 map()은

리스트(배열)으로부터 원소를 하나씩 꺼내 사용자가 입력한 조건으로 재배열 한뒤 새로운 배열으로 담아주는 기능을 한다.

def solution(targets):
	 #targets배열은 2중배열으로 ([[2,4],[3,5]])이렇게 입력 되어있는데 targets의 원소를 0번째를 출력하면 [2,4] 1번째는 [3,5]로 출력이 될것이다.
     #우리는 미사일 요격에 사용되는 최소 미사일을 구하기 위해 [미사일 시작포인트, 미사일 종료 포인트]로 구성된 배열의 미사일 종료 포인트를 
     #오름차순으로 정렬하여 최소한으로 발사 할 수있는 미사일의 개수를 구할 것이다. 각 코드 라인별로 해석하면
	 #targets배열을.sort정렬으로(key= lambda  targets의 원소를 변경 : 기존배열의 원소의 1번쨰만)  
     #[1,4] 라는 배열이 원소로 주어지면 4에 해당하는 1첫번째만 sort로 변경한다는의미 
     # 예를 들어 [1,4] ,[3,5], [2,3] 을 원소로 가지는 배열을 lambda로 배열하면 
     # [1,4],[2,3],[3,5]순서대로 정렬될것이다.     
    targets.sort(key = lambda x: x[1])  
    

    shoot = -1                 #미사일 작용 범위 지정 _ 미사일의 최소 시작범위가 0이기때문에 -1로초기화
    cnt = 0                    #미사일 발사 필요 개수저장을 위한 변수 
    for target in targets:    #lambda로 정렬된 배열의 원소를 반복문으로 돌린다.
        if target[0] > shoot : #배열의 0번째 원소가 이전 미사일 종료 범위를 초과하는지 조건문으로 지정
            cnt += 1           #조건문을 만족하면 미사일 개수 +1
            shoot = target[1]-0.5 # 미사일 요격범위를 미사일 작용범위지점 -0.5  미사일 시작과 종료 포인트가 정수형으로 되어있기 때문에 중복으로 요격하기 위해 -0.5를 해줘야됩니다.

    return cnt                  #미사일 사용 개수 출력
profile
슈뢰딩거의 체셔

0개의 댓글