PROGRAMMERS

[프로그래머스/파이썬] 충돌위험 감지

kode-daks 2025. 2. 10. 16:48

내 풀이

def solution(points, routes):
    answer = 0
    # 최대 100*100으로 초기화하여 시간:횟수를 각 위치에 저장하여
    # 횟수가 2 이상이면 로봇이 2기 이상 같은 시간에 존재했다는 뜻으로 충돌 카운트+=1
    maps = [[{} for _ in range(101)] for _ in range(101)]
    
    for route in routes:
        count = 0
        
        for i in range(len(route)-1):
            start, end = points[route[i]-1], points[route[i+1]-1] # 시작과 끝 설정
            current = start.copy() # 현재 위치
            
            if i == 0: # 처음에만 추가.
                if count not in maps[current[0]][current[1]]:
                    maps[current[0]][current[1]][count] = 1
                else:
                    maps[current[0]][current[1]][count] += 1
                    
            while current != end:
                if current[0] != end[0]: # r 좌표 같을 때까지 움직이기
                    if current[0] < end[0]:
                        current[0] += 1
                    else:
                        current[0] -= 1
                    count += 1
                    if count not in maps[current[0]][current[1]]:
                        maps[current[0]][current[1]][count] = 1
                    else:
                        maps[current[0]][current[1]][count] += 1
                elif current[1] != end[1]: # 그 다음 c 좌표 같을 때까지 움직이기
                    if current[1] < end[1]:
                        current[1] += 1
                    else:
                        current[1] -= 1
                    count += 1
                    if count not in maps[current[0]][current[1]]:
                        maps[current[0]][current[1]][count] = 1
                    else:
                        maps[current[0]][current[1]][count] += 1
                        
    # 전체에서 같은 시간에 존재하는 로봇 대수가 2개 이상일 경우 카운트+=1                    
    for i in range(101):
        for j in range(101):
            for k,v in maps[j][i].items():
                if v >= 2:
                    answer += 1
                
    return answer

 

메모

시작과 끝만 있는 줄 알았다. 문제와 예시를 잘 읽어보자.