부트캠프

[16일차] TIL - Week2 Test

반응형

2주차 시험

 

1. 방문 기록

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

 

def solution(dirs):
    answer = 0
    # 북 동 남 서
    dx = [-1, 0, 1, 0]
    dy = [0, 1, 0, -1]

    d = {
        "U": 0,
        "R": 1,
        "D": 2,
        "L": 3
    }

    visited = set()
    answer = 0
    x, y = 0, 0

    for dir in dirs:
        i = d[dir]
        nx = x + dx[i]
        ny = y + dy[i]
        if abs(nx) > 5 or abs(ny) > 5:
            continue
        if (x, y, nx, ny) not in visited:
            visited.add((x, y, nx, ny))
            visited.add((nx, ny, x, y))
            answer += 1

        x, y = nx, ny

    return answer

위 답의 아이디어는 d 라는 변수로 딕셔너리로 선언한 것이 인상적이었습니다. 그렇지 않다면 for문 안에서 하나하나 'U', 'D', 'R', 'L'을 판단해줘야 했을 텐데 key value로 코드를 줄일 수 있었습니다. 

또한 nx, ny값이 좌표평면을 나가는 경우 continue로 진행할 때 abs로 절대값을 사용하는 것은 이와 비슷한 다른 문제에도 적용할 수 있을것입니다.

 

 

 

 

2. 타겟 넘버

https://programmers.co.kr/learn/courses/30/lessons/43165

 

DFS로 풀어야 겠다는 아이디어는 생각해냈지만 아직 DFS를 구현하는게 익숙하지 않아서 풀지 못했습니다.

(DFS 복습이 더 필요)

def solution(numbers, target):
    answer = 0

    def dfs(idx, result):
        if idx == len(numbers):
            if result == target:
                nonlocal answer
                answer += 1
            return

        else:
            dfs(idx + 1, result + numbers[idx])
            dfs(idx + 1, result - numbers[idx])

    dfs(0, 0)

    return answer

idx값을 dfs로 증가 시키면서 다음 수를 더할지 뺄지의 모든 경우의 수를 탐색하는 것입니다. target과 같은 경우만 answer라는 변수에 1을 증가 시켜서 return 해줍니다.

 

 

 

 

반응형

'부트캠프' 카테고리의 다른 글

[알고리즘 2주차] WIL (Graph, DFS, BFS, Tree)  (0) 2022.03.27
[17일차] TIL - Heap  (0) 2022.03.25
[13일차] TIL - Back Tracking  (0) 2022.03.21
[알고리즘 1주차] WIL  (0) 2022.03.20
[11일차] TIL (DFS)  (0) 2022.03.18