문제
LRUD 명령어를 이용해 캐릭터를 움직인다.
캐릭터는 0,0에서 시작하며 -5,5 의 범위를 가지는 2차원 좌표계 내에서 움직일 수 있다.
경계를 넘어가면 명령어는 무시한다.
처음으로 걸어본 길의 길이를 구하자
명령어 dirs는 string이며 U, D, R, L 이외의 문자는 주어지지 않음
dirs의 길이는 500이하
입출력 예시
dirs | result |
---|---|
“ULURRDLLU” | 7 |
접근
해당 좌표에 방문했는지는 중요하지 않다.
움직이는 길이 방문했던 길인지를 알아야 한다.
좌표계가 크지 않으므로, 모든 길을 추가해놓고 방문 여부를 체크하면 될 것 같다.
이전 좌표 -> 이후 좌표를 알아야 하기 때문에 4차원 배열이 필요하다.
뭔가 더 쉽게 배열을 만들어놓는 방법이 있을 것 같은데, 잘 모르겠다.
파이썬 문법 기초가 너무 부족한 것 같다.
이전과 이후 좌표의 순서가 바뀌어도 같은 길이므로, 두 경우를 모두 체크해준다.
코드
- 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(dirs):
dic = {"L" : [-1,0], "R" : [1,0], "D": [0, 1], "U" : [0, -1]}
board = [[[[ 0 for _ in range(11) ] for _ in range(11) ] for _ in range(11)] for _ in range(11)]
now = [5,5]
answer = 0
route = set()
for cmd in dirs:
dx, dy = dic[cmd]
nx = now[0] + dx
ny = now[1] + dy
if nx < 0 or nx >= 11 or ny < 0 or ny >= 11:
continue
if board[nx][ny][now[0]][now[1]] == 0:
board[nx][ny][now[0]][now[1]] = 1
board[now[0]][now[1]][nx][ny] = 1
answer += 1
now = [nx, ny]
return answer