-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
05 우선순위큐 #5
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "05_\uC6B0\uC120\uC21C\uC704\uD050"
05 우선순위큐 #5
Changes from all commits
680a0b8
d597918
b3b8160
dae8a6d
c161cf9
7a26458
dc7e8b0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"files.associations": { | ||
"vector": "cpp" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#include <iostream> | ||
|
||
using namespace std; | ||
|
||
bool isEmpty(vector<int> & heap){ | ||
return heap.size()==1; | ||
|
||
} | ||
|
||
void push(int x, vector<int>&heap){ | ||
int idx=heap.size(); | ||
heap.push_back(x); | ||
while(heap[idx], heap[idx/2]){ | ||
swap(heap[idx], heap[idx/2]); | ||
idx/=2; | ||
} | ||
return; | ||
} | ||
|
||
int pop(vector<int> &heap){ | ||
int itemp=heap[1]; | ||
|
||
heap[1]=heap[heap.size()-1]; | ||
heap.pop_back(); | ||
|
||
int size=heap.size(); | ||
int parent=1, child=2; | ||
while(){ | ||
if(child+1<size&&heap[child+1]>heap[child]){ | ||
child++; | ||
} | ||
if(child[]) | ||
} | ||
|
||
} | ||
|
||
int main() | ||
{ | ||
cout<<"Hello World"; | ||
|
||
int n, x; | ||
cin>> n; | ||
while(n--){ | ||
cin>>x; | ||
if(x==0){ | ||
//head이 비어있는지 확인 | ||
if(isEmpty(heap_vec)){ | ||
cout<<"0\n"; | ||
} | ||
else{ | ||
cout<<pop(heap_vec)<<"\n"; | ||
|
||
} | ||
} | ||
//x가 0이 아닌 자연수일경우 | ||
else{ | ||
|
||
} | ||
} | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#include <iostream> | ||
#include <queue> | ||
|
||
using namespace std; | ||
|
||
int main() | ||
{ | ||
priority_queue<int> pq; | ||
vector<int> ans; | ||
int n, a; | ||
int k; | ||
cin>>n; | ||
for(int i=0; i<n; i++){ | ||
cin>>k; | ||
if(k!=0){//a값을 입력받는 경우 | ||
a=k; | ||
for(int j=0; j<a; j++){ | ||
cin>>k; | ||
pq.push(k); | ||
} | ||
} | ||
else{ | ||
if(!(pq.empty())){ | ||
ans.push_back(pq.top()); | ||
pq.pop(); | ||
} | ||
else{ | ||
ans.push_back(-1); | ||
} | ||
} | ||
} | ||
|
||
for(int i=0; i<ans.size(); i++){ | ||
cout<<ans[i]<<"\n"; | ||
} | ||
Comment on lines
+33
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 연산을 진행하며 vector에 결과값을 저장해서 한번에 출력하는 지금의 방식도 좋지만 하나하나 진행할동안 바로 출력해줘도 좋을 것 같아요! |
||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#include <iostream> | ||
#include <queue> | ||
|
||
using namespace std; | ||
|
||
int main() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3. 문제 조건에 맞게 잘 구현해주셨네요! |
||
{ | ||
ios_base::sync_with_stdio(false);//이거 안해줬더니 시간 초과 | ||
cin.tie(0); | ||
|
||
int n, k; | ||
cin>>n; | ||
|
||
priority_queue< int, vector<int>, greater<int> > pq; | ||
for(int i=0; i<n*n; i++){ | ||
cin>>k; | ||
pq.push(k); | ||
if(pq.size()>n){//pq에서 안빼줬더니 메모리 초과 발생했었다. | ||
pq.pop(); | ||
} | ||
} | ||
cout<<pq.top(); | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
#include <iostream> | ||
#include <vector> | ||
|
||
using namespace std; | ||
const int NUM_CHARS = 26;//알파벳 개수 | ||
|
||
/* | ||
* 원본 단어와의 차이의 개수를 센다. | ||
*/ | ||
|
||
/* | ||
* [비슷한 단어] | ||
* | ||
* 단어가 같은 구성일 조건 | ||
* 1. 두 개의 단어가 같은 종류의 문자로 이루어짐 | ||
* 2. 같은 문자는 같은 개수만큼 있음 | ||
* | ||
* 비슷한 단어의 조건 | ||
* 1. 한 단어에서 한 문자를 더하거나, 빼면 같은 구성이 됨 | ||
* -> 두 단어에서 다른 문자의 개수가 총 1개 | ||
* 2. 한 단어에서 한 문자를 바꾸면 같은 구성이 됨 | ||
* -> 두 단어에서 다른 문자의 개수가 총 2개 | ||
* -> !주의! 이때, 두 단어의 길이가 같아야 함 cf) doll | do | ||
*/ | ||
|
||
// 각 알파벳의 개수 세기 | ||
void countFreq(string word, vector<int> &freq) {//참조변수로 벡터 이용 | ||
for (int i = 0; i < word.length(); i++) { | ||
freq[word[i] - 'A']++; //알파벳 위치를 A부터 index 0으로 두고 저장하기 | ||
} | ||
} | ||
|
||
int countDiff(string word, vector<int> original_freq) { | ||
vector<int> freq(NUM_CHARS, 0); | ||
int diff = 0; // 원본 단어와의 차이 | ||
|
||
countFreq(word, freq); // 각 알파벳의 개수 세기 | ||
|
||
// 원본 단어와 다른 알파벳 개수 구하기 | ||
for (int i = 0; i < NUM_CHARS; i++) { | ||
diff += abs(original_freq[i] - freq[i]);//알파벳 인덱스의 개수가 서로 다르면 다른만큼 차 증가 | ||
} | ||
return diff; | ||
} | ||
|
||
int main() { | ||
int N, ans=0; | ||
string original; | ||
// 입력 | ||
cin >> N; | ||
cin >> original; | ||
vector<int> original_freq(NUM_CHARS, 0); | ||
|
||
// 연산 | ||
countFreq(original, original_freq); | ||
|
||
for (int i = 1; i < N; i++) { | ||
string word; | ||
cin >> word; | ||
|
||
int diff = countDiff(word, original_freq);//입력받은 단어와 original 단어의 다른 알파벳 개수 구하기 | ||
// 비슷한 단어 세기 | ||
if (diff == 0 || diff == 1 || diff == 2 && original.length() == word.length()) {//diff가 0,1거나 2면서 두 단어의 길이가 같은경우 | ||
ans++;//비슷한 단어로 취급 | ||
} | ||
} | ||
// 출력 | ||
cout << ans; | ||
return 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2. k와 a를 다른 변수로 사용하는 게 좋아요! k로 입력받았으면 반복문의 범위를
for (int j=0; j<k; j++)
로 두고 반복문 안에서 a를 입력받아 pq에 삽입해주세요~!