Posts [알고리즘] 프로그래머스 - 방문 길이
Post
Cancel

[알고리즘] 프로그래머스 - 방문 길이


문제

LRUD 명령어를 이용해 캐릭터를 움직인다.
캐릭터는 0,0에서 시작하며 -5,5 의 범위를 가지는 2차원 좌표계 내에서 움직일 수 있다.
경계를 넘어가면 명령어는 무시한다.
처음으로 걸어본 길의 길이를 구하자
명령어 dirs는 string이며 U, D, R, L 이외의 문자는 주어지지 않음
dirs의 길이는 500이하


입출력 예시

dirsresult
“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


This post is licensed under CC BY 4.0 by the author.

[알고리즘] 프로그래머스 - FloodFill

[알고리즘] 프로그래머스 - 게임아이템