로봇이 데카르트 좌표평면의 원점 (0, 0)에 위치해 있다고 가정해 보겠습니다. 로봇은 N(북), S(남), W(서), E(동) 네 방향으로만 움직일 수 있으며, 실행 가능한 이동 명령이 문자열 리스트로 주어집니다. 우리가 해야 할 일은 이 이동들을 모두 수행한 뒤, 로봇이 목적지 좌표 (x, y)에 정확히 도달할 수 있는지 판별하는 것입니다.
예를 들어, 입력이 다음과 같다면:
- moves = ['N', 'N', 'E', 'E', 'S']
- 목표 좌표 (x, y) = (2, 1)
출력은 True가 됩니다.

문제 해결 접근 방식
이 문제는 시뮬레이션 기법으로 간단하게 해결할 수 있습니다. 핵심 아이디어는 로봇의 현재 좌표를 추적하는 변수를 두고, 주어진 이동 명령을 하나씩 적용하며 좌표를 갱신한 후, 마지막에 목표 좌표와 비교하는 것입니다.
구체적인 단계는 다음과 같습니다.
- 현재 좌표를 나타내는 변수
temp_coord를 [0, 0]으로 초기화합니다. - 이동 리스트의 각 명령에 대해 다음을 반복합니다:
- 명령이 "N"이면:
temp_coord[1]을 1 증가 (y축 +1) - 명령이 "S"이면:
temp_coord[1]을 1 감소 (y축 -1) - 명령이 "E"이면:
temp_coord[0]을 1 증가 (x축 +1) - 명령이 "W"이면:
temp_coord[0]을 1 감소 (x축 -1)
- 명령이 "N"이면:
- 모든 이동을 처리한 후,
temp_coord가 목표 좌표coord와 일치하면 True를, 그렇지 않으면 False를 반환합니다.
이 알고리즘의 시간 복잡도는 O(n)이며(n은 이동 횟수), 공간 복잡도는 O(1)로 매우 효율적입니다.
예제 코드
아래 구현을 통해 더 잘 이해해 보겠습니다.
class Solution: def solve(self, moves, coord): temp_coord = [0,0] for move in moves: if move == "N": temp_coord[1] += 1 elif move == "S": temp_coord[1] -= 1 elif move == "E": temp_coord[0] += 1 elif move == "W": temp_coord[0] -= 1 return temp_coord[0] == coord[0] and temp_coord[1] == coord[1] ob = Solution() moves = ['N','N','E','E','S'] coord = [2,1] print(ob.solve(moves, coord))
입력
['N','N','E','E','S'], [2,1]
출력
True
코드 동작 설명
위 예제에서 로봇의 이동 과정을 살펴보면 다음과 같습니다.
- 'N' → (0, 1)
- 'N' → (0, 2)
- 'E' → (1, 2)
- 'E' → (2, 2)
- 'S' → (2, 1)
최종 좌표 (2, 1)은 목표 좌표와 정확히 일치하므로 함수는 True를 반환합니다.
이처럼 단순한 좌표 시뮬레이션 문제는 조건 분기와 반복문만으로 깔끔하게 해결할 수 있으며, 코딩 테스트나 알고리즘 학습 초반 단계에서 자주 등장하는 유형입니다.