#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
 
int solution(string name) 
{
    int answer = 0;
    string start;
    
    for(int i = 0; i < name.size(); i++)
    {
        start += "A";
    }
    
    int nowIdx = 0;
    while(1)
    {   
        answer += min(name[nowIdx] - 'A''Z' - name[nowIdx] + 1);
        start[nowIdx] = name[nowIdx];
        
        if(start == name)
        {
            return answer;
        }
        
        // 1. 왼쪽 이동 횟수 구하기
        int leftIdx = nowIdx;
        int leftCnt = 0;
        
        while(start[leftIdx] == name[leftIdx])
        {
            leftIdx--;
            leftCnt++;
            
            // 왼쪽으로 이동시에 범위를 벗어나는 경우
            if(leftIdx == -1)
            {
                leftIdx = name.size()-1;
            }
        }
        
        // 2. 오른쪽 이동 횟수 구하기
        int rightIdx = nowIdx;
        int rightCnt = 0;
        
        while(start[rightIdx] == name[rightIdx])
        {
            rightIdx++;
            rightCnt++;
            
            // 오른쪽으로 이동시에 범위를 벗어나는 경우
            if(rightIdx == name.size())
            {
                rightIdx = 0;
            }      
        }
        
        // 3. 왼쪽, 오른쪽 중 횟수가 최소인 방향을 선택
        // 왼쪽 선택
        if(leftCnt < rightCnt)
        {
            answer += leftCnt;
            nowIdx = leftIdx;
        }
        // 오른쪽 선택
        else
        {
            answer += rightCnt;
            nowIdx = rightIdx;
        }
    }
}
cs
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
 
vector<string> answer;
vector<pair<stringstring>> new_tickets;
map<intint> visited;
bool flag = false;
 
int check()
{
    for(int i = 0; i < new_tickets.size(); i++)
    {
        if(visited[i] == 0)
        {
            return 0;
        }
    }
    
    return 1;
}
 
void DFS(string start)
{
    if(check() == 1)
    {
        flag = true;
        return;
    }
    
    for(int i = 0; i < new_tickets.size(); i++)
    {
        if(new_tickets[i].first == start && visited[i] == 0)
        {
            visited[i] = 1;
            answer.push_back(new_tickets[i].second);
            DFS(new_tickets[i].second);
            if(flag == true)
            {
                return;
            }
            answer.pop_back();
            visited[i] = 0;
        }
    }
}
 
vector<string> solution(vector<vector<string>> tickets) 
{
    for(int i = 0; i < tickets.size(); i++)
    {
        new_tickets.push_back({tickets[i][0], tickets[i][1]});
    }
    
    // 사전정렬을 위한 오름차순정렬
    sort(new_tickets.begin(), new_tickets.end());
    
    for(int i = 0; i < new_tickets.size(); i++)
    {
        if(new_tickets[i].first == "ICN")
        {
            answer.push_back(new_tickets[i].first);
            DFS(new_tickets[i].first);
            if(flag == true)
            {
                return answer;
            }
            answer.pop_back();
        }  
    }
}
cs
#include <string>
#include <vector>
#include <queue>
#include <map>
using namespace std;
 
vector<string> copy_words;
string copy_target;
 
queue<string> q;
map<stringint> visited;
 
int check(string word, string next)
{
    int cnt = 0;
    
    for(int i = 0; i < word.size(); i++)
    {
        if(word[i] != next[i])
        {
            cnt++;
        }
    }
    
    if(cnt == 1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
void BFS(string begin)
{
    visited[begin= 1;
    q.push(begin);
    
    while(!q.empty())
    {
        string word = q.front();
        q.pop();
        
        if(word == copy_target)
        {
            return;
        }
        
        for(int i = 0; i < copy_words.size(); i++)
        {
            if(check(word, copy_words[i]) == 1 && visited[copy_words[i]] == 0)
            {
                visited[copy_words[i]] = visited[word] + 1;
                q.push(copy_words[i]);
            }         
        }     
    } 
}
 
int solution(string beginstring target, vector<string> words)
{
    copy_words = words;
    copy_target = target;
    
    BFS(begin);
    
    if(visited[target] == 0)
    {
        return 0;
    }
    else
    {
        return visited[target]-1;   
    }
}
cs
#include <string>
#include <vector>
using namespace std;
 
int visited[210= {0};
 
void DFS(int start, vector<vector<int>> computers)
{
    visited[start] = 1;
    
    for(int i = 0; i < computers.size(); i++)
    {
        if(start == i)
        {
            continue;
        }
        
        if(visited[i] == 0 && computers[start][i] == 1)
        {
            visited[i] = 1;
            DFS(i, computers);
        }
    }  
}
 
int solution(int n, vector<vector<int>> computers) 
{
    int answer = 0;
    
    for(int i = 0; i < n; i++)
    {
        if(visited[i] == 1)
        {
            continue;
        }
        else
        {
            DFS(i, computers);
            answer++;
        }
    }
    
    return answer;
}
cs
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;
 
vector<int> solution(vector<string> operations) 
{
    vector<int> answer;
    vector<int> q;
    
    for(int i = 0; i < operations.size(); i++)
    {
        if(operations[i][0== 'I')
        {
            string num = operations[i].substr(2, operations.size()-2);
            q.push_back(stoi(num));
        }
        else if(operations[i][0== 'D')
        {
            if(q.size() == 0)
            {
                continue;
            }
            
            if(operations[i][2== '1')
            {
                // 오름차순
                sort(q.begin(), q.end());
                q.pop_back();
            }
            else if(operations[i][2== '-')
            {
                // 내림차순
                sort(q.begin(), q.end(), greater<int>());
                q.pop_back();
            }
        }  ;
    }
    
    if(q.size() == 0)
    {
        answer.push_back(0);
        answer.push_back(0);
    }
    else
    {
        // 오름차순
        sort(q.begin(), q.end());
        answer.push_back(q[q.size()-1]);
        answer.push_back(q[0]);
    }
    
    return answer;
}
cs
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
 
bool cmp(pair<intint> a, pair<intint> b)
{
    if(a.first > b.first)
    {
        return true;
    }
    else if(a.first == b.first)
    {
        if(a.second < b.second)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
 
vector<int> solution(vector<string> genres, vector<int> plays) 
{
    vector<int> answer;
    vector<string> gName;
    map<stringint> gVisited;
    
    // 1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
    for(int i = 0; i < genres.size(); i++)
    {
        if(gVisited[genres[i]] == 0)
        {
            gName.push_back(genres[i]);
        }
        
        gVisited[genres[i]] += plays[i];
    }
    
    vector<pair<intstring>> gRank;
    for(int i = 0; i < gName.size(); i++)
    {
        gRank.push_back({gVisited[gName[i]], gName[i]});
    }
    // 장르 순서 정렬(오름차순)
    sort(gRank.begin(), gRank.end(), greater<pair<intstring>>());
    
 
    // 2. 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
    // 3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.
    for(int i = 0; i < gRank.size(); i++)
    {
        // 노래 재생횟수 저장
        vector<pair<intint>> reserve;
        
        for(int j = 0; j < genres.size(); j++)
        {
            if(gRank[i].second == genres[j])
            {
                reserve.push_back({plays[j], j});
            }
        }
        
        // 노래 순서 정렬(cmp)
        sort(reserve.begin(), reserve.end(), cmp);
        
        if(reserve.size() == 1)
        {
            answer.push_back(reserve[0].second);
        }
        else
        {
            answer.push_back(reserve[0].second);
            answer.push_back(reserve[1].second);
        }
    }
    
    return answer;
}
cs
#include <iostream>
using namespace std;
 
int solution(int n)
{
    int ans = 0;
    
    while(n > 0)
    {
        if(n % 2 == 0)
        {
            n /= 2;
        }
        else
        {
            n -= 1;
            ans++;
        }
    }
 
    return ans;
}
cs

1.

#include <string>
#include <vector>
#include <math.h>
#include <string.h>
#include <iostream>
using namespace std;
 
vector<char> people;
int visited[8];
int answer;
 
void permutation(string result, vector<string> data, int cnt)
{
    if(cnt == 8)
    {        
        for(int i = 0; i < data.size(); i++)
        {
            int p1Idx, p2Idx;
            
            // result에서, 조건에 있는 두사람의 인덱스를 찾음
            for(int j = 0; j < 8; j++)
            {
                if(result[j] == data[i][0])
                {
                    p1Idx = j;
                }
                else if(result[j] == data[i][2])
                {
                    p2Idx = j;
                }
            }
            
            if(data[i][3== '>')
            {
                if(!(abs(p1Idx-p2Idx)-1 > data[i][4]-'0')) 
                {
                    return;
                }
            }
            else if(data[i][3== '=')
            {
                if(!(abs(p1Idx-p2Idx)-1 == data[i][4]-'0')) 
                {
                    return;
                }
            }
            else if(data[i][3== '<')
            {
                if(!(abs(p1Idx-p2Idx)-1 < data[i][4]-'0'))   
                {
                    return;
                }
            }
        }
        
        answer++;
        
        return;
    }
    
    for(int i = 0; i < 8; i++)
    {
        if(visited[i] == 0)
        {        
            visited[i] = 1;
            permutation(result + people[i], data, cnt+1);
            visited[i] = 0;
        } 
    }
}
 
int solution(int n, vector<string> data) 
{
    // 전역변수 초기화
    people.push_back('A');
    people.push_back('C');
    people.push_back('F');
    people.push_back('J');
    people.push_back('M');
    people.push_back('N');
    people.push_back('R');
    people.push_back('T');
    memset(visited, 0sizeof(visited));
    answer = 0;
    
    permutation("", data, 0);
 
    return answer;
}
cs

 

2.

#include <string>
#include <vector>
#include <math.h>
#include <string.h>
#include <iostream>
using namespace std;
 
typedef struct node
{
    char p1;
    char p2;
    char command;
    int diff;
}node;
 
vector<char> people;
int visited[8];
int answer;
 
void permutation(string result, vector<node> condition, int cnt)
{
    if(cnt == 8)
    {        
        for(int i = 0; i < condition.size(); i++)
        {
            int p1Idx, p2Idx;
            
            // result에서, 조건에 있는 두사람의 인덱스를 찾음
            for(int j = 0; j < result.size(); j++)
            {
                if(result[j] == condition[i].p1)
                {
                    p1Idx = j;
                }
                else if(result[j] == condition[i].p2)
                {
                    p2Idx = j;
                }
            }
            
            if(condition[i].command == '>')
            {
                if(!(abs(p1Idx-p2Idx)-1 > condition[i].diff))   
                {
                    return;
                }
            }
            else if(condition[i].command == '=')
            {
                if(!(abs(p1Idx-p2Idx)-1 == condition[i].diff))
                {
                    return;
                }
            }
            else if(condition[i].command == '<')
            {
                if(!(abs(p1Idx-p2Idx)-1 < condition[i].diff))   
                {
                    return;
                }
            }
        }
        
        answer++;
        
        return;
    }
    
    for(int i = 0; i < 8; i++)
    {
        if(visited[i] == 0)
        {    
            string temp;
            temp += people[i];
            
            visited[i] = 1;
            permutation(result + temp, condition, cnt+1);
            visited[i] = 0;
        } 
    }
}
 
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<string> data) 
{
    // 구조체를 사용할 경우 -> node 포함한 선언은 solution 안에 한 후 초기화해야함
    vector<node> condition;
    
    // 전역변수 초기화
    people.push_back('A');
    people.push_back('C');
    people.push_back('F');
    people.push_back('J');
    people.push_back('M');
    people.push_back('N');
    people.push_back('R');
    people.push_back('T');
    memset(visited, 0sizeof(visited));
    answer = 0;
    
    for(int i = 0; i < data.size(); i++)
    {
        condition.push_back({data[i][0], data[i][2], data[i][3], data[i][4]-'0'});   
    }
    
    permutation("", condition, 0);
 
    return answer;
}
cs

+ Recent posts