프로그래머스__[문제풀이: lv3. 방문길이]

Jaewon Lee·2021년 8월 10일
0

Algorithm

목록 보기
26/36
post-thumbnail

On.


Algorithm


1. 수도코드

1) dirs 순회 (for문)

2) 현재 점에서 움직일 방향의 값을 더해, 다음 점 생성

3) 다음 점의 x, y가 -5이상이고 5이하이면 set()으로 된 stack에 추가

  • stack이 set 자료구조이기 때문에, 지나갔던 선분은 추가되지 않는다.
  • stack.add((현재x, 현재y, 다음x, 다음y))
  • stack.add((다음x, 다음y, 현재x, 현재y))
  • 현재 점에 다음점을 할당
  • 선을 지나가는 방향이 오른쪽, 왼쪽 두가지이기 때문에 stack에 위 2개를 추가하는 것이다.

4) for문이 끝나면 stack의 길이를 이등분하여 리턴한다.

  • stack에 추가할 때 선분을 2번 추가했기 때문에 2로 나눈다.

2. 구현코드

def solution(dirs):
    directions = {'U': (0, 1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)}
    curr_x, curr_y = (0, 0)
    stack = set()
    
    for d in dirs:
        next_x, next_y = curr_x + directions[d][0], curr_y + directions[d][1] 
        
        if -5 <= next_x <= 5 and -5 <= next_y <= 5:
            stack.add((curr_x, curr_y, next_x, next_y))
            stack.add((next_x, next_y, curr_x, curr_y))
            curr_x, curr_y = next_x, next_y
    
    return len(stack) // 2

3. 배운 점

  • 중복 제거에는 set을 떠올리자!


Off.


프론트와 백을 넘나드는 리드 개발자가 되는 그날까지 🔥🔥🔥

profile
Communication : any

0개의 댓글