알고리즘/알고리즘 문제풀이

프로그래머스 문제풀이

mint* 2023. 3. 17. 23:18
728x90
  1. 혼자 놀기의 달인

 

#include <bits/stdc++.h>

using namespace std;

int visited[104], ret;
vector<int> ans, an;
void dfs(int here,vector<int> cards){
    if(visited[here]) return;
    visited[here]=1;
    int temp = cards[here-1];
    ans.push_back(temp);
    if(!visited[temp]) dfs(temp, cards);
    return;
}

int solution(vector<int> cards) {
    int ret=1;
    for(int i=1;i<=cards.size();i++){
        if(visited[i]) continue;
        dfs(i,cards);
        an.push_back(ans.size()); //크기 저장
        while(!ans.empty()) ans.pop_back();
    }
    //가장 큰 크기 2개 곱해서 답 구하기
    sort(an.begin(), an.end(), greater<int>());
    if(an.size()==1) return 0;
    ret *= an[0];
    ret *= an[1];
  
    return ret;
}

처음엔 못 풀었다.. 문제가 너무 길어서 이해하는 것을 포기했다.. 그러지말자.. 꼭 예제까지 이해하고 풀자..(카카오 문제는 원래 길다..)

  1. 카드 뭉치

 

#include <bits/stdc++.h>

using namespace std;
int c1, c2;
string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
    string answer = "";
    for(int i=0;i<goal.size();i++){
        string s=goal[i];
        if(cards1[c1]==s){
            c1++; 
        }
        else if(cards2[c2]==s){
            c2++;
        }
        else {
            return "No";
        }
    }
    answer="Yes";
    return answer;
}
  1. 두 큐 합 같게 만들기

X

  1. 둘만의 암호

 

#include <bits/stdc++.h>

using namespace std;
int alpa[30];
string solution(string s, string skip, int index) {
    string answer = "";
    fill(alpa, alpa+30, 1);
    for(char sk:skip){ //스킵할 문자는 0 표시
        alpa[sk-'a']=0;
    }
    for(char c:s){
        int cnt=0;
        while(cnt!=index){
            if(c=='z'){ //문자 오버플로우 방지
                c='a'; cnt++;
            }
            else {
                c++; cnt++;
            }
            //스킵 문자는 계속 스킵하기
            if(alpa[c-'a']==0)
            {
                while(alpa[c-'a']==0){
                    if(c=='z') c='a';
                    else c++;
                }
            }
        }
        answer+=c;
    }
    return answer;
}
  1. 압축

X

728x90