Hoon222y

알고스팟 [PICNIC] - 완전탐색 본문

코딩/BOJ & 알고스팟

알고스팟 [PICNIC] - 완전탐색

hoon222y 2016. 3. 2. 15:44

소풍을 가는데 싸우지 않기위해 친구끼리만 짝지어줄 수 있는 방법의 수를 출력하는 문제였다 .

내가 고민했던 방법은 2 가지였다. 

1) 각각의 짝들을 하나의 수로 바꾸어 배열에 저장한 후 재귀적으로 반복하면서 겹치는 숫자가 없게하는 방법 .

 - 설명이 애매하네 .. 나중에 파일 찾아볼 것. 그런데 구현하는 과정에 for문을 학생수 만큼 반복해야하는데 그걸 동적으로 구현하지 못하여 포기

2) 책에나온것처럼 재귀적으로 확인 

 - 결국 이걸로 풀긴 했는데 문제가 애매하다 .... 내가 짠 코드에서는 예제가 하나 틀리게 나오는데 정답처리가 되버렸다 ...


일단 내가 작성한 코드를 분석해보도록 하자.

재귀함수 부분만 보도록 하자. 나머지 부분은 그냥 횟수에 관한 코드이므로 .....

일단 전역변수로 학생의 1차원배열, 학생들이 짝이되는 2차원배열을 두었다. 

이부분에서 핵심은 아래에 있는 for 문이다. 그런데 

studentArr[i] = false;

studentArr[firstNum] = false;  이부분이 이해가 되지 않는다 ..... 그리고 이 코드대로 구현을 하면 분명 예제가 틀린대도 정답처리가 된다 ..

for문안에 재귀호출하는 부분으로 보이는데요
짝을 지어주고 (부분 문제 해결) 재귀호출을 한 후,
부분문제 해결 전 상태로 돌려 다른 해결을 하기 위해 처리해주는 것으로 보입니다!

라고 한다. 그런데 와닫지 않는 이유는 뭘까 ㅋㅋㅋ......... 

Comments