Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 로봇이 목표 좌표에 도달할 수 있는지 확인하는 방법

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

예를 들어, 입력이 다음과 같다면:

  • moves = ['N', 'N', 'E', 'E', 'S']
  • 목표 좌표 (x, y) = (2, 1)

출력은 True가 됩니다.

파이썬으로 로봇이 목표 좌표에 도달할 수 있는지 확인하는 방법

문제 해결 접근 방식

이 문제는 시뮬레이션 기법으로 간단하게 해결할 수 있습니다. 핵심 아이디어는 로봇의 현재 좌표를 추적하는 변수를 두고, 주어진 이동 명령을 하나씩 적용하며 좌표를 갱신한 후, 마지막에 목표 좌표와 비교하는 것입니다.

구체적인 단계는 다음과 같습니다.

  1. 현재 좌표를 나타내는 변수 temp_coord를 [0, 0]으로 초기화합니다.
  2. 이동 리스트의 각 명령에 대해 다음을 반복합니다:
    • 명령이 "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)
  3. 모든 이동을 처리한 후, 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를 반환합니다.

이처럼 단순한 좌표 시뮬레이션 문제는 조건 분기와 반복문만으로 깔끔하게 해결할 수 있으며, 코딩 테스트나 알고리즘 학습 초반 단계에서 자주 등장하는 유형입니다.