기본 콘텐츠로 건너뛰기

1931 : 회의실배정(미제) (Greedy) [C++]

#include <iostream>
#include <vector>
#include <utility>

using namespace std;

class Conference
{
private:
 vector<pair<int,int>> Conferences;
 int N;
public:
 Conference(int n);
 int GetMostTime();
 void QuickSort(int order, int left, int right);
};

Conference::Conference(int n)
{
 N = n;
 for (int i = 0; i < N; i++)
 {
  pair<int,int> Temp = make_pair(0, 0);
  cin >> Temp.first;
  cin >> Temp.second;
  Conferences.push_back(Temp);
 }

 QuickSort(0, 0, Conferences.size() - 1);
 for (int i = 0; i < Conferences.size(); i++)
 {
  for (int j = i + 1; j < Conferences.size(); j++)
  {
   if (Conferences[i].first == Conferences[j].first)
    continue;
   else
   {
    if (i == j + 1)
     break;
    else
    {
     QuickSort(1, i, j);
     break;
    }
   }
  }
 }

 for (int i = 0; i < N; i++)
  cout << Conferences[i].first << " " << Conferences[i].second << endl;
}

int Conference::GetMostTime()
{
 int MostTime = 0;
 for (int i = 0; i < Conferences.size(); i++)
 {
  int Second = Conferences[i].second;
  int Time = 1;
  for (int j = i + 1; j < Conferences.size(); j++)
  {
   if (Conferences[i].first == Conferences[j].first)
    continue;
   else if (Second <= Conferences[j].first)
   {
    Second = Conferences[j].second;
    Time++;
   }
  }
  if (Time > MostTime)
   MostTime = Time;
 }
 
 return MostTime;
}

void Conference::QuickSort(int order, int left, int right)
{
 int i, j, key;
 pair<int, int> Temp = make_pair(0,0);
 if (left < right)
 {
  i = left + 1;
  j = right;
  if(order == 0)
   key = Conferences[left].first;
  else
   key = Conferences[left].second;
  while (i < j)
  {
   if (order == 0)
   {
    while (Conferences[i].first < key)
    {
     i++;
     if (i == Conferences.size())
      break;
    }
   }
   else
   {
    while (Conferences[i].second < key)
    {
     i++;
     if (i == Conferences.size())
      break;
    }
   }
   if (order == 0)
   {
    while (Conferences[j].first > key)
    {
     j--;
     if (j == 0)
      break;
    }
   }
   else
   {
    while (Conferences[j].second > key)
    {
     j--;
     if (j == 0)
      break;
    }
   }

   if (order == 0)
   {
    if (i < j)
    {
     Temp = Conferences[i];
     Conferences[i] = Conferences[j];
     Conferences[j] = Temp;
    }
   }
   else
   {
    if (i < j)
    {
     
     int temp = Conferences[i].second;
     Conferences[i].second = Conferences[j].second;
     Conferences[j].second = temp;
    }
   }
  }

  if (order == 0)
  {
   Temp = Conferences[left];
   Conferences[left] = Conferences[j];
   Conferences[j] = Temp;
  }
  else
  {
   int temp = Conferences[left].second;
   Conferences[left].second = Conferences[j].second;
   Conferences[j].second = temp;
  }
  QuickSort(order,left, j - 1);
  QuickSort(order,j + 1, right);
 }
}
 
int main()
{
 int N;
 cin >> N;

 Conference C(N);
 cout << C.GetMostTime();
}

댓글

이 블로그의 인기 게시물

1978 : 소수 찾기 [C++]

# include < iostream > # include < vector > using namespace std ; int main ( ) { cin . tie ( NULL ) ; vector < int > Primes ; Primes . push_back ( 2 ) ; Primes . push_back ( 3 ) ; for ( int i = 4 ; i < 1000 ; i + + ) { bool IsPrime = true ; if ( i % 2 = = 0 | | i % 3 = = 0 ) continue ; for ( int j = 4 ; j < i ; j + + ) { if ( i % j = = 0 ) { IsPrime = false ; break ; } } if ( IsPrime ) Primes . push_back ( i ) ; } int N , Count = 0 ; cin > > N ; for ( int i = 0 ; i < N ; i + + ) { int Input ; cin > > Input ; for ( int j = 0 ; j < Primes . size ( ) ; j + + ) if ( Input = = Primes [ j ] ) Count + + ; } cout < < Count < < " \n " ; return 0 ; }

10828 : 스택 [Python]

Stack = [ ] def push ( num ) : Stack . append ( int ( num ) ) def pop ( ) : if len ( Stack ) > 0 : print ( Stack . pop ( ) ) else : print ( - 1 ) def size ( ) : print ( len ( Stack ) ) def empty ( ) : if len ( Stack ) == 0 : print ( 1 ) else : print ( 0 ) def top ( ) : if len ( Stack ) > 0 : print ( Stack [ len ( Stack ) - 1 ] ) else : print ( - 1 ) TestCase = int ( input ( ) ) while TestCase > 0 : Command = input ( ) if Command == 'top' : top ( ) elif Command == 'pop' : pop ( ) elif Command == 'empty' : empty ( ) elif Command == 'size' : size ( ) else : push ( Command [ 5 : ] ) TestCase - = 1