프로그래머스/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