문제
https://programmers.co.kr/learn/courses/30/lessons/42884
풀이
들어온 지점으로 정렬
나간 지점으로 정렬
나간 지점을 기준으로 반복문:
나간 지점 전에 들어온 지점들 방문처리
count += 1
들어온 지점 모두 방문했으면 반복문 탈출
근데 뭔가 짜다보니까 visited 안만들어도 되겠다는 생각이 들어서 그냥 해봤다.
def solution(routes):
answer = 0
start = []
end = []
for r in routes:
start.append(r[0])
end.append(r[1])
start.sort()
end.sort()
sIdx = 0
for e in end:
if e >= start[sIdx]:
answer += 1
while(e >= start[sIdx]):
sIdx += 1
if sIdx >= len(routes):
return answer
return answer
근데 망함
그래서 나온 두번째 방법
끝나는 지점으로 정렬
끝나는지점을 기준으로 반복문
해당 지점 이전에 시작된 차량은 routes에서 삭제
카메라 += 1
route 비었으면 탈출
근데 반복문 돌면서 삭제하니까 인덱스 문제가 생길 것 같아 삭제 대신 visited를 만들었다
def solution(routes):
answer = 0
visited = [False for _ in range(len(routes))]
routes = sorted(routes, key = lambda x : x[1])
for i in range(len(routes)):
flag = False
if visited[i]:
continue
for j in range(len(routes)):
if routes[i][1] >= routes[j][0] and not visited[j]:
visited[j] = True
flag = True
if flag:
answer += 1
return answer
뭔가 풀이가 엄청 맘에 안든다
통과하면서도 이게 아닌데,,? 싶었다 ㅠ
다른 사람의 코드
def solution(routes):
routes = sorted(routes, key=lambda x: x[1])
last_camera = -30000
answer = 0
for route in routes:
if last_camera < route[0]: #지난 카메라가 이번 루트를 포함하지 않으면
answer += 1
last_camera = route[1] #마지막 카메라 위치 업뎃
return answer
나가는 지점으로 정렬했으므로
각 나가는 지점에서 있을 수 있는 경우의 수는 두 가지
1. 지난 카메라 이전 또는 동시에 시작함 -> 무시
2. 지난 카메라 이후에 시작함 -> 확인되지 않았으므로 새 카메라 설치
한 것 같다.
O(n)에 추가적인 공간도 안썼다.
뭔가 예외가 많을 것 같아서 오래 생각했었는데 상황을 단순하게 생각하는 기술?이 부족한 것 같다..
'알고리즘 스터디' 카테고리의 다른 글
[프로그래머스] 이분탐색 2. 징검다리 (0) | 2021.08.26 |
---|---|
[프로그래머스] DFS/BFS 4. 여행경로 (0) | 2021.08.20 |
[프로그래머스] 힙 3. 이중우선순위큐 (2) | 2021.07.30 |
[프로그래머스] 깊이/너비 우선 탐색 3. 단어 변환 (0) | 2021.07.25 |
[프로그래머스] 동적계획법 3. 등굣길 (0) | 2021.07.16 |