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;
}
'프로그래머스 풀이 > Lv 2' 카테고리의 다른 글
프로그래머스 - 짝지어 제거하기(C++) (0) | 2022.12.27 |
---|---|
프로그래머스 - 귤 고르기(C++) (0) | 2022.12.26 |
프로그래머스 - 할인 행사 (C++) (0) | 2022.12.25 |
프로그래머스 - 멀리 뛰기(C++) (0) | 2022.11.22 |
프로그래머스 - 점프와 순간이동 (C++) (0) | 2022.10.17 |