반응형
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 |