C++:: 프로그래머스 < 혼자 놀기의 달인 >

jahlee·2023년 5월 15일
0

프로그래머스_Lv.2

목록 보기
45/106
post-thumbnail

주어진 카드 목록들을 서로 연결된 목록들로 묶었을 때 가장 큰묶음 두개의 곱을 반환해주면 되는 문제이다. 문제의 설명이 길어서 이해하기 조금 힘들 수 있지만 예시를 잘 생각해보면 금방 이해할 수 있다.

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> cards)
{
    int n = cards.size();
    vector<bool> vis(n+1, false);
    vector<int> res;
    for(int i=0;i<n;i++)
    {
        int cur = cards[i], cnt = 0;
        while (!vis[cur])
        {//아직 고른 카드가 아니라면
            vis[cur] = true;//골랐음 체크
            cur = cards[cur-1];//현재카드 갱신
            cnt++;개수++
        }
        if (cnt) res.push_back(cnt);//묶음이면 추가
    }
    sort(res.begin(), res.end(), greater<int>());//내림차순 정렬
    if (res.size() > 1) return res[0]*res[1];//묶음이 2개이상이면
    return 0;
}

0개의 댓글