728x90
λ°μν
https://school.programmers.co.kr/learn/courses/30/lessons/172928
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
"""
μ§λλ€λλ κΈΈμ '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 |
λκΈ