๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš“ Self Study/๐Ÿ”“ Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (๋‹จ์ฒด์‚ฌ์ง„ ์ฐ๊ธฐ, 2017 ์นด์นด์˜ค๋ณธ์„  ์ฝ”๋“œ) C++

by UKHYUN22 2022. 1. 2.
728x90

 

์ฝ”๋”ฉ์œผ๋กœ ์ˆœ์—ด ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ ์นด์šดํŠธ ํ•ด์ฃผ๋Š” ๋ฌธ์ œ๋ฅผ ์ ‘ํ•ด๋ณธ ์ ์ด ์—†์—ˆ๋‹ค. ์†์œผ๋กœ ํ’€์–ด๋ดค๋Š”๋ฐ ์ด๊ฑฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐ๊ฑด์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ์ฒดํฌํ•˜์ง€ ๋ผ๋Š” ์ƒ๊ฐ ๋ฟ์ด์—ˆ๊ณ , ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ž๋‹ค. ๊ฒฐ๊ตญ ๊ตฌ๊ธ€๋ง์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋‹ต์•ˆ์„ ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค.

 next_permutation์„ ์ด์šฉํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์—์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆœ์—ด ์กฐํ•ฉ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. do while ๋ฌธ์„ ํ†ตํ•ด์„œ ์กฐ๊ฑด์ด ์—†๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ์›ํ•˜๋Š” ์กฐ๊ฑด์„ flag๋ฅผ ํ†ตํ•ด์„œ ์นด์šดํŠธํ•  ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—ˆ๋‹ค.

 

 

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

using namespace std;

// ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋‚ด์— ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ๊ผญ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
int solution(int n, vector<string> data) {
    int answer = 0;
    
    // next_permutation ์ˆœ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์—ด์„ ์„ค์ •ํ•œ๋‹ค.
    string friends = "ACFJMNRT";
    
    do {
        bool flag = true;
        
        // ์ด n๊ฐœ์˜ ์กฐ๊ฑด์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.
        for(int i = 0 ; i < n ; i++) {
            int friend1_idx = 0;
            int friend2_idx = 0;
            
            // ์ˆœ์—ด์˜ ๋ฐฐ์—ด ์ค‘ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” Member์˜ index๊ฐ’์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
            for(int j = 0 ; j < friends.size() ; j++) {
                if(friends[j] == data[i][0])
                    friend1_idx = j;
                if(friends[j] == data[i][2])
                    friend2_idx = j;
            }
            
            // gap ๋ณ€์ˆ˜์— ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๋ฉค๋ฒ„๋“ค์ด ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ์žˆ๋Š”์ง€ ๊ณ„์‚ฐํ•ด์ค€๋‹ค.
            int gap = max(friend1_idx-friend2_idx, friend2_idx-friend1_idx)-1;
            
            // ๋งŒ์•ฝ = ํ‘œ์‹œ๊ฐ€ ์žˆ๊ณ  gap์ด ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด flag๋ฅผ false ํ•ด์ค€๋‹ค.
            if(data[i][3] == '=') {
                if(gap != data[i][4] - '0') {
                    flag = false;
                    break;
                }
            }
    
            // ๋งŒ์•ฝ > ํ‘œ์‹œ๊ฐ€ ์žˆ๊ณ  gap์ด ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด flag๋ฅผ false ํ•ด์ค€๋‹ค.
            else if(data[i][3] == '>') {
                if(gap <= data[i][4] - '0') {
                    flag = false;
                    break;
                }
            }
            
            // ๋งŒ์•ฝ < ํ‘œ์‹œ๊ฐ€ ์žˆ๊ณ  gap์ด ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด flag๋ฅผ false ํ•ด์ค€๋‹ค.
            else if(data[i][3] == '<') {
                if(gap >= data[i][4] - '0') {
                    flag = false;
                    break;
                }
            }
        }
        
        // break๋กœ ํƒˆ์ถœํ–ˆ๊ฑด ์•ˆํ–ˆ๊ฑด flag์˜ T/F ์œ ๋ฌด์— ๋”ฐ๋ผ answer๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
        if(flag == true) answer++;
        
    } while(next_permutation(friends.begin(), friends.end()));
    
    
    return answer;
}