https://programmers.co.kr/learn/courses/30/lessons/1835

 

코딩테스트 연습 - 단체사진 찍기

단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두

programmers.co.kr

#include <string>
#include <vector>
#include <iostream>

using namespace std;

char Friend[8];
bool used[8];

int cnt;
void dfs(int le, char path[], vector<string>check) {
    if (le==8) {
        for(int x=0; x<check.size(); x++){
            int a, b;
            for (int y = 0; y < 8; y++) {
                if (path[y] == check[x][0])
                    a = y;
                else if (path[y] == check[x][2])
                    b = y;
            }
            int checkNum = check[x][4] - '0';
            if (check[x][3] == '=') {
                if (abs(a - b) -1 != checkNum)
                    return;
            }
            else if (check[x][3] == '>') {
                if (abs(a - b) - 1 <= checkNum)
                    return;
            }
            else if(check[x][3] == '<') {
                if (abs(a - b) - 1 >= checkNum)
                    return;
            }
        }

        cnt++;
        return;
    }

    for (int i = 0; i < 8; i++) {
        if (used[i] == 1) continue;
        path[le] = Friend[i];
        used[i] = true;
        dfs(le + 1, path, check);
        used[i] = false;
    }
}

// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) {
    int answer = 0;

    Friend[0] = 'A';
    Friend[1] = 'C';
    Friend[2] = 'F';
    Friend[3] = 'J';
    Friend[4] = 'M';
    Friend[5] = 'N';
    Friend[6] = 'R';
    Friend[7] = 'T';

    cnt = 0;
    char path[8] = { NULL, };

    dfs(0, path, data);

    answer = cnt;
    return answer;
}

+ Recent posts