728x90
๋ฐ์ํ
https://school.programmers.co.kr/learn/courses/30/lessons/172928
"""
์ง๋๋ค๋๋ ๊ธธ์ 'O', ์ฅ์ ๋ฌผ์ 'X'๋ก ๋ํ๋ธ ์ง์ฌ๊ฐํ ๊ฒฉ์ ๋ชจ์์ ๊ณต์์์
๋ก๋ด ๊ฐ์์ง๊ฐ ์ฐ์ฑ
์ ํ๋ คํฉ๋๋ค. ์ฐ์ฑ
์ ๋ก๋ด ๊ฐ์์ง์ ๋ฏธ๋ฆฌ ์
๋ ฅ๋ ๋ช
๋ น์
๋ฐ๋ผ ์งํํ๋ฉฐ, ๋ช
๋ น์ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ฃผ์ด์ง๋๋ค.
["๋ฐฉํฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํฅ ๊ฑฐ๋ฆฌ" … ]
์๋ฅผ ๋ค์ด "E 5"๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ํ์ฌ ์์น์์ ๋์ชฝ์ผ๋ก
5์นธ ์ด๋ํ๋ค๋ ์๋ฏธ์
๋๋ค. ๋ก๋ด ๊ฐ์์ง๋ ๋ช
๋ น์ ์ํํ๊ธฐ ์ ์
๋ค์ ๋ ๊ฐ์ง๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค.
์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ๋ ๊ณต์์ ๋ฒ์ด๋๋์ง ํ์ธํฉ๋๋ค.
์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ ์ค ์ฅ์ ๋ฌผ์ ๋ง๋๋์ง ํ์ธํฉ๋๋ค.
์ ๋ ๊ฐ์ง์ค ์ด๋ ํ๋๋ผ๋ ํด๋น๋๋ค๋ฉด, ๋ก๋ด ๊ฐ์์ง๋
ํด๋น ๋ช
๋ น์ ๋ฌด์ํ๊ณ ๋ค์ ๋ช
๋ น์ ์ํํฉ๋๋ค.
๊ณต์์ ๊ฐ๋ก ๊ธธ์ด๊ฐ W, ์ธ๋ก ๊ธธ์ด๊ฐ H๋ผ๊ณ ํ ๋,
๊ณต์์ ์ข์ธก ์๋จ์ ์ขํ๋ (0, 0), ์ฐ์ธก ํ๋จ์ ์ขํ๋ (H - 1, W - 1) ์
๋๋ค.
"""
def solution(park, routes):
dog, width, height, block = {'y': 0, 'x': 0}, len(park[0]), len(park), []
for y in range(len(park)):
for x in range(len(park[0])):
if park[y][x] == 'X': block.append([y, x])
elif park[y][x] == 'S': dog = {'y': y, 'x': x}
for route in routes:
op, n = route.split()
n = int(n)
move = {'E': {'y': 0, 'x': n}, 'S': {'y': n, 'x': 0},'W': {'y': 0, 'x': -n}, 'N': {'y': -n, 'x': 0}}
if 0 <= (dog['y'] + move[op]['y']) < height and 0 <= (dog['x'] + move[op]['x']) < width:
check_block = True
for y, x in block:
if min(dog['y'], dog['y'] + move[op]['y']) <= y <= max(dog['y'], dog['y'] + move[op]['y']):
if min(dog['x'], dog['x'] + move[op]['x']) <= x <= max(dog['x'], dog['x'] + move[op]['x']):
check_block = False
break
if check_block:
dog['y'] += move[op]['y']
dog['x'] += move[op]['x']
return [dog['y'],dog['x']]
"""
์ฝ๋ ๋ฆฌ๋ทฐ
def solution(park, routes):
dog, width, height, block = {'y': 0, 'x': 0}, len(park[0]), len(park), []
# ๊ฐ์ ์ขํ๋ฅผ ๋ด์ ๋์
๋๋ฆฌ dog, ๊ณต์์ ๊ฐ๋ก, ์ธ๋ก, block์ ์์น๋ฅผ ๋ด์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธ
for y in range(len(park)): # ๊ณต์์ ์ด์คfor๋ฌธ์ผ๋ก ๋๋ฉด์
for x in range(len(park[0])):
if park[y][x] == 'X': block.append([y, x])
# ์ฅ์ ๋ฌผ์ด ์๋ค๋ฉด block๋ฆฌ์คํธ์ ์ถ๊ฐ
elif park[y][x] == 'S': dog = {'y': y, 'x': x}
# ๊ฐ์ ํ์ฌ์์น๋ฅผ ์ฐพ์๋ค๋ฉด dog์ ์ขํ๋ฅผ ๋ณ๊ฒฝ
for route in routes: ๋ฃจํธ๋ค์ ๋๋ฉด์
op, n = route.split() # ๋์๋จ๋ถ ์์น๋ฅผ ๋ด์ op, ์ผ๋ง๋ ์ด๋ํ ์ง n
n = int(n)
move = {'E': {'y': 0, 'x': n}, 'S': {'y': n, 'x': 0},'W': {'y': 0, 'x': -n}, 'N': {'y': -n, 'x': 0}}
# ์ขํ๋ฅผ ์ ์ฅํจ.
if 0 <= (dog['y'] + move[op]['y']) < height and 0 <= (dog['x'] + move[op]['x']) < width:
# ๊ฐ์ ํ์ฌ ์์น์์ ์ด๋ํ์๋ ๊ณต์์ ์ขํ๋ฅผ ๋ฒ์ด๋์ง ์๋์ง ๊ฒ์ฌํจ.
check_block = True
# ์ด๋ํ ๊ฒฝ๋ก์ ๋ธ๋ก์ด ์๋์ง ๊ฒ์ฌํ๊ธฐ ์ํ ๋ณ์
for y, x in block: # ์ฒ์์ ์ฅ์ ๋ฌผ๋ค์ ์ขํ๋ฅผ ๋ด์ ๋ฆฌ์คํธ๋ค์ ๋๋ฉด์
# min max ํจ์๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ๋ง์ด๋์ค ์ขํ๋ก ์ด๋ํ ์ ์๊ณ ,
# ํ๋ฌ์ค ์ขํ๋ก ์ด๋ํ ์์๊ธฐ ๋๋ฌธ์ min, max๋ฌธ์ผ๋ก ๋ค์ํ ๊ฒฝ์ฐ๋ฅผ ํ๋๋ก ํฉ์ณค์.
if min(dog['y'], dog['y'] + move[op]['y']) <= y <= max(dog['y'], dog['y'] + move[op]['y']):
if min(dog['x'], dog['x'] + move[op]['x']) <= x <= max(dog['x'], dog['x'] + move[op]['x']):
# ํ์ฌ ๊ฐ์ ์์น์ ์ด๋ํ ์์น ์ฌ์ด์ ์ฅ์ ๋ฌผ์ด ์๋ค๋ฉด
# ์ด๋ํ์ง ๋ชปํ๋ฏ๋ก check_block ๋ณ์๋ฅผ false๋ก ๋ณ๊ฒฝํ๊ณ ์ข
๋ฃ
check_block = False
break
if check_block: # ์ด๋ํ ๊ฒฝ๋ก์ ์ฅ์ ๋ฌผ์ด ์๋ค๋ฉด ๊ฐ์ ์์น๋ฅผ ์ด๋์ํด
dog['y'] += move[op]['y']
dog['x'] += move[op]['x']
return [dog['y'],dog['x']]
"""
728x90
๋ฐ์ํ
'๐ผ๐ก๐๐ค๐ง๐๐ฉ๐๐ข > ๐๐ง๐ค๐๐ง๐๐ข๐ข๐๐ง๐จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค '์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ2 ๊ดํธ ํ์ ํ๊ธฐ' ํ์ด์ฌ ํ์ด (0) | 2023.05.08 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค 'ํผ์์ ํ๋ ํฑํํ ' ํ์ด์ฌ ํ์ด (0) | 2023.04.26 |
ํ๋ก๊ทธ๋๋จธ์ค '์ฝ๋ ์ฒ๋ฆฌํ๊ธฐ' ํ์ด์ฌ ํ์ด (0) | 2023.04.24 |
ํ๋ก๊ทธ๋๋จธ์ค '์ถ์ต ์ ์' ํ์ด์ฌ ํ์ด (0) | 2023.04.05 |
ํ๋ก๊ทธ๋๋จธ์ค '์นด๋ ๋ญ์น' ํ์ด์ฌ ํ์ด (0) | 2023.03.15 |
๋๊ธ