미로 탈출 명령어CS/문제 풀이2023. 2. 2. 22:38
Table of Contents
시도 했던 방법 - BFS (간만에 BFS 로 풀겠다고 마음먹는 바람에..)
결론 -
- 먼저 거리 계산해서 되나 안되나 확인후
- 변위량을 계산해서 d, l, r, u 써야 되는거 계산하고
- 남은 카운트에서 d, l를 먼저가서 (최대 (n,1)) 간다
- 다음에 그래도 카운트가 남으면 rlrlrlrlrl 를 반복한다.
from collections import deque
# def solution(n, m, x, y, r, c, k):
# answer = ''
# q = deque([(x,y,"", 0)])
# while q:
# pos_x, pos_y, path, count = q.popleft()
# print(pos_x, pos_y, path, count)
# if count == k :
# if pos_x == r and pos_y == c :
# # print(pos_x, pos_y, path, count)
# answer = path
# return answer
# else :
# continue
# if abs(r-pos_x) + abs(c-pos_y) > k -count :
# print("가지치기 ",pos_x, pos_y, path, count )
# continue
# if pos_x < n : # down
# q.append((pos_x+1,pos_y,path+"d", count+1))
# if pos_y > 1 : # left
# q.append((pos_x,pos_y-1,path+"l", count+1))
# if pos_y < m : # right
# q.append((pos_x,pos_y+1,path+"r", count+1))
# if pos_x > 1 : # up
# q.append((pos_x-1,pos_y,path+"u", count+1))
# answer = "impossible"
# return answer
def solution(n, m, x, y, r, c, k):
answer = ''
dist = abs(x-r)+abs(y-c)
k -= dist
if k < 0 or k%2 != 0:
return "impossible"
direction = {'d':0, 'l':0, 'r':0, 'u':0}
if x > r:
direction['u'] += x-r
else:
direction['d'] += r-x
if y > c:
direction['l'] += y-c
else:
direction['r'] += c-y
answer += 'd'*direction['d']
d = min(int(k/2), n-(x+direction['d']))
answer += 'd'*d
direction['u'] += d
k -= 2*d
answer += 'l'*direction['l']
l = min(int(k/2), y-direction['l']-1)
answer += 'l'*l
direction['r'] += l
k -= 2*l
answer += 'rl'*int(k/2)
answer += 'r'*direction['r']
answer += 'u'*direction['u']
return answer
'CS > 문제 풀이' 카테고리의 다른 글
표현 가능한 이진트리 (0) | 2023.01.31 |
---|---|
인사고과 (0) | 2023.01.30 |
프로그래머스 레벨 1 다 풀고 (0) | 2022.08.11 |
2022-08-08 프로그래머스 인증 100문제 달성 (0) | 2022.08.08 |
프로그래머스 - 이중순위큐,k 번째 수 (0) | 2022.01.21 |