[ALGOSPOT] 알고스팟 PICNIC 소풍
(Python)
(글쓴날 : 2020.05.12)
* ALGOSPOT, 알고스팟 PICNIC 문제 Python 언어 풀이입니다.
* 소스 코드의 저작권은 글쓴이에게 있습니다.
알고스팟 PICNIC 소풍
1) 문제
문제 링크 : https://www.algospot.com/judge/problem/read/PICNIC
algospot.com :: PICNIC
소풍 문제 정보 문제 안드로메다 유치원 익스프레스반에서는 다음 주에 율동공원으로 소풍을 갑니다. 원석 선생님은 소풍 때 학생들을 두 명씩 짝을 지어 행동하게 하려고 합니다. 그런데 서로 친구가 아닌 학생들끼리 짝을 지어 주면 서로 싸우거나 같이 돌아다니지 않기 때문에, 항상 서로 친구인 학생들끼리만 짝을 지어 줘야 합니다. 각 학생들의 쌍에 대해 이들이 서로 친구인지 여부가 주어질 때, 학생들을 짝지어줄 수 있는 방법의 수를 계산하는 프로그램을 작성하세요
www.algospot.com
2) 풀이 과정
* 시간 복잡도 : O(n!)
최대 10명의 학생들이 주어지고, 학생들 사이의 친구 관계가 쌍으로 주어질 때, 모든 학생들을 친구끼리 짝이 되도록 하는 경우의 수를 구하는 문제입니다.
저의 경우, DFS를 적용하였으며, Python을 사용했습니다.
먼저, 친구 관계를 표시하는 인접 행렬을 구현한 후, 완전 탐색을 실시하여 친구끼리 짝을 맺었을 때, 남아있는 학생이 없다면 답을 1 증가시키는 식으로 문제를 해결했습니다.
단, 짝이 맞아떨어진 학생들이 순서만 바뀐 채 중복될 경우 답을 여러 번 증가시키게 되므로, 반복 제어 변수를 DFS() 함수의 인자로 넘겨 순열이 아닌 조합을 구했습니다.
3) 코드
* Python 코드
'Deprecated' 카테고리의 다른 글
[Baekjoon Online Judge] 백준 16287번 Parcel(Python) (0) | 2020.05.13 |
---|---|
[Baekjoon Online Judge] 백준 1644번 소수의 연속합(Python) (0) | 2020.05.13 |
[programmers] 프로그래머스 불량 사용자(Python) (0) | 2020.05.10 |
[programmers] 프로그래머스 튜플(C++, Python) (0) | 2020.05.09 |
[programmers] 프로그래머스 크레인 인형뽑기 게임(C++, Python) (0) | 2020.05.08 |