Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions 05/14235.c++
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#include <iostream>
#include <queue>

using namespace std;

//산타가 가지고 있는 선물을 가치가 큰 순으로 아이들에게 주기 때문에 priority queue의 Max heap을 사용한다.

int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);

priority_queue<int> pq; //산타가 가장 큰 선물 순서대로 주므로, MAX Heap사용

int n;
cin >> n;

while(n--){
int a;
cin >> a;

if(a==0){ //아이들에게 선물 줄때
if(pq.empty()) cout << -1 << "\n"; //선물 없음
else { //가장 큰 선물 출력 후 삭제
cout << pq.top() << "\n";
pq.pop();
}
}
else{ //거점지에 들렀을때
while(a--){
int present;
cin >> present;

pq.push(present); //선물 가치 pq에 저장
}
}
}

return 0;
}
32 changes: 32 additions & 0 deletions 05/2075.c++
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include <iostream>
#include <queue>

using namespace std;

//n개의 수만큼 입력 받을 때마다 pop을 하여 가장 작은 수를 없앤다.
//priority queue를 사용할 것이기 때문에 min heap으로 만들자.
//priority_queue<int, vector<int>, greate<int>> pq //min heap

int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);

priority_queue<int, vector<int>, greater<int>> pq; //min heap
int n;
cin >> n;

for(int i=0;i<n*n;i++){
int a;
cin >> a;

pq.push(a);
if(pq.size()>n){ //pq의 크기가 n보다 커질 때마다 pop
pq.pop();
}
}

cout << pq.top();

return 0;
}
55 changes: 55 additions & 0 deletions 05/2607.c++
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

//각 단어의 알파벳 빈도수를 vector에 저장한 후, 빈도수를 비교하여 비슷한 단어를 판별한다.

const int WORD = 26;

void countFreq(string s, vector<int>& v){ //알파벳 빈도수 계산
for(int i=0;i<s.length();i++){
v[s[i]-'A']++;
}
}

//기준 알파벳과 알파벳 빈도수 비교
int cmpFreq(vector<int> a, vector<int> b){
int cnt=0;
for(int i=0;i<WORD;i++){
if(a[i]!=b[i]){
cnt += abs(a[i]-b[i]);
}
}
return cnt; //다른 빈도수만큼 반환
}

int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);

int n;
cin >> n;

string a;
cin >> a;
vector<int> a_v(WORD,0);
countFreq(a,a_v);

int ans=0;
for(int i=0;i<n-1;i++){
string b;
cin >> b;
vector<int> b_v(WORD,0);
countFreq(b,b_v);

int cnt = cmpFreq(a_v,b_v);
if(cnt==0||cnt==1||cnt==2&&a.length()==b.length()) ans++;
//빈도수의 차가 0, 1 또는 2인데 길이가 같을때(하나를 바꾸면 같은 경우) 비슷한 단어
}

cout << ans;
return 0;
}