기본 콘텐츠로 건너뛰기

[BOJ 1159] 농구경기 - 초기화조건 조심하기, 한 string내에서 문자 사전순으로 정렬

#include<iostream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;
void swap(string & arr ,int a, int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
void sortThree(string & arr, int front, int mid, int rear){
if (arr[front] > arr[mid]) swap(arr,front,mid);
if (arr[front] > arr[rear]) swap(arr,front,rear);
if (arr[mid] > arr[rear]) swap(arr,mid,rear);
}
void median_of_qsort(string &arr, int front, int rear){
int i,j, pivot, mid = front + (rear - front)/2;
sortThree(arr, front, mid, rear);
if (rear - front + 1 > 3){
pivot = arr[mid];
swap(arr,mid,rear-1);
i = front;
j = rear - 1;
while (true){
while (arr[++i]<pivot && i < rear);
while (arr[--j]>pivot && j > front);
if (i >= j) break;
swap(arr,i,j);
}
swap(arr, i, rear-1);
median_of_qsort(arr,front, i-1);
median_of_qsort(arr, i+1, rear);
}
}
int main(void)
{
int N;
cin >> N;
vector<pair<char,int>> vec;
for (int i=0;i<N;i++)
{
string input;
cin >> input;
bool find = false;
for (int j=0;j<vec.size();j++)
{
if (input[0] == vec[j].first)
{
vec[j].second+=1;
find = true;
break;
}
}
if (find == false)
vec.push_back(make_pair(input[0], 1));
}
bool find = false;
string result="";
for (int i=0;i<vec.size();i++)
{
if (vec[i].second >= 5)
{
result+=vec[i].first;
find = true;
}
}
if (find == true)
{
median_of_qsort(result, 0, result.length()-1);
cout << result;
}
if (find == false)
cout << "PREDAJA";
}
view raw [BOJ 1159] hosted with ❤ by GitHub

댓글

이 블로그의 인기 게시물

Tree traversal의 3가지

1. 전위 순회 (Preorder Traversal) Root -> Left Tree -> Right Tree   ( 루트를 제일 처음에 방문 ) 2. 중위 순회 (Inorder Traversal) Left Tree -> Root -> Right Tree   ( 루트를 중간에 방문 ) 3. 후위 순회 (Postorder Traversal) Left Tree -> Right Tree -> Root   ( 루트를 제일 마지막에 방문 ) <소스코드> 출처 : http://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder /// C program for different tree traversals #include <stdio.h> #include <stdlib.h> /* A binary tree node has data, pointer to left child    and a pointer to right child */ struct node {      int data;      struct node* left;      struct node* right; }; /* Helper function that allocates a new node with the    given data and NULL left and right pointers. */ struct node* newNode(int data) {      struct node* node = (struct node*)                 ...