문제: 76. 단속 카메라
- testcase에 나와있는 -20,15는 -20,-15로 추정된다
-
def solution(routes):
routes.sort()
answer = 0
check = [0] * len(routes)
for i in range(len(routes)-1, -1, -1):
if check[i] == 0:
camera = routes[i][0]
answer += 1
for j in range(i-1, -1, -1):
if check[j] == 0 and routes[j][1] >= camera >= routes[j][0]:
check[j] = 1
return answer
print(solution([[-20, 15], [-14, -5], [-18, -13], [-5, -3]] ))
다른 사람 풀이
def solution(routes):
routes = sorted(routes, key=lambda x: x[1])
last_camera = -30000
answer = 0
print(routes)
for route in routes:
print("route:", route)
if last_camera < route[0]:
answer += 1
last_camera = route[1]
return answer
print(solution([[-20, -15], [-14, -5], [-18, -13], [-5, -3]]))
- 위 코드는 for문을 한번만 돌면 된다.
- 이전의 문제들과 접근 방법은 비슷하다.
- 정렬을 x[1]을 기준으로 한다. 순차적으로 계산이 가능해진다.
- for문에서 리스트를 꺼내면서 마치 최소값을 구하듯, route[0]보다 작을 때만, answer+=1 해준뒤, last_camera에 route[1]을 기억. 이를 반복해주면 된다.
- 거꾸로 풀 필요도 없고, for문을 2번 쓸 필요도 없는 깔끔한 코드다.
참고자료 [프로그래머스]https://programmers.co.kr/learn/challenges [codeDrive님참고블로그]https://codedrive.tistory.com/163