프로그래머스/LV2
[프로그래머스 Lv2, python] - [PCCP 기출문제] 3번 / 충돌위험 찾기
chyam_eun
2025. 5. 14. 16:02
https://school.programmers.co.kr/learn/courses/30/lessons/340211#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def change(num, start, tmp, isfirst):
for i in range(abs(num)):
if num > 0: # +이면 위로 올라가야함
start[isfirst] -= 1
else:
start[isfirst] += 1
tmp_s = start[:] # 복사해서 추가하기
tmp.append(tmp_s)
def solution(points, routes):
answer = 0
total_list = []
for route in routes:
tmp__ = []
for i in range(len(route)-1):
x, y = route[i],route[i+1]
start, end = points[x-1][:], points[y-1][:] # 원래 points 값 복사
co = [start[0] - end[0],start[1] - end[1]] # 루트간의 x, y 좌표 차이
if i == 0: # 처음엔 출발지도 포함
tmp = [[points[x-1][0],points[x-1][1]]] # 출발지
else:
tmp = []
a, b = co[0], co[1] # x, y 차이
change(a, start, tmp, 0) # 행 우선적으로 이동
change(b, start, tmp, 1)
tmp__+=tmp
total_list.append(tmp__) # 방문한 순서대로 저장됨.
total_list.sort(key=lambda x:len(x)) # 길이 짧은 순으로 정렬
t = 0 # 열
max_t = len(total_list[-1]) # 마지막 행의 길이
res = []
while t < max_t:
tmp = []
res_tmp = []
for lists in total_list:
li_len = len(lists)
if t < li_len:
if lists[t] not in tmp: # 중복 x
tmp.append(lists[t])
else:
if lists[t] not in res_tmp: # 중복 x
res_tmp.append(lists[t])
res.append(lists[t])
t += 1
if len(res) > 0 :
answer = len(res)
return answer