📖저자님의 책 소개 영상: https://www.youtube.com/watch?v=Q13Uj_5bH9M
🗓️TIL (this week I learned)
수 읽기, 정리, 몸풀기 문제1
목 배열, 해시 복습
금 🤔🤔🤔🤔
토 🤔🤔🤔🤔
- 여기는 풀면서 IQ 상승을 노려볼 만한다🤣
🔷 백트래킹: 가능성이 없는 곳에서는 되돌아가고 가능성이 있는 곳을 탐색하는 알고리즘
🔷 N-퀸 문제: 체스판에 개를 배치했을 때, 퀸을 놓을 수 있는 경우의 수가 몇 개인지를 찾는 게 논점이다.
참고:
https://cs.lmu.edu/~ray/notes/backtracking/
n-queens wiki(en) -> 책 퀸즈 문제 풀이와 코드가 유사함.
N개 배치를 놓쳐서 며칠 동안 머리를 싸매고 있었다..ㅠㅠㅠㅠㅠ
예컨대, 4x4 체스판, 4개의 퀸을 놓을 수 있는 경우의 수는 4x4x4x4=256(완전탐색). 이를 유망함수를 추가해 탐색 대상을 줄여 해를 구할 수 있다. (4-퀸 문제의 해는 2개)
n-queens의 해
https://school.programmers.co.kr/learn/courses/30/lessons/87946
def dfs(cur_k, cnt, dungeons, visited):
answer_max = cnt
for i in range(len(dungeons)):
if cur_k >= dungeons[i][0] and visited[i] == 0:
visited[i] = 1
answer_max = max(answer_max, dfs(cur_k - dungeons[i][1], cnt + 1, dungeons, visited))
visited[i] = 0
return answer_max
def solution(k, dungeons):
visited = [0] * len(dungeons)
answer_max = dfs(k, 0, dungeons, visited)
return answer_max
순열로도.. (백트래킹은 아님)
import itertools
def solution(k, dungeons):
max_cnt = 0
for perm in itertools.permutations(dungeons, len(dungeons)):
cur_k = k
cnt = 0
for need, cost in perm:
if cur_k >= need:
cur_k -= cost
cnt += 1
else:
break
if cnt > max_cnt:
max_cnt = cnt
if max_cnt == len(dungeons):
return max_cnt
return max_cnt
https://school.programmers.co.kr/learn/courses/30/lessons/12952
def backtrack(col_positions, current_row, board_size):
total_solutions = 0
if current_row == board_size:
return 1
for col in range(board_size):
col_positions[current_row] = col
for prev_row in range(current_row):
same_col = (col_positions[prev_row] == col)
same_diag = abs(col_positions[prev_row] - col) == current_row - prev_row
if same_col or same_diag:
break
else:
total_solutions += backtrack(col_positions, current_row + 1, board_size)
return total_solutions
def solution(n):
return backtrack([0] * n, 0, n)
https://school.programmers.co.kr/learn/courses/30/lessons/92342
https://school.programmers.co.kr/learn/courses/30/lessons/60062
https://school.programmers.co.kr/learn/courses/30/lessons/92345