알고리즘 연습/구현, 문자열

[Lv.2 / 프로그래머스 / 파이썬] 충돌위험 찾기 (PCCP 기출문제 3번)

김세진 2025. 2. 11. 01:14
반응형

 

 

 

 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

입출력 예 #1
입출력 예 #2
입출력 예 #3

 

 

풀이

 

딕셔너리를 이용하여 해결 가능한 시뮬레이션 구현 문제이다.
문제 풀이 시 특별하게 필요한 알고리즘은 존재하지 않으나, 주어진 조건에 맞게 정확하게 구현해야 한다.

 

def solution(points, routes):
    # 번호별로 좌표를 map에 담음
    point_map = dict()
    for i in range(len(points)):
        point_map[i+1] = points[i]
    
    robots = []
    for route in routes:
        start_x, start_y = point_map.get(route[0])
        robots.append((start_x, start_y, route[::-1]))
    
    cnt = 0
    while robots:
        tmp_robots = []
        robots_pos = dict()
        for robot in robots:
            x, y, route = robot
            # 로봇 충돌 계산을 위해 현재 위치의 로봇 count 추가
            if (x, y) in robots_pos:
                robots_pos[(x, y)] += 1
            else:
                robots_pos[(x, y)] = 1
            
            # 현재 위치가 목표에 도달한 경우, 목표 경로 제거
            if [x, y] == point_map.get(route[-1]):
                route.pop()
            
            # 다음 경로가 남은 경우
            if route:
                to_x, to_y = point_map.get(route[-1])
                x, y = move(x, y, to_x, to_y)
                tmp_robots.append((x, y, route))
        
        # 충돌 위험 계산
        cnt += sum([1 if i >= 2 else 0 for i in robots_pos.values()])
        robots = tmp_robots
    
    return cnt
    
    
def move(x, y, to_x, to_y):
    if x > to_x:
        return (x-1, y)
    elif x < to_x:
        return (x+1, y)
    
    if y > to_y:
        return (x, y-1)
    elif y < to_y:
        return (x, y+1)
    
    return (x, y)

 

 

 

 

반응형