Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
문제
https://www.algospot.com/judge/problem/read/PICNIC
풀이
고등학교 확률과 통계 시간에 뭔가 많이 볼 듯한 문제였다.
모든 경우의 수를 확인하는 Burute Force방법으로 해결하면 된다.
이차원 배열인
bool partnerBoard[45][45] //45인 이유는 최대의 짝의 경우 수가 (10*9)/2이기 때문
에 서로의 친구 여부를 담아둔다.
그 후에는 기저 사례로 짝지어진 수가 전체 학생 수의 반인 경우(모든 짝이 지어진 경우) totalPairNum를 +1 해주는 재귀 함수를 호출한다.
재귀함수 FindPairUpNum는 학생의 번호인 idx를 받아와 만약 아직 짝을 지을 수 있는 경우 partnerBoar에서 짝을 찾은 후 isPosMatch를 false로 바꿔준 후 FindPairUpNum(idx+1,matchedCoupleNum+1)를 재귀 호출한다.
idx를 +1 해주어 다음 번호의 학생을 짝을 지어주고 지어진 짝의 수를 +1 해주는 구조이다.
여기서 짝을 찾는 반복문이 idx +1부터 시작하여 찾는 이유는 idx보다 낮은 번호의 학생들은 이미 재귀 호출을 거치며 짝짓기(?)를 완료한 상태이기 때문이다.
만약 isPosMatch가 false인 (이미 짝이 지어진 학생) 경우 그대로 다음 재귀를 호출한다.
코드
'알고리즘 공부 > 알고스팟' 카테고리의 다른 글
[알고스팟] QUADTREE - 쿼드 트리 뒤집기 (C++) (0) | 2020.10.30 |
---|---|
[알고스팟] CLOCKSYNC - Synchronizing Clocks (C++) (0) | 2020.10.18 |
[알고스팟] BOARDCOVER - 게임판 덮기 (C++) (359) | 2020.10.16 |
[알고스팟] BOGGLE - 보글 게임 (C++) (0) | 2020.10.14 |
[알고스팟] FESTIVAL - 록 페스티벌 (C++) (0) | 2020.10.11 |