알고리즘 공부

less than 1 minute read

단체사진 찍기 - 2017 카카오코드 본선
https://programmers.co.kr/learn/courses/30/lessons/1835
next_permutation 사용
friends 벡터내에 순열을 구하는데 기준에 따라 적합한지 보고 구한다.
switch도 사용할 수 있다!!

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

int solution(int n, vector<string> data) {
    int pos[26];
    int answer = 0;
    vector<char> friends = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
    do {
        for (int i = 0; i < friends.size(); i++) {
            pos[friends[i] - 'A'] = i;
        }
        bool check = true;
        for (int j = 0; j < data.size(); j++) {
            int friend1 = data[j][0] - 'A';
            int friend2 = data[j][2] - 'A';
            int distance = abs(pos[friend1] - pos[friend2]) - 1;
            char operatorChar = data[j][3];
            int wants = data[j][4] - '0';
            switch (operatorChar) {
                case '=':
                    if (distance != wants) check = false;
                    break;
                case '<':
                    if (distance >= wants) check = false;
                    break;
                case '>':
                    if (distance <= wants) check = false;
                    break;
            }
            if (!check) break;
        }
        if (check) answer++;
    } while (next_permutation(friends.begin(), friends.end()));
    return answer;
}


소요시간 ; 한시간?
근데 온전히 혼자 풀지 못했다.
switch를 통한 예제 분류도, next_permutation도 익숙치 않았다.
다시 풀어보자