본문 바로가기
📖 Coding Test/CodeTree

[코드트리 챌린지] 6주차 - 그래프 탐색

by hyebin (Helia) 2023. 10. 16.

지난번 보다 떨어진 이번 실력 체크...ㅜㅜ 다음에 더 열심히 해야겠다.,...  

 

https://www.codetree.ai/cote/14/problems/move-in-direction/

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

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

예제 설명

위로 3칸, 오른쪽으로 2칸, 아래로 1칸 이동 후 오른쪽으로 다시 2칸 이동하면 최종 위치는 (4, 2)가 됩니다.

제한

시간 제한: 1000ms 메모리 제한: 80MB

풀이

W,E,N,S 순서로 dx, dy 배열을 선언한다. 각 입력을 switch 문을 사용해서 case에 맞게 x,y 좌표를 계산한다.

코드

let n = Int(readLine()!)!
let dx = [-1,1,0,0], dy = [0,0,1,-1]
var x = 0, y = 0

for _ in 0..<n {
    let input = readLine()!.split(separator: " ").map{String($0)}
    
    switch input[0] {
    case "W":
        x += dx[0]*Int(input[1])!
        y += dy[0]*Int(input[1])!
    case "E":
        x += dx[1]*Int(input[1])!
        y += dy[1]*Int(input[1])!
    case "N":
        x += dx[2]*Int(input[1])!
        y += dy[2]*Int(input[1])!
    case "S":
        x += dx[3]*Int(input[1])!
        y += dy[3]*Int(input[1])!
    default:
        break
    }
}

print("\(x) \(y)")
반응형

댓글