๐ ํ์ด์ฌ ์ผ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
์ง๋๋ค๋๋ ๊ธธ์ 'O', ์ฅ์ ๋ฌผ์ 'X'๋ก ๋ํ๋ธ ์ง์ฌ๊ฐํ ๊ฒฉ์ ๋ชจ์์ ๊ณต์์์ ๋ก๋ด ๊ฐ์์ง๊ฐ ์ฐ์ฑ ์ ํ๋ คํฉ๋๋ค. ์ฐ์ฑ ์ ๋ก๋ด ๊ฐ์์ง์ ๋ฏธ๋ฆฌ ์ ๋ ฅ๋ ๋ช ๋ น์ ๋ฐ๋ผ ์งํํ๋ฉฐ, ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ฃผ์ด์ง๋๋ค.
- ["๋ฐฉํฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํฅ ๊ฑฐ๋ฆฌ" … ]
์๋ฅผ ๋ค์ด "E 5"๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ํ์ฌ ์์น์์ ๋์ชฝ์ผ๋ก 5์นธ ์ด๋ํ๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ก๋ด ๊ฐ์์ง๋ ๋ช ๋ น์ ์ํํ๊ธฐ ์ ์ ๋ค์ ๋ ๊ฐ์ง๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค.
- ์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ๋ ๊ณต์์ ๋ฒ์ด๋๋์ง ํ์ธํฉ๋๋ค.
- ์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ ์ค ์ฅ์ ๋ฌผ์ ๋ง๋๋์ง ํ์ธํฉ๋๋ค.
์ ๋ ๊ฐ์ง์ค ์ด๋ ํ๋๋ผ๋ ํด๋น๋๋ค๋ฉด, ๋ก๋ด ๊ฐ์์ง๋ ํด๋น ๋ช
๋ น์ ๋ฌด์ํ๊ณ ๋ค์ ๋ช
๋ น์ ์ํํฉ๋๋ค.
๊ณต์์ ๊ฐ๋ก ๊ธธ์ด๊ฐ 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[i]๋ ๋ค์ ๋ฌธ์๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ์์์ง์ ์ ํ๋๋ง ์ฃผ์ด์ง๋๋ค.
- park๋ ์ง์ฌ๊ฐํ ๋ชจ์์ ๋๋ค.
- 3 ≤ park[i]์ ๊ธธ์ด ≤ 50
- 1 ≤ routes์ ๊ธธ์ด ≤ 50
- routes์ ๊ฐ ์์๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ์ํํ ๋ช ๋ น์ด๋ฅผ ๋ํ๋ ๋๋ค.
- ๋ก๋ด ๊ฐ์์ง๋ routes์ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ์์๋๋ก ๋ช ๋ น์ ์ํํฉ๋๋ค.
- routes์ ์์๋ "op n"๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, op๋ ์ด๋ํ ๋ฐฉํฅ, n์ ์ด๋ํ ์นธ์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- op๋ ๋ค์ ๋ค ๊ฐ์ง์ค ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- N : ๋ถ์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- S : ๋จ์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- W : ์์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- E : ๋์ชฝ์ผ๋ก ์ฃผ์ด์ง ์นธ๋งํผ ์ด๋ํฉ๋๋ค.
- 1 ≤ n ≤ 9
- op๋ ๋ค์ ๋ค ๊ฐ์ง์ค ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๐ ์ ์ถ๋ ฅ ์

์ถ์ธก)
์ผ๋จ ํ์ฌ ์์น์ ๋ํ ๋ฐฐ์ด์ ์ ์ฅ [์ด, ํ] ๊ธฐ๋ณธ [0,0]
๊ทธ๋ฆฌ๊ณ park ๋ฐฐ์ด์์ S์ ์์น๋ฅผ ์ฐพ์ ํ์ฌ ์์น๋ฅผ ๊ฐฑ์ ํด ์ค๋ค.
๊ทธ๋ฆฌ๊ณ routes๋ฅผ for๋ฌธ์ผ๋ก ๋๋ ค ํ๋์ฉ ๋นผ์์ ํ์ฌ์์น๋ฅผ ์ด๋์ ์ํค๋ ๋ฐ
๋จผ์ ํ๋ณ๋ถํฐ ํ๋ค.
1. E๋ W๋ฉด ํ์ฌ ์์น์ ์ด์์ n๋งํผ E๋ฉด +, W๋ฉด - ์ํค๊ณ ํด๋น ๊ฐ(x1)์ด park ์ธ๋ฑ์ค ํ๋์ ๊ธธ์ด๋ณด๋ค ๊ธธ์ด์ง๋ฉด ํด๋น routes๋ cotinue๋ก ๋ฐ๋ก ๋์ด๊ฐ
2. N๋ S๋ฉด ํ์ฌ ์์น์ ํ์์ n๋งํผ S๋ฉด +, N์ด๋ฉด - ์ํค๊ณ ํด๋น ๊ฐ(y1)์ด park ์ ์ฒด ๊ธธ์ด๋ณด๋ค ๊ธธ์ด์ง๋ฉด ํด๋น routes๋ cotinue๋ก ๋ฐ๋ก ๋์ด๊ฐ
์์ 2๊ฐ์ง ํ๋ณ์ด ๋ชจ๋ ํต๊ณผํ๋ฉด
์ด์ ์ค๊ฐ ์ฅ์ ๋ฌผ ํ์ ์ ํด์ผํจ
์์์ ๊ธธ์ด ํ๋ณํ ๋ ์ ์ฅํด ๋์ ๊ฐ์ ๊ฐ์ง๊ณ
1. E๋ W๋ฉด park ํด๋น x๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ์์ ํ์ฌ ์์น์ x๊ฐ๊ณผ ์ด๋ํ ๊ฐ์ธ x1๊ฐ ๋ฌธ์์ด ์์ ์ฌ์ด์ X๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด routes๋ cotinue๋ก ๋ฐ๋ก ๋์ด๊ฐ
2. N๋ S๋ฉด ํ์ฌ ์์น์ y๊ฐ๊ณผ ์ด๋ํ ๊ฐ์ธ y1๊ฐ ์ฌ์ด์ ์ธ๋ฑ์ค ๊ฐ์ x๋ฒ์งธ ๋ฌธ์์ด์ X๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด routes๋ cotinue๋ก ๋ฐ๋ก ๋์ด๊ฐ
์ด๋ง์ ๋ ๋ค ํต๊ณผํ๋ฉด
ํ์ฌ ์์น๋ฅผ x1๊ณผ y1์ผ๋ก ๋ณ๊ฒฝํ๊ณ ๋ค์ routes๋ก ๋์ด๊ฐ๋ค.
์์ค์ฝ๋)
* 1์ฐจ) ์คํจ: ์ ํ๋ 80์
def solution(park, routes):
now = [0,0]
# ์์์
for i in range(0,len(park)):
if 'S' in park[i]:
now[0] = i # ํ
now[1] = park[i].index('S') # ์ด
x1 = y1 = 0
# Route ํ๋ณ
for route in routes :
# ๊ณต์ ๋ฐ์ธ์ง ํ๋ณ
if route[0] == 'E' :
x1 = now[1] + int(route[2])
if x1 > len(park[0])-1 :
continue
elif route[0] == 'W' :
x1 = now[1] - int(route[2])
if x1 < 0 :
continue
elif route[0] == 'S' :
y1 = now[0] + int(route[2])
if y1 > len(park)-1 :
continue
elif route[0] == 'N' :
y1 = now[0] - int(route[2])
if y1 < 0 :
continue
b_x = b_y = a_x = a_y = 0
# ์ฅ์ ๋ฌผ ํ๋ณ
if route[0] == 'E' or route[0] == 'W' :
if now[1] > x1 :
b_x = x1
a_x = now[1]
else :
b_x = now[1]
a_x = x1
if 'X' in park[now[0]][b_x:a_x]:
continue
else :
now[1] = x1
else :
if now[0] > y1 :
b_y = y1
a_y = now[0]
else :
b_y = now[0]
a_y = y1
if 'X' in [ park[j][now[1]] for j in range(b_y,a_y) ]:
continue
else :
now[0] = y1
return now
* 2์ฐจ) ์ฑ๊ณต
def solution(park, routes):
now = [0,0]
# ์์์
for i in range(0,len(park)):
if 'S' in park[i]:
now[0] = i # ํ
now[1] = park[i].index('S') # ์ด
x1 = y1 = 0
# Route ํ๋ณ
for route in routes :
# ๊ณต์ ๋ฐ์ธ์ง ํ๋ณ
if route[0] == 'E' :
x1 = now[1] + int(route[2])
if x1 > len(park[0])-1 :
continue
elif route[0] == 'W' :
x1 = now[1] - int(route[2])
if x1 < 0 :
continue
elif route[0] == 'S' :
y1 = now[0] + int(route[2])
if y1 > len(park)-1 :
continue
elif route[0] == 'N' :
y1 = now[0] - int(route[2])
if y1 < 0 :
continue
b_x = b_y = a_x = a_y = 0
# ์ฅ์ ๋ฌผ ํ๋ณ
if route[0] == 'E' or route[0] == 'W' :
if now[1] > x1 :
b_x = x1
a_x = now[1]
else :
b_x = now[1]+1
a_x = x1+1
if 'X' in park[now[0]][b_x:a_x]:
continue
else :
now[1] = x1
else :
if now[0] > y1 :
b_y = y1
a_y = now[0]
else :
b_y = now[0]+1
a_y = y1+1
if 'X' in [ park[j][now[1]] for j in range(b_y,a_y) ]:
continue
else :
now[0] = y1
return now
๋ฆฌ๋ทฐ)
1์ฐจ์์ ์คํจํ๋ ๊ด๊ฑด์ X ๊ฐ ์ด๋์ ์๋์ง ํ๋ณํ๋ ๊ตฌ์ญ์ ์ ํ์ ํ์ด์ผ ํ๋ค๋ ์ ์ด์๋ค.
ํ์ฌ ์์น๋ ํ๋ณ์์ ์ ์ธํ์ด์ผ ํ๋๋ฐ ใ
ํนํ ์ฌ๋ฐฉํ๋ฐฉ ๋ค ์ฅ์ ๋ฌผ์ด๋ผ ์์ง์ด์ง ๋ชปํ ๋ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ํ์ฌ ์์น๋ฅผ ํฌํจ ์์ผ ๋ฒ๋ฆฌ๋ฉด์ S๋ X๊ฐ ์๋๋ค ๋ณด๋ Xํ๋ณํ ๋ OK X์์ ํด๋ฒ๋ฆฌ๊ณ ์์ง์ฌ๋ฒ๋ฆฌ๋ ์ฌํ๊ฐ!
๊ทธ๋์ Xํ๋ณํ ๋ ํ์ฌ ์์น๋ฅผ ์ ์ธํ๋ ๋ชจ๋ ํต๊ณผํ๋ค
๊ทธ๋ฆฌ๊ณ ๋ถ๋ช ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์๊ฑฐ ๊ฐ์ ์ฐพ์๋ณด๋ BFS๋ก ํธ๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ํ๋ค. BFS๋ฅผ ๊ณต๋ถํด์ ๋ค์ ํ์ด๋ณด๋ ๊ฑธ๋ก
'Coding Test > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Programmers] ํ๋ฆฐํฐ (0) | 2023.04.11 |
|---|---|
| Programmers] n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ (0) | 2023.04.03 |
| Programmers] ๋ง์น ํ๊ธฐ (0) | 2023.03.28 |
| Programmers] ๊ทค ๊ณ ๋ฅด๊ธฐ (0) | 2023.03.28 |
| ์์ด (0) | 2023.03.18 |
