알고리즘/프로그래머스

2017 카카오코드 본선 - 단체사진 찍기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


중요개념

  • next_permutaion(배열의 시작주소, 끝 주소) : 순열을 구해준다, algorithm 헤더
#include <vector>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

bool pos_check(vector<char> s, vector<string> data) {
	for (int i = 0; i < data.size(); i++) {
		int first;
		int second;
		int num = data[i][4] - '0';
		for (int j = 0; j < 8; j++) {
			if (data[i][0] == s[j]) {
				first = j;
			}
			if (data[i][2] == s[j]) {
				second = j;
			}
		}
		if (data[i][3] == '=') {
			if (abs(second - first)-1 != num) {
				return false;
			}
		}
		else if (data[i][3] == '>') {
			if (abs(second - first)-1 <= num) {
				return false;
			}
		}
		else if (data[i][3] == '<') {
			if (abs(second - first)-1 >= num) {
				return false;
			}
		}
	}
	return true;
}
int solution(int n, vector<string> data) {
	vector<char> s = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
	int answer = 0;
	do {
		if (pos_check(s, data)) {
			answer++;
		}
	} while (next_permutation(s.begin(), s.end()));
	return answer;
}

int main() {
	int n = 2;
	vector<string> data = {"N~F=0", "R~T>2"};
	cout<<solution(n, data);
}
/*
1. 순열구한다
2. 조건을 다 대입한다.
3. 같을 조건, 클조건, 작을조건 if로 나타내기
4. tur false체크는 함수로적을 것
5. 간격이란 = 일때 s-f -1 일 때 간격이다
6. > 이면 
*/