개발자 김수진

[프로그래머스] 단체사진 찍기 (C++) 본문

알고리즘/프로그래머스

[프로그래머스] 단체사진 찍기 (C++)

김수진장 2021. 8. 22. 18:19

[문제]

 

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

 

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

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

programmers.co.kr

 

[풀이]

 

처음 문제 봤을 때 Level2라는게 믿기지 않았다.

도저히 감이 안잡혀서 다른 분들의 풀이를 봤는데 생각보다 간단한 문제였다.

 

next_permutation 함수를 통해 프렌즈들이 일렬로 설 수 있는 모든 경우의 수를 구할 수 있다.

각 case마다 주어진 조건을 만족하는지 확인 후 , 모든 조건을 만족할 경우 answer에 +1을 해주어 

주어진 조건을 만족하여 사진을 찍는 모든 경우의 수를 구할 수 있다.

 

[코드]

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int len =0;
char sign;

bool check(int diff)
{
    if(sign == '=')
        return diff==len;
    else if(sign == '>')
        return diff > len ? true : false;
    else if(sign == '<')
        return diff < len ? true : false;
}
int solution(int n, vector<string> data) {
    int answer = 0;
    string friends = "ACFJMNRT";

    do{
        bool bCheck = true;
        for(int i=0;i<data.size();i++){
            int diff = friends.find(data[i][0]) - friends.find(data[i][2]);
            sign = data[i][3];
            len = data[i][4]-'0';
            bCheck = check(abs(diff)-1);
            if(!bCheck) break;
        }
        if(bCheck)  answer++;
    }while(next_permutation(friends.begin(),friends.end()));
        
    return answer;
}