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
27 changes: 27 additions & 0 deletions Moonchaeyeon/11279_최대 힙.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include <iostream>
#include <queue>
using namespace std;
int N;

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

cin >> N;
priority_queue<int> pq;
int num;
for (int i = 0; i < N; i++) {
cin >> num;
if (num) // 0�� �ƴ� ���ڰ� �ԷµǾ��ٸ�
pq.push(num);
else { // 0�� �ԷµǾ��ٸ�
if (pq.size()) { // ���̰� 0�� �ƴ϶��
cout << pq.top() << '\n';
pq.pop();
}
else cout << 0 << '\n'; // ���̰� 0�� ��
}
}

return 0;
}
47 changes: 47 additions & 0 deletions Moonchaeyeon/11286_절댓값 힙.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#include <iostream>
#include <functional>
#include <queue>
using namespace std;
int N;

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

priority_queue<int, vector<int>, greater<int>> positive; // �ּ� ��
priority_queue<int> negative; // �ִ� ��
cin >> N;

int num;
for (int i = 0; i < N; i++) {
cin >> num;

// 1) ����� ��
if (num > 0) positive.push(num);

// 2) ������ ��
else if (num < 0) negative.push(num);

// 3) 0�� ��
else {
if (negative.size()) { // ������ ���� ��
if (positive.size() && (positive.top() < -negative.top())) { // ����� �����ϰ�, ����� ������ �� �۴ٸ� -> ����� print/pop
cout << positive.top() << '\n';
positive.pop();
}
else { // ����� �������� �ʰų�, ������ ������ �� �۰ų� ���ٸ� -> ���� print/pop
cout << negative.top() << '\n';
negative.pop();
}
}
else { // ������ �������� ���� ��
if (positive.size()) { // ����� �����Ѵٸ� -> ��� print/pop
cout << positive.top() << '\n';
positive.pop();
}
else cout << 0 << '\n'; // �ƹ��͵� �������� �ʴ´ٸ� -> 0 print
}
}
}
return 0;
}
43 changes: 43 additions & 0 deletions Moonchaeyeon/1158_요세푸스 문제.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
unsigned int N, K;

int main() {
cin >> N >> K;

queue<int> peopleArr;
vector<int> yoseArr;

// �ʱⰪ setting
for (int i = 1; i <= N; i++)
peopleArr.push(i);

int turn = 1 % K;
while (peopleArr.size() > 0) { // ���� ���� : ���� ����� 0�� �̻��϶����� ���� ����
if (turn != 0) {
peopleArr.push(peopleArr.front()); // �ٽ� �迭�� �߰���Ŵ
}
else { // ���� �� �����̸�
yoseArr.push_back(peopleArr.front()); // yoseArr�� ����
}
peopleArr.pop(); // ������ ���Ҹ� ����

turn ++;
turn = turn % K;
}

// result ���
cout << "<";
for (int i = 0; i < yoseArr.size(); i++) {
if (i != 0) {
cout << ", ";
}
cout << yoseArr[i];
}
cout << ">";


return 0;
}
43 changes: 43 additions & 0 deletions Moonchaeyeon/15903_카드 합체 놀이.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#include <iostream>
#include <queue>
#include <functional>
using namespace std;
int n, m;

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

priority_queue<unsigned long long, vector<unsigned long long>, greater<unsigned long long>> cards;
int i;

cin >> n >> m;

long long c;
for (i = 0; i < n; i++) {
cin >> c;
cards.push(c);
}

unsigned long long min1, min2, plus;
for (i = 0; i < m; i++) {
min1 = cards.top();
cards.pop();
min2 = cards.top();
cards.pop();
plus = min1 + min2;
cards.push(plus);
cards.push(plus);
}

int len = cards.size();
unsigned long long result = 0;
for (i = 0; i < len; i++) {
result += cards.top();
cards.pop();
}

cout << result << '\n';

return 0;
}
64 changes: 64 additions & 0 deletions Moonchaeyeon/17413_단어 뒤집기 2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include <iostream>
#include <string>
#include <stack>
using namespace std;
enum Mode { WORD, TAG, TAG_START, TAG_END, RESET };
string S;

int main() {
getline(cin, S);
string result;
Mode mode = WORD;
stack<int> wordContainer;
for (int i = 0; i < S.length(); i++) {
char c = S[i];
switch (c) {
case '<':
mode = TAG_START;
break;
case '>':
mode = TAG_END;
break;
case ' ':
if (mode != TAG && mode != TAG_START) mode = RESET;
else mode = TAG;
break;
default:
if (mode != TAG && mode != TAG_START) mode = WORD;
else mode = TAG;
break;
}

switch (mode) {
case RESET:
case TAG_START:
// stack�� ��Ƴ��� �ܾ ������ result�� ����
while (wordContainer.size()) {
result += wordContainer.top();
wordContainer.pop();
}
result += c;
break;
case TAG_END:
result += c;
mode = WORD;
break;
case TAG:
result += c;
break;
case WORD:
wordContainer.push(c); // �Ųٷ� �����ϱ� ���Ͽ� stack�� �ܾ��� �� ���ھ� ����
break;
}
}

// stack�� ��Ƴ��� �ܾ ������ result�� ����
while (wordContainer.size()) {
result += wordContainer.top();
wordContainer.pop();
}

cout << result << '\n';

return 0;
}
41 changes: 41 additions & 0 deletions Moonchaeyeon/1966_프린터 큐.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
unsigned int NT, N, M;

int main() {
cin >> NT; // test case ����
for (int i = 0; i < NT; i++) {
cin >> N >> M;
queue<vector<int>> priority_info; // [idx, priority] list�� ����
priority_queue<int> max_priorityq; // �켱����

for (int idx = 0; idx < N; idx++) { // priority�� �޾ƿ�
vector<int> idx_priority(2);
int p;
cin >> p;
idx_priority[0] = idx;
idx_priority[1] = p;
priority_info.push(idx_priority);
max_priorityq.push(p);
}

int printNum = 0;
while (priority_info.size()) {
vector<int> currItem = priority_info.front();
if (currItem[1] == max_priorityq.top()) { // ���� �켱������ ���� ��
printNum++; // print ��Ŵ
max_priorityq.pop();
if (currItem[0] == M) break; // ���� ã���� �ϴ� �������� ��������� ����
}
else {
priority_info.push(currItem); // �ڿ� ����
}
priority_info.pop(); // �������� �����ϱ�
}
cout << printNum << '\n';
}

return 0;
}
119 changes: 119 additions & 0 deletions Moonchaeyeon/1991_트리 순회.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
#include <iostream>
#include <vector>;
using namespace std;
int N;

template <typename T>
class Node {
private:
T value;
Node* left;
Node* right;
Node* root;
public:
Node() : value(NULL), left(nullptr), right(nullptr), root(nullptr) {};
Node(T _value) : value(_value), left(nullptr), right(nullptr), root(nullptr) {};
Node(T _value, Node* _left, Node* _right) : value(_value), left(_left), right(_right), root(nullptr) {
if (_left != nullptr)
_left->root = this;
if (_right != nullptr)
_right->root = this;
};

void SetValue(T _value) { this->value = _value; }
void SetLeft(Node* node) {
this->left = node;
if (node != nullptr)
node->SetRoot(this);
}
void SetRight(Node* node) {
this->right = node;
if (node != nullptr)
node->SetRoot(this);
}
void SetRoot(Node* node) { this->root = node; }
Node* GetLeft() { return left; }
Node* GetRight() { return right; }
T GetValue() { return value; }
};

// Node �
template <typename T>
void FindNode(Node<T>* node, T value, Node<T>*& result, bool& found) {
if (node != nullptr && !found) {
if (node->GetValue() == value) {
result = node;
found = true;
}
else {
FindNode(node->GetLeft(), value, result, found);
FindNode(node->GetRight(), value, result, found);
}
}
}

// ���� ��ȸ (��Ʈ) (���� �ڽ�) (������ �ڽ�)
template <typename T>
void Preorder(Node<T>* node) {
if (node != nullptr) {
cout << node->GetValue();
Preorder(node->GetLeft());
Preorder(node->GetRight());
}
}

// ���� ��ȸ (���� �ڽ�) (��Ʈ) (������ �ڽ�)
template <typename T>
void Inorder(Node<T>* node) {
if (node != nullptr) {
Inorder(node->GetLeft());
cout << node->GetValue();
Inorder(node->GetRight());
}
}

// ���� ��ȸ (���� �ڽ�) (������ �ڽ�) (��Ʈ)
template <typename T>
void Postorder(Node<T>* node) {
if (node != nullptr) {
Postorder(node->GetLeft());
Postorder(node->GetRight());
cout << node->GetValue();
}
}

int main() {
cin >> N;

Node<char>* root = nullptr;
char root_v, left_v, right_v;

for (int i = 0; i < N; i++) {
Node<char>* currNode;
Node<char>* left;
Node<char>* right;

cin >> root_v >> left_v >> right_v;

left = ((left_v != '.') ? new Node<char>(left_v) : nullptr);
right = ((right_v != '.') ? new Node<char>(right_v) : nullptr);

if (i == 0) // ù��° ������ ��
root = new Node<char>(root_v, left, right);
else { // ù��° ������ �ƴ� ��
bool found = false;
FindNode(root, root_v, currNode, found);
currNode->SetLeft(left);
currNode->SetRight(right);
}
}

Preorder(root);
cout << '\n';
Inorder(root);
cout << '\n';
Postorder(root);
cout << '\n';

return 0;
}
Loading