"""
출처:프로그래머스,
https://school.programmers.co.kr/learn/courses/30/lessons/150365
"""
# 풀이 과정
# 같은 곳을 두 번 방문할 수 있다
# 거리가 k로 고정
# bfs 같은 곳 방문 여러번 가능 단 거리는 k여야 한다
# dx dy [1,0]은 아래로 가는 것이다 위x 격자 미로에서 상상해야 한다
# 시간 초과 발생: 길이가 k가 되는 것들을 모아 다시 도착 지점에 있는지 확인 하는 방법 생각해보고 접근해보기!
# d,l,r,u
# ddd 다음 ddl ddr 이런 방향성에서 생각해보기 dfs로 접근도 생각해보기 bfs가 아닌
# 먼저 갈 방향성이 정해져 있다는 사실 인지 후 풀이 재구성
from collections import deque
def solution(n, m, x, y, r, c, k):
dx = [1, 0, 0, -1]
dy = [0, -1, 1, 0]
# s=[x,y] # 출발 지점
# d=[r,c] # 도착 지점
# n*m 격자
result = ""
while True:
if 1 <= x + 1 <= n and abs(x + 1 - r) + abs(y - c) + len(result) + 1 <= k:
result = result + "d"
x += 1
elif 1 <= y - 1 <= m and abs(x - r) + abs(y - 1 - c) + len(result) + 1 <= k:
result = result + "l"
y -= 1
elif 1 <= y + 1 <= m and abs(x - r) + abs(y + 1 - c) + len(result) + 1 <= k:
result = result + "r"
y += 1
elif 1 <= x - 1 <= n and abs(x - 1 - r) + abs(y - c) + len(result) + 1 <= k:
result = result + "u"
x -= 1
else:
return "impossible"
# len(result)==k
if len(result) == k:
if x == r and y == c:
return result
else:
return "impossible"