코딩테스트와 실무 역량 모두 잡는 알고리즘 스터디(Python반)에 참여한 내용을 정리했다.
3주차의 주제는 searching으로 조합과 백트래킹에 관련된 문제들을 풀었다.
처음 퀸을 놓았을 때 움직일 수 있는 모든 방향을 미리 표시해서 다음 퀸이 그 자리에 올 수 없도록 하는 기괴한 풀이를 생각했다.
하지만 더 간단한 방법이 있었다.
def possible(queen, row):
for i in range(row):
if queen[i] == queen[row] or abs(queen[i] - queen[row]) == row - i:
return False
return True
출발지, 경유지, 도착지 3개의 기둥을 두고 재귀하며 해결한다.
가지치기에 대해 생각해볼 수 있었다.
def hanoi(n, from_, to_, through_, answer):
if n == 1:
answer.append([from_, to_])
return
hanoi(n - 1, from_, through_, to_, answer)
answer.append([from_, to_])
hanoi(n - 1, through_, to_, from_, answer)
return answer
재귀 함수를 이해하는 게 어려울 경우 stack으로 바꿔서 생각해보면 더 쉽게 이해할 수 있다는 조언을 받았다.
한 문제를 BFS와 DFS 등 여러 방향으로 푼 코드를 올려주셔서 도움이 많이 됐다.