반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
딕셔너리를 이용하여 해결 가능한 시뮬레이션 구현 문제이다.
문제 풀이 시 특별하게 필요한 알고리즘은 존재하지 않으나, 주어진 조건에 맞게 정확하게 구현해야 한다.
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)
반응형
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[Lv.1 / 프로그래머스 / 파이썬] 택배 상자 꺼내기 (2025 프로그래머스 코드챌린지 2차 예선) (0) | 2025.02.17 |
---|---|
[Lv.1 / 프로그래머스 / 파이썬] 데이터 분석 (PCCE 기출문제 10번) (1) | 2025.01.30 |
[Lv.1 / 프로그래머스 / 파이썬] 동영상 재생기 (PCCP 기출문제 1번) (1) | 2024.12.18 |
[Lv.1 / 프로그래머스 / 파이썬] 카드 뭉치 (0) | 2024.08.30 |
[Lv.1 / 프로그래머스 / 파이썬] 둘만의 암호 (0) | 2024.07.09 |