티스토리 뷰

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

using namespace std;

bool check(char op, int n, int diff)
{
    if(op == '=') return n == diff;
    else if(op == '>') return diff > n;
    else if(op == '<') return n > diff;
    return 0;
}

int solution(int n, vector<string> data) {
    int answer = 0;
    string s = "ACFJMNRT";
    sort(s.begin(), s.end());
    
    do
    {
        bool flag = 1;
        for(auto i : data)
        {
            int idx1 = s.find(i[0]);
            int idx2 = s.find(i[2]);
            int diff = abs(idx1-idx2)-1;
            int n = i[4]-'0';
            if(check(i[3], n, diff)) continue;
            flag = 0;
            break;
        }
        if(flag) answer++;
        
    }while(next_permutation(s.begin(), s.end()));
    return answer;
}

 

next_permutation 함수를 통한 순열 탐색을 통해 풀 수 있다.

기본 문자열은 각각 어치피, 콘, 프로도, 제이지, 무지, 네오, 라이언, 튜브를 의미하는 ACFJMNRT이다.

해당 함수 사용을 위해서 문자열을 정려랗고 시작한다.

 

문제 data 입력 형태에 따라 문자열에서 프렌즈 2명의 위치를 파악하고, 간격(차이)를 구한다.

그리고 입력된 부호와 간격 값을 통해 프렌즈에 대한 조건이 맞는지 아닌지 체크해준다.

만약 맞다면 넘어가고, 아니라면 미리 선언한 bool 변수를 통해 정답 체크를 넘어간다.

 

이르 모든 data에 대해 반복하여 수행해준다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함