반응형

backtracking 2

DFS, 순열구하기, 조합구하기

순열은 조합과는 다르다. 순열은 순서가 중요시 되는 수열이다. 예를들어 5개의 숫자 중 3개를 순서에 상관없이 고르는 것은 조합이다. 즉, 조합에서 (1,2,3)과 (3,2,1)는 같은 경우로 판단된다. 그러나 순열은 다르다. 순서가 중요하기 때문에 순열에서 (1,2,3)과 (3,2,1)은 다르다. 중고등학교에서 배웠던 공식이 기억날 것이다. 사실 기억나지 않는다. 0!은 1이다. 기억을 더듬어 5개의 숫자중에 3가지를 뽑아내는 조합의 경우의 수는 10이며, 순열은 60가지가 되겠다. 이를 코드로 어떻게 구현할 수 있을까? 순열 보통의 경우 DFS 알고리즘으로 순열을 구현할 수 있다. 5가지의 수 중에 3가지를 뽑아내는 순열의 경우는 아래와 같다. void Dfs_permutation(int level)..

SW/Algorithm 2021.09.01

N queen

난 컴공이라고 하기엔 애매한 학부를 졸업했다. 해서 알고리즘등과 같은 전산학 이론에 다소 취약하다. 그래도 꾸준하게 공부하고 정리해가다 보면 빠삭해지지 않을까. 어찌되었건 오늘은 N queen을 공부해보았다. 사실 이전에 풀은 기억이 있고 그때 풀었던 코드를 다시 봤는데 내가 풀었는데 이해가 안간다. 그래서 다시 차근차근 살펴보았다. N queen. 알고리즘의 Backtracking을 다룰때 매우 빈번하게 등장하는 아무 유명한 문제이다. 문제는 간단하다. 문제 "N*N의 Table에서 체스unit Queen N개가 서로 공격하지 않게 놓일 수 있는 경우의 수" 예를 들어 N=4일때, 4개의 Queen이 놓일 수 있는 경우는 아래와 같다. 주요 아이디어 1. 퀸의 특성상, 한 행에 하나의 퀸만 있을 수 있..

SW/Algorithm 2021.02.26
반응형