-
[프로그래머스] 단체사진 찍기문제 풀이 2020. 6. 1. 16:42
풀이)
순열을 이용해 모든 경우를 확인한 경우다.
풀이과정
1. {A,C,F,J,M,N,R,T} 집합을 순열로 나올 수 있는 경우를 본다.
2. 그 경우를 모든 조건과 비교하여, 참이 나올 경우 answer의 값을 하나 증가시켜준다.
조건 중 하나라도 위배되면 다음 순열로 넘어간다.
순열을 algorithm header의 next_permutation()함수를 이용해 주었다.
코드)
#include <string> #include <vector> #include <algorithm> using namespace std; // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요. int solution(int n, vector<string> data) { int answer = 0; vector <char> ch = {'A','C','F','J','M','N','R','T'}; do{ bool suc = true; for(int i=0;i<data.size();i++){ int idx1,idx2; for(int j=0;j<ch.size();j++){ if(data[i][0] == ch[j]) idx1 = j;
if(data[i][2] == ch[j]) idx2 = j;
} int dist = abs(idx1-idx2) -1; if(data[i][3] == '='){ if(dist == (data[i][4] - '0')) continue; else{ suc = false; break; } } else if(data[i][3] == '<'){ if(dist < (data[i][4] - '0')) continue; else{ suc = false; break; } } else if(data[i][3] == '>'){ if(dist > (data[i][4] - '0')) continue; else{ suc = false; break; } } } if(suc) answer++; }while(next_permutation(ch.begin(),ch.end())); return answer; }'문제 풀이' 카테고리의 다른 글
[프로그래머스] 뉴스클러스터링 (0) 2020.06.02 [프로그래머스] 점프와 순간이동 (0) 2020.06.02 [프로그래머스] 보행자 천국 (0) 2020.06.01 [프로그래머스] 최고의 집합 (0) 2020.05.31 [프로그래머스] 불량 사용자 (0) 2020.05.30