이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

코딩테스트

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

이쿠우우 2022. 3. 20. 12:00
반응형

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

 

코딩테스트 연습 - 단체사진 찍기

단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두

programmers.co.kr

 

글쓴이의 답

개인적인 풀이 임으로

이것보다 더 좋은 알고리즘은 많음...

이렇게도 풀이하는구나.. 공유하기 위해 올림...

 

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

using namespace std;


void permutation(vector<string> &data, vector<char> &temp, int start, int end, int size, int &count)
{
    if (start == size)
    {
        bool result = true;
        
        for(int i=0; i<data.size(); i++){            
            string test = data[i];            
            char check1 = test[0];
            char check2 = test[2];
            char check3 = test[3];
            int distance = test[4] - '0';
            
            vector<char>::iterator iter1 = find(temp.begin(), temp.end(), check1);
            vector<char>::iterator iter2 = find(temp.begin(), temp.end(), check2);
            int location1 = std::distance(temp.begin(), iter1);
            int location2 = std::distance(temp.begin(), iter2);
            int temp_distance = abs(location1 - location2)-1;               
            
            
            if(check3 == '='){
                if (temp_distance != distance){
                    result = false;
                    break;
                }
            }
            else if(check3 == '<'){
                if (temp_distance >= distance){
                    result = false;
                    break;
                }
            }
            else if(check3 == '>'){
                if (temp_distance <= distance){
                    result = false;
                    break;
                }
            }
            
        }
        
        if(result == true){
            count++;
        }       
        
        return;
    }
    
    for(int i = start; i < end; i++)
    {
        swap(temp[start], temp[i]);  
        permutation(data, temp, start + 1, end, size, count);  
        swap(temp[start], temp[i]);  
    }
}


// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) {
    int answer = 0;    
    vector<char> temp = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};        
    permutation(data, temp, 0, 8, 8, answer);
    
    
    return answer;
}




 

꾸준히 하다보면 실력이 늘겠지..

반응형