티스토리 뷰

https://school.programmers.co.kr/learn/courses/30/lessons/49994

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(dirs):
    x, y = 0, 0
    dir = {'U':(0, 1), 'D':(0, -1), 'R':(1, 0), 'L':(-1, 0)}
    answer = 0
    path = []
    for i in dirs:
        nx = x + dir[i][0]
        ny = y + dir[i][1]
        if -5<=nx<=5 and -5<=ny<=5: # 좌표평면 안
            if (x, y, nx, ny) not in path:
                path.append((x, y, nx, ny))
                path.append((nx, ny, x, y))
                answer += 1
            x, y = nx, ny
    return answer

처음에는 map = [[0 for _ in range(11)] for _ in range(11)] 로 2차원 배열을 생성한 후 길을 따라가며 

1. 좌표평면 내 점

2. 지나가지 않은 길

위의 두 조건을 다 만족하면 map 배열 내에서 해당 index의 값을 1 증가시키는 방법으로 풀려고 하였으나

코드가 더럽고 너무 길고.. 비효율적인 것 같아 다른 방법을 생각해보았다.

 

방향을 나타내는 dictionary를 두어 방향에 따른 긴 조건문을 사용하지 않아도 되도록 구현하였다.

방문한 길은 path 배열에 넣었다.

가고자 하는 점이 좌표평면 내의 점이고, 시작 점과 끝 점을 모두 고려하여 지나가지 않은 길이라면

answer 변수의 값을 1 증가시켜주었다.

 

처음에는 8번 test case부터 쭉 틀리길래 다시 생각해보니

(시작 -> 끝)이나 (끝 -> 시작)이나 모두 지나간 길이라는 것을 생각하지 못했던 것이다.

따라서 path 배열에 방향을 바꾸어 두 가지 경우 모두 append 해주었다.

Why not?^-^
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함