https://school.programmers.co.kr/learn/courses/30/lessons/340211
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
로봇들이 2D 평면 위에서 이동하며 특정 경로를 따라가는
시뮬레이션 프로그램을 작성했다.
로봇들이 각기 다른 경로를 이동하며 같은 시간에 같은 위치에 도달할 경우 충돌이 발생한다고 정의하고, 이 충돌의 횟수를 계산하는 것이 문제의 요구사항이다.
로봇들이 이동할 수 있는 좌표는 points로 주어진다.
예를 들어 points = {{0, 0}, {1, 1}, {2, 2}, {3, 3}}와 같이 주어진다면
{0, 0}, {1, 1}, {2, 2}, {3, 3}가 가능한 좌표가 된다.
각 로봇이 따라가는 경로는 routes로 주어지며, 이는 points의 인덱스를 기반으로 한다.
예를 들어 routes = {{1, 2, 3}, {1, 3, 4}}는 첫 번째 로봇이 {0, 0}에서 시작해 {1, 1}을 거쳐 {2, 2}로 이동하며, 두 번째 로봇은 {0, 0}에서 {2, 2}를 거쳐 {3, 3}으로 이동한다는 의미다.
로봇이 이동하면서 매 초마다 위치를 기록하는 것이 이 프로그램의 첫 번째 작업이다.
이를 위해 getPointPerSec 메서드가 사용된다.
이 메서드는 각 로봇의 경로를 따라가며 초 단위로 이동하는 좌표를 Point[] 배열로 만들어 반환한다. 예를 들어, 로봇이 {0, 0}에서 {2, 2}로 이동한다고 하면,
이동 과정에서 {0, 0}, {1, 1}, {2, 2}를 순서대로 배열에 저장하게 된다.
로봇들의 모든 이동 경로를 계산한 후, 충돌 여부를 판단하는 작업이 이어진다.
충돌 횟수를 계산하는 count 메서드는 매 초마다 모든 로봇의 위치를 확인한다.
각 초에 특정 위치에 몇 대의 로봇이 있는지를 기록하기 위해 HashMap을 사용하며, 충돌이 발생하면 카운트를 증가시킨다.
여기서 충돌은 두 대 이상의 로봇이 같은 초에 같은 위치에 도달했을 때 발생한다고 정의된다.
프로그램의 핵심은 각 로봇의 이동 경로를 정확히 계산하고,
이를 바탕으로 충돌 횟수를 누적하는 것이다. 최종적으로 충돌 횟수를 반환하며,
필요하면 충돌이 발생한 시간과 위치를 로그로 출력할 수도 있다.
이 프로그램은 로봇들의 이동과 충돌 상황을 시뮬레이션하는 데 적합하며,
좌표 기반 시뮬레이션 문제를 해결하는 좋은 예시가 될 수 있다.
'Algorithm & Data Structures > Programers' 카테고리의 다른 글
Lv2. 혼자 놀기의 달인 (0) | 2025.01.22 |
---|---|
Lv 4. 도둑질 (0) | 2025.01.20 |
Lv 2. 석유 시추 (0) | 2025.01.14 |
Lv 2. 두 원사이의 정수 쌍 (0) | 2025.01.11 |
Lv 2. 혼자서 하는 틱택토 (0) | 2025.01.09 |