단체사진 찍기

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

이문제 못풀었음.

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

using namespace std;
//"N~F=0", "R~T>2"

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


	return answer;
}



int main()
{
	int n = 2;
	vector<string> vTemp = { "N~F=0", "R~T>2" };

	int vResult = solution(n, vTemp);



	return 0;
}
  1. do{}while(next_permutation))구조 내에서
    do 내에 문제조건의 for문만큼 반복문 확인

  2. 첫째 문자와 둘째 문자 간격을 구하는데,

  3. 그간격이 = , < , > 조건에 안맞으면 flag = false 준다.

문제좋았음.

좋은 웹페이지 즐겨찾기