๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.0] ์บ๋ฆญํ„ฐ์˜ ์ขŒํ‘œ

by hyebin (Helia) 2023. 1. 2.
๋ฐ˜์‘ํ˜•

์บ๋ฆญํ„ฐ์˜ ์ขŒํ‘œ

๋ฌธ์ œ ์„ค๋ช…

๋จธ์“ฑ์ด๋Š” RPG๊ฒŒ์ž„์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„์—๋Š” up, down, left, right ๋ฐฉํ–ฅํ‚ค๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ฐ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [0,0]์—์„œ up์„ ๋ˆ„๋ฅธ๋‹ค๋ฉด ์บ๋ฆญํ„ฐ์˜ ์ขŒํ‘œ๋Š” [0, 1], down์„ ๋ˆ„๋ฅธ๋‹ค๋ฉด [0, -1], left๋ฅผ ๋ˆ„๋ฅธ๋‹ค๋ฉด [-1, 0], right๋ฅผ ๋ˆ„๋ฅธ๋‹ค๋ฉด [1, 0]์ž…๋‹ˆ๋‹ค. ๋จธ์“ฑ์ด๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐฉํ–ฅํ‚ค์˜ ๋ฐฐ์—ด keyinput์™€ ๋งต์˜ ํฌ๊ธฐ board์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ๋Š” ํ•ญ์ƒ [0,0]์—์„œ ์‹œ์ž‘ํ•  ๋•Œ ํ‚ค ์ž…๋ ฅ์ด ๋ชจ๋‘ ๋๋‚œ ๋’ค์— ์บ๋ฆญํ„ฐ์˜ ์ขŒํ‘œ [x, y]๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

  • [0, 0]์€ board์˜ ์ • ์ค‘์•™์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด board์˜ ๊ฐ€๋กœ ํฌ๊ธฐ๊ฐ€ 9๋ผ๋ฉด ์บ๋ฆญํ„ฐ๋Š” ์™ผ์ชฝ์œผ๋กœ ์ตœ๋Œ€ [-4, 0]๊นŒ์ง€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ตœ๋Œ€ [4, 0]๊นŒ์ง€ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ

  • board์€ [๊ฐ€๋กœ ํฌ๊ธฐ, ์„ธ๋กœ ํฌ๊ธฐ] ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • board์˜ ๊ฐ€๋กœ ํฌ๊ธฐ์™€ ์„ธ๋กœ ํฌ๊ธฐ๋Š” ํ™€์ˆ˜์ž…๋‹ˆ๋‹ค.
  • board์˜ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฐฉํ–ฅํ‚ค ์ž…๋ ฅ์€ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
  • 0 ≤ keyinput์˜ ๊ธธ์ด ≤ 50
  • 1 ≤ board[0] ≤ 99
  • 1 ≤ board[1] ≤ 99
  • keyinput์€ ํ•ญ์ƒ up, down, left, right๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

keyinput board result
["left", "right", "up", "right", "right"] [11, 11] [2, 1]
["down", "down", "down", "down", "down"] [7, 9] [0, -4]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • [0, 0]์—์„œ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์œ„๋กœ ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‘ ์นธ ์ด๋™ํ•œ ์ขŒํ‘œ๋Š” [2, 1]์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • [0, 0]์—์„œ ์•„๋ž˜๋กœ ๋‹ค์„ฏ ์นธ ์ด๋™ํ•œ ์ขŒํ‘œ๋Š” [0, -5]์ด์ง€๋งŒ ๋งต์˜ ์„ธ๋กœ ํฌ๊ธฐ๊ฐ€ 9์ด๋ฏ€๋กœ ์•„๋ž˜๋กœ๋Š” ๋„ค ์นธ์„ ๋„˜์–ด์„œ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [0, -4]๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ œ์ถœ

import Foundation

func solution(_ keyinput:[String], _ board:[Int]) -> [Int] {
    let dx = [0,0,-1,1]
    let dy = [1,-1,0,0]
    var x = 0, y = 0, nx = 0, ny = 0
    
    for key in keyinput{
        nx = x
        ny = y
        switch key{
            case "up":
                nx += dx[0]
                ny += dy[0]
            case "down":
                nx += dx[1]
                ny += dy[1]
            case "left":
                nx += dx[2]
                ny += dy[2]
            case "right":
                nx += dx[3]
                ny += dy[3]
            default:
                break
        }
        if nx >= -(board[0]/2) && nx <= board[0]/2 && ny >= -(board[1]/2) && ny <= board[1]/2{
            x = nx
            y = ny
        }
    }
    
    return [x, y]
}
keyinput์„ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜์—ฌ ํ‚ค์˜ ๋ฐฉํ–ฅ๋Œ€๋กœ ์ขŒํ‘œ๋ฅผ ์ด๋™ํ•œ๋‹ค.
์ด๋™ํ•œ ์ขŒํ‘œ๊ฐ€ board ๋‚ด์— ์œ„์น˜ํ•˜๋ฉด ํ˜„์žฌ ์ขŒํ‘œ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
๋ฐ˜์‘ํ˜•