[코드트리] 방향에 맞춰 이동 / dx, dy 테크닉(시뮬레이션)
https://www.codetree.ai/missions/5/problems/move-in-direction?&utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
방향에 맞춰 이동
(0, 0)에서 시작하여 총 N번 움직여보려고 합니다. N번에 걸쳐 움직이려는 방향과 움직일 거리가 주어졌을 때, 최종 위치를 출력하는 프로그램을 작성해보세요.
단, dx, dy 테크닉을 활용하여 문제를 해결해주세요.
입력
첫 번째 줄에 정수 N이 주어집니다.
두 번째 줄부터는 N개의 줄에 걸쳐 각 줄마다 이동방향과 이동한 거리가 공백을 사이에 두고 주어집니다. 방향은 W, S, N, E중에 하나이며 각각 서, 남, 북, 동쪽으로 이동함을 의미합니다.
- 1 ≤ N ≤ 100
- 1 ≤ 한 번에 움직이는 거리 ≤ 10
출력
첫 번째 줄에 최종 위치 x, y를 공백을 사이에 두고 출력합니다.
입출력 예제
예제1
입력:
4
N 3
E 2
S 1
E 2
출력:
4 2
내가 짠 코드
이 문제는 시뮬레이션 문제로 dx, dy 테크닉을 공부하기 위한 문제이다.
그래프가 있다고 생각하자
(0,0) 에서 서쪽으로 한칸 이동한다면 (-1, 0) 이 된다.
만약 동쪽으로 한칸 이동한다면 (1,0) 이 된다.
북쪽으로 한칸 이동한다면 (0,1) 이 된다.
남쪽으로 한칸 이동한다면 (0, -1) 이 된다.
이처럼 dx, dy = [1,0,-1,0], [0,-1,0,1] 을 넣으면
만약 0번째 원소일때는 (1, 0) 으로 동쪽으로 +1 이동한게 된다.
1번째 원소는 (0, -1)으로 남쪽으로 +1이동한게 된다.
2번째 원소는 (-1, 0) 으로 서쪽으로 +1 이동한게 된다.
3번째 원소는 (0,1)으로 북쪽으로 +1 이동한게된다.
따라서
dir_num 을 방향을 나타내는 값이라할때 (0: 동, 1:남, 2:서, 3:북)
x, y 에서 각각 dx[dir_num] , dy[dir_num] 을 더한 값이 해당 방향으로 이동한 값이 되는 것이다.
# 0 : 동쪽 // 1: 남쪽 // 2: 서쪽 // 3:북쪽
n = int(input())
x, y = 0, 0
# (1, 0): 동쪽으로 +1 // (0,-1): 남쪽으로 +1 // (-1,0) : 서쪽으로 +1 // (0,1): 북쪽으로 +1
dx, dy = [1,0,-1,0], [0,-1,0,1]
for _ in range(n):
d, s = tuple(input().split())
s = int(s)
if( d=='N'):
dir_num = 3
elif d=='S' :
dir_num = 1
elif d=='W':
dir_num = 2
elif d=='E':
dir_num = 0
for i in range(s):
nx, ny = x+dx[dir_num], y+ dy[dir_num]
x, y = nx, ny
print(x, y)