C++:: 프로그래머스 < 단체사진 찍기 >

jahlee·2023년 8월 18일
0

프로그래머스_Lv.2

목록 보기
104/106
post-thumbnail

만들수 있는 조합에서 주어진 조건에 따르는 경우를 계산해서 리턴해주면 되는 문제이다. 함수들만 잘활용한다면 크게 어렵지 않은 문제이다.

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool checkData(string& s, vector<string>& data) {
    for (auto& d : data) {
    	// 주어진 두 캐릭터의 거리를 구한다.
        int size = abs(find(s.begin(), s.end(), d[0]) - find(s.begin(), s.end(), d[2])) - 1;
        // 조건과 다르다면 return false;
        if (d[3] == '=' && size != d[4] - '0') return false;
        else if (d[3] == '>' && size <= d[4] - '0') return false;
        else if (d[3] == '<' && size >= d[4] - '0') return false;
    }
    return true;
}

int solution(int n, vector<string> data) {
    int answer = 0;
    string s = "ACFJMNRT";// 초기 순서

    do {
        if (checkData(s, data)) answer++;
    } while (next_permutation(s.begin(), s.end()));// 순열조합을 구해준다.
    // next_permutation 사용할 떄 오름차순으로 정렬된걸 시작으로 사용해야한다는 점을 주의하자.

    return answer;
}

0개의 댓글