알고리즘/프로그래머스
프로그래머스 - 단체사진 찍기
시나모온
2020. 9. 7. 07:46
문제 링크입니다 : programmers.co.kr/learn/courses/30/lessons/1835
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 �
programmers.co.kr
완전 탐색으로 해결!
근데 초기화 안하면 틀린다고 나와서 고생했다.. 왜 그런지..
#include <string>
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;
const char member[8] = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
vector<bool> choosed;
// {{a, b}, {cmd, dist}}
vector<pair<pair<char, char>, pair<char, int>>> cmd;
bool isSatisfied(char a, char b, char c, int d, string& str) {
int apos = str.find(a);
int bpos = str.find(b);
int term = abs(apos - bpos) - 1;
switch(c) {
case '=':
if(term == d) return true;
else return false;
break;
case '>':
if(term > d) return true;
else return false;
break;
case '<':
if(term < d) return true;
else return false;
break;
}
return false;
}
int getCnt(const vector<string>& data, string str) {
if(str.size() == 8) {
for(int i = 0; i < cmd.size(); i++) {
char a = cmd[i].first.first;
char b = cmd[i].first.second;
char c = cmd[i].second.first;
int n = cmd[i].second.second;
if(!isSatisfied(a, b, c, n, str)) {
return 0;
}
}
return 1;
}
int ret = 0;
for(int i = 0; i < 8; i++) {
if(!choosed[i]) {
choosed[i] = true;
ret += getCnt(data, str + member[i]);
choosed[i] = false;
}
}
return ret;
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) {
int answer = 0;
cmd.clear();
for(int i = 0; i < data.size(); i++) {
char a = data[i][0];
char b = data[i][2];
char c = data[i][3];
int n = data[i][4] - '0';
cmd.push_back({{a, b}, {c, n}});
}
choosed.assign(8, false);
answer = getCnt(data, "");
return answer;
}
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~