#include <string>
#include <vector>
#include <math.h>
#include <map>
using namespace std;
 
vector<char> input;
string result;
int visited[7];
int answer;
map<intint> m;
 
int is_prime(int n)
{
    if(n == 1)
    {
        return 0;
    }
    
    for(int i = 2; i <= sqrt(n); i++)
    {
        if(n % i == 0)
        {
            return 0;
        }
    }
    
    return 1;
}
 
void DFS(int cnt)
{
    if(cnt == input.size()+1)
    {
        return;
    }
    
    if(cnt >= 1)
    {
        // 중복허용 X
        if(is_prime(stoi(result)) == 1 && m[stoi(result)] == 0)
        {
            m[stoi(result)] = 1;
            answer++;
        }
    }
    
    for(int i = 0; i < input.size(); i++)
    {
        if(cnt == 0 && input[i] == '0')
        {
            continue;
        }
        
        if(visited[i] == 0)
        {
            visited[i] = 1;
            result += input[i];
            DFS(cnt+1);
            result.erase(result.size()-11);   
            visited[i] = 0;
        }
    }
}
 
int solution(string numbers) 
{   
    for(int i = 0; i < numbers.size(); i++)
    {
        input.push_back(numbers[i]);
    }
    
    DFS(0);
    
    return answer;
}
cs
#include <string>
#include <vector>
using namespace std;
 
string solution(string number, int k) 
{
    // 앞이 뒤보다 작을 경우 삭제 -> 앞쪽에 큰 수를 만들어주기위해
    int cnt = 0;
    for(int n = 1; n <= k; n++)
    {      
        for(int i = 0; i < number.size()-1; i++)
        {
           if(number[i] < number[i+1])
            {
                number.erase(i, 1);
                cnt++;
                break;
            }
        }   
    }
    
    // 삭제할 개수가 남은 경우 -> 뒤에서 남은 개수만큼 삭제
    if(cnt != k)
    {
        number.erase(number.size()-1-(k-cnt-1), k-cnt);
    }
 
    return number;
}
cs
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
 
int solution(vector<int> priorities, int location) 
{
    queue<pair<intint>> q;
    
    // 우선순위, 인덱스
    for(int i = 0; i < priorities.size(); i++)
    {
        q.push({priorities[i], i});
    }
    
    // 최댓값을 구하기 위해 정렬
    sort(priorities.begin(), priorities.end());
    
    int cnt = 1;
    while(!q.empty())
    {
        int cmp = q.front().first;
        int cmpIdx = q.front().second;
        
        // 맨 앞 대기목록이 쵀댓값이 아닌 경우, 맨 뒤로
        if(cmp < priorities[priorities.size()-1])
        {
            pair<intint> temp = q.front();
            q.pop();
            q.push(temp);
        }
        // 맨 앞 대기목록이 최댓값인 경우
        else
        {
            // 찾는 location인 경우
            if(cmpIdx == location)
            {
                break;
            }
            // 찾는 location이 아닌 경우
            else
            {
                q.pop();
                priorities.pop_back();
                cnt++;
            }
        }
    }
    
    return cnt;
}
cs
#include <string>
#include <vector>
using namespace std;
 
vector<int> solution(vector<int> heights) 
{
    vector<int> answer;
    vector<int> reverse_answer;
    
    // 거꾸로 대입(뒤 -> 앞)
    for(int i = heights.size()-1; i > 0; i--)
    {
        int flag = 0;
        for(int j = i-1; j >= 0; j--)
        {
            if(heights[i] < heights[j])
            {
                flag = 1;
                reverse_answer.push_back(j+1);
                break;
            }   
        }
        
        if(flag == 0)
        {
            reverse_answer.push_back(0);
        }
    }
    // 첫번째는 무조건 0 대입
    reverse_answer.push_back(0);
    
    // 거꾸로 대입했기 때문에 다시 reverse
    for(int i = reverse_answer.size()-1; i >= 0; i--)
    {
        answer.push_back(reverse_answer[i]);
    }
    
    return answer;
}
cs
#include <string>
#include <vector>
using namespace std;
 
string solution(int n) 
{
    string answer = "";
    string num = to_string(n);
    char pattern[3= {'4''1''2'};
    int digit[100];
    int cnt = 0;
    
    for(int i = 0; n > 0; i++)
    {
        digit[i] = n % 3;
        n /= 3;
        cnt++;
        
        if(digit[i] == 0)
        {
            n--;
        }
        
        answer = pattern[digit[i]] + answer;
    }
    
    // for(int i = cnt-1; i >= 0; i--)
    // {
    //     answer += pattern[digit[i]];
    // }
 
    return answer;
}
cs
#include <string>
#include <vector>
using namespace std;
 
vector<int> solution(vector<int> prices) 
{
    vector<int> answer;
    
    for(int i = 0; i < prices.size()-1; i++)
    {
        int changeIdx;
        for(int j = i+1; j < prices.size(); j++)
        {
            // 떨어지는 경우
            if(prices[i] > prices[j])
            {
                changeIdx = j;
                break;
            }
            
            // 끝까지 가격이 떨어지지 않는 경우
            if(j == prices.size()-1)
            {
                changeIdx = j;
            }
        }
        
        answer.push_back(changeIdx-i);
    }
    
    // 마지막은 무조건 0초 동안 떨어지지 않음
    answer.push_back(0);
    
    return answer;
}
cs
#include <string>
#include <vector>
using namespace std;
 
vector<int> solution(vector<int> progresses, vector<int> speeds) 
{
    vector<int> answer;
    int visited[100= {0};
    
    while(1)
    {
        int cnt = 0;
        
        for(int i = 0; i < progresses.size(); i++)
        {
            progresses[i] += speeds[i];
        }        
        
        for(int i = 0; i < progresses.size(); i++)
        {
            if(progresses[i] >= 100 && visited[i] == 0)
            {
                visited[i] = 1;
                cnt++;
            }
            else if(progresses[i] >= 100 && visited[i] == 1)
            {
                continue;
            }
            else
            {
                break;
            }
        }
        
        if(cnt >= 1)
        {
            answer.push_back(cnt);   
        }
        
        int flag = 0;
        for(int i = 0; i < progresses.size(); i++)
        {
            if(visited[i] == 0)
            {
                flag = 1;
                break;
            }
        }
        
        if(flag == 0)
        {
            break;
        }
    }
 
    return answer;
}
cs
#include <string>
#include <vector>
using namespace std;
 
int solution(string skill, vector<string> skill_trees) 
{
    int answer = 0;
    
    for(int i = 0; i < skill_trees.size(); i++)
    {
        string check;
        
        for(int j = 0; j < skill_trees[i].size(); j++)
        {
            for(int k = 0; k < skill.size(); k++)
            {
                // 스킬에서 찾은 경우
                if(skill_trees[i][j] == skill[k])
                {
                    check += skill_trees[i][j];
                    break;
                }
            }
        }
        
        // 순서 확인
        int flag = 0;
        for(int j = 0; j < check.size(); j++)
        {
            if(check[j] != skill[j])
            {
                flag = 1;
                break;
            }
        }
        
        if(flag == 0)
        {
            answer++;
        }
    }
    
    return answer;
}
cs

+ Recent posts