알고리즘/프로그래머스

프로그래머스 - 단체사진 찍기

시나모온 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

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~