코드트리 챌린지

[코드트리] 방향에 맞춰 이동 / dx, dy 테크닉(시뮬레이션)

우당탕탕코딩일기 2023. 10. 3. 23:37

 

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)

 

 

 

728x90