티스토리 뷰
#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에 대해 반복하여 수행해준다.
'프로그래머스 > 2레벨' 카테고리의 다른 글
[프로그래머스 2레벨] 교점에 별 만들기 (C++) (0) | 2025.06.14 |
---|---|
[프로그래머스 2레벨] 아날로그 시계 (C++) (0) | 2025.06.12 |
[프로그래머스 2레벨] 카카오프렌즈 컬러링북 (C++) (0) | 2025.06.09 |
[프로그래머스 2레벨] 충돌위험 찾기 (C++) (0) | 2025.06.08 |
[프로그래머스 2레벨] 유사 칸토어 비트열 (C++) (0) | 2025.06.07 |