본문 바로가기

프로그래머스 풀이/Lv 2

프로그래머스 - 혼자 놀기의 달인 (C++)

728x90

 그냥 미친 빡구현 문제다. 문제 해석이 가장 중요하다.

상자가 열려있는지 확인할 bool 배열한개, map으로 각 상자와 카드번호를 생성한다.

주의해야할 예외사항은

1. 그룹이 1개이면 무조건 0점이다.

2. 각 그룹의 값이 같을 수 있다.

 

혼자서도 잘 노는 범희;;

#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <algorithm>
#define MAX 101
using namespace std;

int solution(vector<int> cards) {
    int answer = 0;
    
    bool open[MAX] = {false,};
    vector<int> group;
    map<int, int> cardbox;
    
    for(int i = 0; i < cards.size(); i++){
        cardbox.insert(make_pair(i + 1, cards[i]));// 1번 박스에 8 1, 8
    }
    int tmp = 1;
    int cnt = 0;
    while(1){    
        int check = -1;

        if(open[tmp] == false){
            open[tmp] = true;
            cnt++;        
            tmp = cardbox[tmp]; // 1
        }
        else{
            cout << tmp << ":" << cnt << endl;
            group.push_back(cnt);
            cnt = 0;
            for(int i = 1; i <= cards.size(); i++){
                if(open[i] == false){
                    tmp = i;
                    check = 1;
                    break;
                }
            }
            if(check != 1){
                break;
            }
        }
    }
    sort(group.begin(), group.end());
      
    if(group.size() > 1)
        answer = group[group.size() - 1] * group[group.size() - 2];
    else if(group.size() == 1)
        answer = 0;
    return answer;
}