# ๊ณต์์ฐ์ฑ # 172928 # lv1 # Python
# ๋ฌธ์
์ง๋๋ค๋๋ ๊ธธ์ 'O', ์ฅ์ ๋ฌผ์ 'X'๋ก ๋ํ๋ธ ์ง์ฌ๊ฐํ ๊ฒฉ์ ๋ชจ์์ ๊ณต์์์ ๋ก๋ด ๊ฐ์์ง๊ฐ ์ฐ์ฑ
์ ํ๋ คํฉ๋๋ค. ์ฐ์ฑ
์ ๋ก๋ด ๊ฐ์์ง์ ๋ฏธ๋ฆฌ ์
๋ ฅ๋ ๋ช
๋ น์ ๋ฐ๋ผ ์งํํ๋ฉฐ, ๋ช
๋ น์ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ฃผ์ด์ง๋๋ค.
["๋ฐฉํฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํฅ ๊ฑฐ๋ฆฌ" … ]
์๋ฅผ ๋ค์ด "E 5"๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ํ์ฌ ์์น์์ ๋์ชฝ์ผ๋ก 5์นธ ์ด๋ํ๋ค๋ ์๋ฏธ์
๋๋ค. ๋ก๋ด ๊ฐ์์ง๋ ๋ช
๋ น์ ์ํํ๊ธฐ ์ ์ ๋ค์ ๋ ๊ฐ์ง๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค.
1. ์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ๋ ๊ณต์์ ๋ฒ์ด๋๋์ง ํ์ธํฉ๋๋ค.
2. ์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ ์ค ์ฅ์ ๋ฌผ์ ๋ง๋๋์ง ํ์ธํฉ๋๋ค.
์ ๋ ๊ฐ์ง์ค ์ด๋ ํ๋๋ผ๋ ํด๋น๋๋ค๋ฉด, ๋ก๋ด ๊ฐ์์ง๋ ํด๋น ๋ช
๋ น์ ๋ฌด์ํ๊ณ ๋ค์ ๋ช
๋ น์ ์ํํฉ๋๋ค.
๊ณต์์ ๊ฐ๋ก ๊ธธ์ด๊ฐ W, ์ธ๋ก ๊ธธ์ด๊ฐ H๋ผ๊ณ ํ ๋, ๊ณต์์ ์ข์ธก ์๋จ์ ์ขํ๋ (0, 0), ์ฐ์ธก ํ๋จ์ ์ขํ๋ (H - 1, W - 1) ์
๋๋ค.
๊ณต์์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด park, ๋ก๋ด ๊ฐ์์ง๊ฐ ์ํํ ๋ช ๋ น์ด ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด routes๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ก๋ด ๊ฐ์์ง๊ฐ ๋ชจ๋ ๋ช ๋ น์ ์ํ ํ ๋์ธ ์์น๋ฅผ [์ธ๋ก ๋ฐฉํฅ ์ขํ, ๊ฐ๋ก ๋ฐฉํฅ ์ขํ] ์์ผ๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
# ์ ํ์ฌํญ
- 3 ≤ park์ ๊ธธ์ด ≤ 50
- 3 ≤ park[i]์ ๊ธธ์ด ≤ 50
- park[i]๋ ๋ค์ ๋ฌธ์๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ์์์ง์ ์ ํ๋๋ง ์ฃผ์ด์ง๋๋ค.
- S : ์์ ์ง์
- O : ์ด๋ ๊ฐ๋ฅํ ํต๋ก
- X : ์ฅ์ ๋ฌผ
- park๋ ์ง์ฌ๊ฐํ ๋ชจ์์ ๋๋ค.
- 3 ≤ park[i]์ ๊ธธ์ด ≤ 50
- 1 ≤ routes์ ๊ธธ์ด ≤ 50
- routes์ ๊ฐ ์์๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ์ํํ ๋ช ๋ น์ด๋ฅผ ๋ํ๋ ๋๋ค.
- ๋ก๋ด ๊ฐ์์ง๋ routes์ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ์์๋๋ก ๋ช ๋ น์ ์ํํฉ๋๋ค.
- routes์ ์์๋ "op n"๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, op๋ ์ด๋ํ ๋ฐฉํฅ, n์ ์ด๋ํ ์นธ์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- op๋ ๋ค์ ๋ค ๊ฐ์ง์ค ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- N : ๋ถ์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- S : ๋จ์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- W : ์์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- E : ๋์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- 1 ≤ n ≤ 9
# ํ์ด
def solution(park, routes):
# <์์ด๋์ด>
# 1. 'S' : ์์์ ์ฐพ๊ธฐ
# 2. ์ฐพ์ ์์์ ์ผ๋ก๋ถํฐ ์ด๋ํ๋ ๋ฐฉํฅ, ํ์๋ฅผ ํ์
# 3. ๋, ์, ๋จ, ๋ถ์ ๋ฐ๋ผ x, y ์ขํ๊ฐ์ ๋ค๋ฅด๊ฒ ๊ณ์ฐํ์ฌ ํ ๋น.
# > ๋ง์ฝ 'X': ์ฅ์ ๋ฌผ์ด ์์ผ๋ฉด ํด๋น ๋ช
๋ น์ ๊ฑด๋๋.
# > ๋ง์ฝ ์ต์ข
์์ง์ธ ํ์๊ฐ ๊ณต์์ ๋์ด(x, y)๋ณด๋ค ์ปค์ง๋ฉด ํด๋น ๋ช
๋ น ๊ฑด๋๋
park_y = len(park) # y ์ขํ๊ฐ
park_x = len(park[0]) # x ์ขํ๊ฐ
# ์์์ ์ฐพ๊ธฐ
for i in range(len(park)):
for j in range(len(park[i])):
if park[i][j] == 'S':
y, x = i, j
# ์ด๋๋ฐฉํฅ์ ๋ฐ๋ฅธ ์ขํ์ด๋ ๊ฐ
move_y = {'E': 0, 'W': 0, 'S': 1, 'N': -1}
move_x = {'E': 1, 'W': -1, 'S': 0, 'N': 0}
for route in routes:
d, n = route.split(" ") # ์ด๋๋ฐฉํฅ, ์ด๋ํ์
n = int(n)
# ์๋ก ์ด๋ํ๊ณ ๋ ๋ค์ ์ขํ๊ฐ
new_move_y = y + move_y[d] * n
new_move_x = x + move_x[d] * n
# ๋ง์ฝ ์๋ก ์ด๋ํ ์ขํ๊ฐ '0๋ณด๋ค ์๊ฑฐ๋', 'park์ ํฌ๊ธฐ ์ด์'์ด๋ผ๋ฉด ์๋ ๋ช
๋ น ๊ฑด๋๋.
if new_move_y < 0 or new_move_x < 0 or new_move_y >= park_y or new_move_x >= park_x:
continue
# n๋ฒ ๋งํผ x, y ์ขํ๊ฐ์ ์ด๋.
for i in range(1, n + 1):
new_move_y = y + move_y[d] * i
new_move_x = x + move_x[d] * i
# ๋ง์ฝ ์๋ก ์์ง์ธ ์ขํ์ 'X' ์ฅ์ ๋ฌผ์ด ์๋ค๋ฉด, for๋ฌธ ํ์ถ.
if park[new_move_y][new_move_x] == 'X':
break
# ์๋ก ์ด๋ํ ์ขํ๊ฐ 0๋ณด๋ค ํฌ๊ณ , 'park'์ ํฌ๊ธฐ๋ณด๋ค ์์ผ๋ฉด
else:
y, x = new_move_y, new_move_x
return [y, x]