[ 더 맵게 ] : < 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;
}
'Algorithm' 카테고리의 다른 글
Programmers - 문자열 압축, 타겟 넘버, 오픈 채팅방 (0) | 2021.06.15 |
---|---|
Programmers - 기능 개발, 짝지어 제거하기, 멀쩡한 사각형 (0) | 2021.06.09 |
Hackerrank - Poker Nim, XOR Strings, Smart Number (0) | 2021.04.20 |
Hackerrank - Introduction to Nim Game, Misère Nim, Nimble Game (0) | 2021.04.14 |
HackkerRank - Sum vs XOR, Game of Stones, Tower Breakers, A Chessboard Game (0) | 2021.04.02 |