[프로그래머스] 단체사진찍기

Kim Yuhyeon·2022년 5월 28일
0

알고리즘 + 자료구조

목록 보기
50/161

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

문제


알고리즘 접근 방법

  1. friends = "ACFJMNRT" 를 정렬하는 모든 경우의 수를 구하기
  2. 해당하는 경우에 data조건을 만족하는지 확인한다.
    만족하면 answer+1를 해주는 방식으로 풀면 된다.
    => next_permutation을 사용하는 것이 핵심!
    => string의 find 속성을 알고 인덱스를 구해내는 것도 필요하다.

풀이


#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <math.h>

using namespace std;

bool checkCondition(char opr, int num, int diff) {
        if(opr == '=') 
            return num == diff;
        else if(opr == '>') return diff > num;
        else return diff < num;
}

int solution(int n, vector<string> data) {
    int answer = 0;
    string friends = "ACFJMNRT";
    vector<vector<char>> s;
    sort(friends.begin(), friends.end());
    
    do{
        bool check = true;
        
        for(string text: data){
            int firstIdx = friends.find(text[0]); // N의 위치
            int secondIdx = friends.find(text[2]); // F의 위치
            int diff = abs(firstIdx - secondIdx)-1; // N과 F의 차이 
            cout << diff << endl;
            int num = text[4] - '0'; // 
            if(checkCondition(text[3], num, diff)) continue;
            check = false;
            break;
        }
        if(check) answer++;
    }while(next_permutation(friends.begin(), friends.end()));
    
    return answer;
}

int main() {
    int n = 2;
    vector<string> data = {"N~F=0", "R~T>2"};
    // vector<string> data = {"M~C<2", "C~M>1"};
	solution(n, data);
	return 0;
}

정리

우왕..

💡 참고 포스팅

ddyy094님 블로그

0개의 댓글