일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 성화봉송주자
- 영어회화 100일의 기적
- Segment Tree
- 외판원 순회
- BOJ 2098
- 생활코딩
- 삼성 코딩테스트
- 캘리그라피
- DP
- upper_bound
- 언어의 온도
- 이분탐색
- BFS
- lower_bound
- 창훈쓰다
- multiset
- 인간이 그리는 무늬
- 안드로이드 스튜디오
- 다이나믹 프로그래밍
- 위상정렬
- MST
- 그리디 알고리즘
- boj
- 백트레킹
- 다음 API
- 다음 지도 api
- 성화봉송
- 평창동계올림픽
- yolo
- 비트마스크
- Today
- Total
Hoon222y
알고스팟- [PICNIC] 문제 next_permutation으로 접근 본문
예전에도 한번 풀어봤던 문제이다. 방학때 공부하는 책 한권을 완성하기 위해 다시 풀어보는 과정중에 next_permutation을 사용하여 접근을 해보았다.
#include<iostream>
//#include <stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int arr[56];
int answer;
int stuNum;
int setNum;
bool gett[56];
vector<int> v;
vector<int>::iterator iter;
int check(int a){
for(int i=0;i<setNum*2;i++){
if(((v.at(a)*10+v.at(a+1))==arr[i]||((v.at(a)+10*v.at(a+1))==arr[i]))){
if((gett[i]!=false)){
gett[i] = false;
if(a == stuNum-2){
answer++;
memset(gett,true,sizeof(gett));
return 0;
}
else{
check(a+2);
}
gett[i] = true;
}else{
return 0;
}
}
}
return 0;
}
int main(){
int testCase;
cin >> testCase;
//scanf("%d",&testCase);
// next_permutation 쓸꺼임
while(testCase--){
answer =0;
memset(gett,true,sizeof(gett));
cin >> stuNum >> setNum;
//scanf("%d %d" , &stuNum,&setNum);
for(int i=0;i<stuNum;i++){
v.push_back(i);
}
for(int i=0;i<setNum;i++){
int a,b;
cin >> a >> b;
//scanf("%d %d",&a,&b);
if(a>b){
arr[i] = b*10+a;
}else{
arr[i] = a*10+b;
}
} //입력 다함
do{
check(0);
}while(next_permutation(v.begin(), v.end()));
int useNum=1;
for(int i=1;i<=stuNum/2;i++){
useNum = useNum*2*i;
}
//printf("%d\n" , (answer/useNum));
cout << answer/useNum << endl;
}
}
윗 부분은 재귀함수를 구현 한 것이다.
근데 ... 해결하지 못한 문제가 있다 ....
1) 어디선가 초기화 문제가 발생하고 있다. 각각의 case 에 대해 입력을 주면 답이 나오는데 연속해서 입력을 하면 정답이 잘 출력되지 않는다.
2) 그래도 한번 제출 해보았는데 시간초과 ... 어디서 시간초과가 나는지를 모르겠다 ...
좀더 생각하고 접근해보도록 하자.
'코딩 > BOJ & 알고스팟' 카테고리의 다른 글
[12865] - LIS변형 DP활용 (0) | 2016.07.05 |
---|---|
[12865] - DP를 통한 접근 (0) | 2016.07.04 |
알고스팟 [PICNIC] - 완전탐색 (0) | 2016.03.02 |
알고스팟 [TRIANGLE] (0) | 2016.02.24 |
[2167] 2차원 배열의 합 (2차원 배열 동적할당, memset) (0) | 2016.02.14 |