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
메모
시작과 끝만 있는 줄 알았다. 문제와 예시를 잘 읽어보자.