본문으로 바로가기

[ 더 맵게 ] : < LV2 / 14814명 >

더보기
#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(vector<int> scoville, int K)
{
    int answer = 0;
    // 우선순위 큐 생성(오름차순)
    priority_queue<int, vector<int>, greater<int>> pq;
    //
    int count = scoville.size();
    for(int i = 0; i < count; ++i)
        pq.push(scoville[i]);
    //
    while(pq.top() < K && pq.size() > 1)
    {
        int newSco = 0;
        newSco += pq.top();
        pq.pop();
        newSco += (pq.top() * 2);
        pq.pop();
        //
        if(newSco < K && pq.size() == 0)
            return -1;
        //
        pq.push(newSco);
        //
        ++answer;
	}
    //
    return answer;
}

# priority_queue ( Heap )

  - push( data ) 후 정렬상태 유지 ( O(LogN) )

  - top( ) : top에 저장된 data 반환, pop ( ) : top 제거

 


단체사진 찍기 ] : < LV2 / 1343명 >

더보기
#include <string>
#include <vector>
#include <algorithm> // vector.find(), next_permutation()
#include <cmath> // abs()

using namespace std;

bool Check(vector<char> v, int n, vector<string> data)
{
    for(int i = 0; i < n; ++i)
    {
        char c1 = data[i][0];
        char c2 = data[i][2];
        char sign = data[i][3];
        int dist_condition = data[i][4] - '0';
        //
        int i1 = find(v.begin(), v.end(), c1) - v.begin();
        int i2 = find(v.begin(), v.end(), c2) - v.begin();
        int dist_value = abs(i1 - i2) - 1;
        //
        switch(sign)
        {
            case '=':
            {
                if(dist_value != dist_condition)
                    return false;
            }
            break;
            case '>':
            {
                if(dist_value <= dist_condition)
                    return false;
            }
            break;
            case '<':
            {
                if(dist_value >= dist_condition)
                    return false;
            }
            break;
        }
    }
    //
    return true;
}

int solution(int n, vector<string> data)
{
    int answer = 0;
    // Set Array
    vector<char> v = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
    // Get Combination & Check Condition
    do
    {
        if(Check(v, n, data) == true)
            ++answer;
    } while(next_permutation(v.begin(), v.end()));
    //
    return answer;
}

# algorithm

  1. index 찾기

      - vector.find(begin, end, value) - begin

      - 반환값이 iterator이므로 begin과 연산

      - 범위 내에 value가 없을 시 end 반환

  2. next_permutation(begin, end) : 순열 생성

 


124 나라의 숫자 ] : < LV2 / 12859명 >

더보기
#include <string>
#include <vector>
#include <algorithm> // reverse()

using namespace std;

string solution(int n)
{
    string answer = "";
    string s = "";
    while(n > 0)
    {
        int mod = n % 3;
        if(mod == 0)
            s += '4';
        else
            s += to_string(mod);
        //
        --n;
        n /= 3;
    }
    reverse(s.begin(), s.end());
    //
    answer = s;
    return answer;
}