1. ๋ฌธ์ ์ค๋ช
์ง๋๋ค๋๋ ๊ธธ์ '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๋ ๋ค์ ๋ค ๊ฐ์ง์ค ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
2. ์ถ๋ ฅ ์์

3. ๋ฌธ์ ๋ต์
def solution(park, routes):
answer = []
start = [] # ์์ ์ขํ
block = set() # ์ฅ์ ๋ฌผ ์ขํ
park_w = len(park[0]) # ๊ณต์ ๊ฐ๋ก ๊ธธ์ด
park_h = len(park) # ๊ณต์ ์ธ๋ก ๊ธธ์ด
for row, road in enumerate(park):
for col, val in enumerate(road):
if val == 'S': # ์์ ์ขํ๋ 1๊ฐ
start.append(row)
start.append(col)
elif val == 'X': # ์ฅ์ ๋ฌผ์ 0๊ฐ ์ด์
block.add((row, col))
answer = start
# ๊ณต์ ๋ฒ์ด๋๋์ง ํ์ธ
def is_out(row, col):
if park_w <= col or col < 0:
return 1
if park_h <= row or row < 0:
return 1
else:
return 0
# ๋ช
๋ น๋ณ ์ํ
for r in routes:
direction, distance = r.split()
distance = int(distance)
check_out = 0 # ๊ณต์ ๋ฒ์ด๋จ ํ์ธ
check_block = 0 # ์ฅ์ ๋ฌผ ํ์ธ
if direction == 'E':
for i in range(1, distance+1): # 1์นธ์ฉ ์ด๋
# ๊ณต์ ๋ฒ์ด๋๋์ง ํ์ธ
check_out = is_out(answer[0], answer[1]+i)
if check_out == 1:
break
# ์ฅ์ ๋ฌผ ๋ง๋๋์ง ํ์ธ
if (answer[0], answer[1]+i) in block:
check_block = 1
break
if check_out == 0 and check_block == 0:
answer[1] += distance
elif direction == 'W':
for i in range(1, distance+1): # 1์นธ์ฉ ์ด๋
# ๊ณต์ ๋ฒ์ด๋๋์ง ํ์ธ
check_out = is_out(answer[0], answer[1]-i)
if check_out == 1:
break
# ์ฅ์ ๋ฌผ ๋ง๋๋์ง ํ์ธ
if (answer[0], answer[1]-i) in block:
check_block = 1
break
if check_out == 0 and check_block == 0:
answer[1] -= distance
elif direction == 'S':
for i in range(1, distance+1): # 1์นธ์ฉ ์ด๋
# ๊ณต์ ๋ฒ์ด๋๋์ง ํ์ธ
check_out = is_out(answer[0]+i, answer[1])
if check_out == 1:
break
# ์ฅ์ ๋ฌผ ๋ง๋๋์ง ํ์ธ
if (answer[0]+i, answer[1]) in block:
check_block = 1
break
if check_out == 0 and check_block == 0:
answer[0] += distance
elif direction == 'N':
for i in range(1, distance+1): # 1์นธ์ฉ ์ด๋
# ๊ณต์ ๋ฒ์ด๋๋์ง ํ์ธ
check_out = is_out(answer[0]-i, answer[1])
if check_out == 1:
break
# ์ฅ์ ๋ฌผ ๋ง๋๋์ง ํ์ธ
if (answer[0]-i, answer[1]) in block:
check_block = 1
break
if check_out == 0 and check_block == 0:
answer[0] -= distance
# print(f'{r} ๋ช
๋ น ํ ํ์ฌ ์์น', answer)
return answer'๐ฅ๏ธ ์ฝ๋ฉํ ์คํธ > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค] [Python] ๋ง์น ํ๊ธฐ (0) | 2026.03.09 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] [Python] ๋ฐํํ๋ฉด ์ ๋ฆฌ (0) | 2026.03.09 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [Python] ์ถ์ต ์ ์ (0) | 2026.03.09 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [Python] ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ (0) | 2026.03.09 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [Python] [PCCE ๊ธฐ์ถ๋ฌธ์ ] 10๋ฒ / ๋ฐ์ดํฐ ๋ถ์ (1) | 2026.03.01 |