[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ณต์› ์‚ฐ์ฑ… (Python)

๋ฐ˜์‘ํ˜•

๐ŸŒฑ ๋ฌธ์ œ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐ŸŒฑ ํ’€์ด

์ด ๋ฌธ์ œ๋Š” ๋‹จ์ˆœ ๊ตฌํ˜„ ๋ฌธ์ œ๋กœ, ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์„ค๋ช…์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

  • ์šฐ์„ , S์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 
  • ์ด๋™ํ•˜๋Š” ๋ช…๋ น๋“ค(routes)์„ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ ํ•ด๋‹น ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•  ๋•Œ์—๋Š” ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉฐ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”์ง€, ์žฅ์• ๋ฌผ์ด ์žˆ์ง€ ์•Š์€์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์—, ํ•œ์นธ์”ฉ ์ด๋™ํ•˜๋Š” ์ขŒํ‘œ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜(nx, ny)๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์ค‘๊ฐ„์— break๋˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ๋ช…๋ น์„ ๋๊นŒ์ง€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ์ด ํ™•์ธ๋˜์—ˆ์œผ๋ฉด S์˜ ์œ„์น˜(cx, cy)๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋œ S์˜ ์œ„์น˜(cx, cy)๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

 

๐ŸŒฑ ์ฝ”๋“œ


  
# !usr/bin/env python
# -*- coding: utf-8 -*-
# programmers ๊ณต์› ์‚ฐ์ฑ…
def solution(park, routes):
answer = []
h = len(park)
w = len(park[0])
# E, W, S, N
dict = {"E": 0, "W": 1, "S": 2, "N": 3}
x = [0, 0, 1, -1]
y = [1, -1, 0, 0]
# S์˜ ์œ„์น˜ ์ €์žฅ
for i, row in enumerate(park):
if "S" in row:
cx, cy = i, row.index("S")
# ์ด๋™ํ•˜๊ธฐ
for route in routes:
direction, count = route.split(" ")
dx = x[dict[direction]]
dy = y[dict[direction]]
for cnt in range(1, int(count) + 1):
nx, ny = cx + dx * cnt, cy + dy * cnt
if (nx < 0 or ny < 0 or nx >= h or ny >= w): # ๋งต ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ๊ฒ€์‚ฌ
break
elif park[nx][ny] == "X": # ์žฅ์• ๋ฌผ์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
break
if cnt == int(count):
cx += dx * int(count)
cy += dy * int(count)
return [cx, cy]
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€