[Greedy] 16288번 - Passport Control(46일차)

bob.sort·2021년 7월 21일
0

1일 1백준 운동 - C/C++

목록 보기
13/14
post-thumbnail
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int main(){
  //사람의 수와 창구의 수
  int n, k;
  //n번째로 나온 사람이 창구를 통과할 수 있는지 검사하는 변수
  int temp;
  cin >> n >> k;

  //창구를 이용하는 사람을 저장하는 1차원 큐 동적 할당 후 0으로 초기화
  int *gate = new int[k];
  memset(gate, 0, sizeof(int)*k);
  //빠져나온 사람의 순서를 입력받는 배열
  int *ex = new int[n];
  for(int i=0; i<n; i++){
    cin >> ex[i];
  }
  
  //1~n번째사람에 대해
  for(int i=0; i<n; i++){
    //기본적으로 통과하지 못한다고 가정
    temp = 0;

    //i번째로 나온 사람이 들어갈 수 있는 창구가 있을 때 (창구 안에 있는 사람보다 순번이 뒤일때)
    //창구에 해당 사람을 넣어주고 원래 있던 사람은 큐 해제
    for(int j=0; j<k; j++){
      if(gate[j] < ex[i]){
        gate[j] = ex[i];
        //통과했기 때문에 1로 설정
        temp = 1;
        break;
      }
    }
    //모든 창구 검사 시 통과하지 못했으면 탐색 종료
    if(temp == 0){
      break;
    }
  }
  //통과하지 못한 케이스가 있는 경우 No 출력
  if(temp == 0){
    cout << "NO";
  //모두 통과한 경우 Yes 출력
  }else{
    cout << "YES";
  }
}
profile
Interest in Computer Graphics and Computer Vision

0개의 댓글