๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[Programmers] ๊ณต์ ์ฐ์ฑ ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
๊ณต์ ์ฐ์ฑ
์ง๋๋ค๋๋ ๊ธธ์ 'O', ์ฅ์ ๋ฌผ์ 'X'๋ก ๋ํ๋ธ ์ง์ฌ๊ฐํ ๊ฒฉ์ ๋ชจ์์ ๊ณต์์์ ๋ก๋ด ๊ฐ์์ง๊ฐ ์ฐ์ฑ
์ฐ์ฑ ์ ๋ก๋ด ๊ฐ์์ง์ ๋ฏธ๋ฆฌ ์ ๋ ฅ๋ ๋ช ๋ น์ ๋ฐ๋ผ ์งํ
["๋ฐฉํฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํฅ ๊ฑฐ๋ฆฌ" … ]
"E 5"๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ํ์ฌ ์์น์์ ๋์ชฝ์ผ๋ก 5์นธ ์ด๋
์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ๋ ๊ณต์์ ๋ฒ์ด๋๋์ง ํ์ธ
์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ ์ค ์ฅ์ ๋ฌผ์ ๋ง๋๋์ง ํ์ธ
์ ๋ ๊ฐ์ง์ค ์ด๋ ํ๋๋ผ๋ ํด๋น๋๋ค๋ฉด, ๋ก๋ด ๊ฐ์์ง๋ ํด๋น ๋ช ๋ น์ ๋ฌด์ํ๊ณ ๋ค์ ๋ช ๋ น์ ์ํ
๊ณต์์ ๊ฐ๋ก ๊ธธ์ด๊ฐ W, ์ธ๋ก ๊ธธ์ด๊ฐ H๋ผ๊ณ ํ ๋, ๊ณต์์ ์ข์ธก ์๋จ์ ์ขํ๋ (0, 0), ์ฐ์ธก ํ๋จ์ ์ขํ๋ (H - 1, W - 1)
๊ณต์์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด park, ๋ก๋ด ๊ฐ์์ง๊ฐ ์ํํ ๋ช ๋ น์ด ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด routes๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋,
๋ก๋ด ๊ฐ์์ง๊ฐ ๋ชจ๋ ๋ช ๋ น ์ํ ํ ๋์ธ ์์น๋ฅผ [์ธ๋ก ๋ฐฉํฅ ์ขํ, ๊ฐ๋ก ๋ฐฉํฅ ์ขํ] ์์ผ๋ก ๋ฐฐ์ด ๋ด์ return ํ๋๋ก solution ํจ์
def solution(park, routes):
# park : S ์์ ์ง์ , O ์ด๋ ๊ฐ๋ฅํ ํต๋ก, X ์ฅ์ ๋ฌผ
# routes์ ๊ฐ ์์๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ์ํํ ๋ช
๋ น์ด
# p : N ๋ถ์ชฝ, S ๋จ์ชฝ, W ์์ชฝ, E ๋์ชฝ
answer = []
queue = deque()
map = []
x = 0
y = 0
k = 0
for i in range(len(park)) :
temp = []
for j in park[i] :
temp.append(j)
if j == "S" :
x = i
y = k
k += 1
map.append(temp)
for i in routes :
a, b = i.split(" ")
b = int(b)
queue.append((a, b))
# map : [['S', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]
# queue : deque([('E', 2), ('S', 2), ('W', 1)])
# x, y : 0, 0
# n ๋ถ, s ๋จ, w ์, e ๋
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
while queue :
p, q = queue.popleft()
m = len(map)
n = len(i)
if p == "N" :
for z in range(1, q+1) :
nx = x + dx[0] * z
ny = y + dy[0] * z
if 0 > nx or nx >= m or 0 > ny or ny >= n :
nx = x
ny = y
break
if map[nx][ny] == "X" :
nx = x
ny = y
break
elif p == "S" :
for z in range(1, q+1) :
nx = x + dx[1] * z
ny = y + dy[1] * z
if 0 > nx or nx >= m or 0 > ny or ny >= n :
nx = x
ny = y
break
if map[nx][ny] == "X" :
nx = x
ny = y
break
elif p == "W" :
for z in range(1, q+1) :
nx = x + dx[2] * z
ny = y + dy[2] * z
if 0 > nx or nx >= m or 0 > ny or ny >= n :
nx = x
ny = y
print(nx, ny)
break
if map[nx][ny] == "X" :
nx = x
ny = y
print(nx, ny)
break
elif p == "E" :
for z in range(1, q+1) :
nx = x + dx[3] * z
ny = y + dy[3] * z
if 0 > nx or nx >= m or 0 > ny or ny >= n :
nx = x
ny = y
break
if map[nx][ny] == "X" :
nx = x
ny = y
break
x, y = nx, ny
answer = [x, y]
return answer
์์ ํ ์คํธ ์ผ์ด์ค๋ ๋ง๊ณ
๋ค์๋ 10์ ... ์ด์ ๊ฐ ๋ชฐ๊น ์๊ถ๊ธใ ใ ๋ค
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (0) | 2023.04.14 |
---|---|
[Programmers] ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2023.04.14 |
[Programmers] ๊ณผ์ ์งํํ๊ธฐ (0) | 2023.04.14 |
[Programmers] ์ถ์ต ์ ์ (0) | 2023.04.14 |
[Programmers] ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ (0) | 2023.04.14 |
Comments