본문 바로가기
📖 Coding Test/CodeTree

[코드트리 챌린지] 1주차 - 프로그래밍 연습

by hyebin (Helia) 2023. 9. 14.

늦게 시작해서 한 주 늦게 작성하는 1주차 인증글!! 

처음 실력진단을 했을 때는 집중하지 못해서 아쉬운 점수를 받았다..😢

하지만 다시 집중해서 본 결과 697점!!

 

https://www.codetree.ai/missions/5/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

 


풀이

각 방향에 대한 x,y 좌표 변화를 미리Dictionary로 저장

입력받은 방향에 해당하는 x, y 좌표 변화에 이동 거리를 곱하여 계산

 

코드

let direction: [String: (x: Int, y: Int)] = ["N": (0,1), "E": (1,0), "S": (0,-1), "W": (-1,0)]
let n = Int(readLine()!)!
var x = 0, y = 0

for _ in 0..<n {
    let input = readLine()!.split(separator: " ").map{String($0)}
    let distance = Int(input[1])!
    
    x += (direction[input[0]]?.x ?? 0)*distance
    y += (direction[input[0]]?.y ?? 0)*distance
}

print("\(x) \(y)")

 

반응형

댓글