ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 단체사진 찍기 C++
    프로그래머스(Programmers) 2021. 12. 15. 00:37
    반응형

    문제설명

     

     

    예제 입출력

    n                        data                                                                                                                             answer

    2 ["N~F=0", "R~T>2"] 3648
    2 ["M~C<2", "C~M>1"] 0

    예제에 대한 설명

    첫 번째 예제는 문제에 설명된 바와 같이, 네오는 프로도와의 간격이 0이기를 원하고 라이언은 튜브와의 간격이 2보다 크기를 원하는 상황이다.

    두 번째 예제는 무지가 콘과의 간격이 2보다 작기를 원하고, 반대로 콘은 무지와의 간격이 1보다 크기를 원하는 상황이다. 이는 동시에 만족할 수 없는 조건이므로 경우의 수는 0이다.

     

     

    #include <string>
    #include <vector>
    #include <algorithm>
    #include <iostream>
    
    using namespace std;
    
    // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
    int solution(int n, vector<string> data) {
        int answer = 0;  
        string kakao ="ACFJMNRT";
    
        do{
            bool flag  = true;
            for(int i=0; i<n; i++)//제한사항 갯수
            {
                char first = data[i][0]; char second = data[i][2];
                char compare = data[i][3]; int amount = data[i][4]-'0';
                int tmp  = kakao.find(second)-kakao.find(first);
                int distance = abs(tmp) - 1;
            
                
                if(compare == '=')//붙어있는 경우 
                {
                    if(distance == amount)flag = true;
                     else flag = false;
                }
                else if(compare == '<')
                {
                     if(distance < amount)flag = true;
                     else flag = false;
                }
                else if(compare == '>')
                {
                    if(distance > amount)flag = true;
                    else flag = false;
                }
                if(flag)continue;
                else 
                {
                    flag = false;
                    break;
                }
            }
            if(flag)answer++;
        }while(next_permutation(kakao.begin(), kakao.end()));
        
        return answer;
    }

     

    => 사진을 찍을 수 있는 경우의 수는 '순열'의 개수입니다. 

    => 순열의 갯수는 C++ algorithm header에 포함된 next_permutation을 통해 구현할 수 있습니다. 

    => 처음에는 해당 제한사항을 포함한 경우의 수를 구하려 하였으나, 생각을 바꿨습니다. 

    => CONCEPT : "순열을 구하며 제한사항에 해당하는 경우만 answer의 개수를 올려주는 것"입니다. 

    => 위의 CONCEPT을 따라 코딩을 하다 보면 위의 코드와 같이 작성하게 됩니다.

    => find 함수를 통해 내가 찾는 녀석이 어디에 위치한 지 알아내고 둘의 거리를 구해야 합니다. (절댓값 필수)

    => 주어진 기호에 따라 주어진 녀석들의 거리가 제한사항과 맞닿아있는지 확인하며 bool값을 확인합니다.

    => 맞는 경우에만 answer의 값을 증가시켜주면 됩니다.

     

     

    IDE를 활용해 디버깅해본 장면 

    *최대한 IDE를 안 써야 하는데 계속 쓰게 됩니다... ㅠㅠ

    반응형

    '프로그래머스(Programmers)' 카테고리의 다른 글

    멀쩡한 사각형 C++  (0) 2021.12.17
    내적 C++  (0) 2021.12.15
    크레인 인형뽑기 게임  (0) 2021.12.14
    없는 숫자 더하기  (0) 2021.12.11
    문자열 압축  (0) 2021.12.10

    댓글

Designed by Who.