이 문제는 이번에 삼성 sw역량평가 오전 1번 문제였다. 이번에 나도 코딩테스트를 봤는데 이문제를 풀었었다.
현장에서 test case를 모두 통과했지만, 다시한번 풀어보고 확인해보았다.
결과는 성-공!
구현 자체는 별로 어렵지않았다. 순서대로 한바퀴 돌려주고 사람 이동시키고 내리고 올리고 하면되기때문에 간단했다.
#include <iostream>
using namespace std;
struct block{
bool human;
int dur;
};
block belt[202];
void init(int n){
for(int i=0;i<2*n;i++){
belt[i].human=false;
belt[i].dur=0;
}
}
int main(void){
int N,K;
cin>>N>>K;
init(N);
for(int i=0;i<2*N;i++){
cin>>belt[i].dur;
}
int time=0;
while(1){
time++;
//한바귀 회전
block c_belt[202];
for(int i=0;i<2*N-1;i++){
c_belt[i+1]=belt[i];
}
c_belt[0]=belt[2*N-1];
for(int i=0;i<2*N;i++){
belt[i]=c_belt[i];
}
if(belt[N-1].human == true) belt[N-1].human=false;
for(int i=N-2;i>=0;i--){
if(belt[i+1].human == false and belt[i].human==true and belt[i+1].dur >0){
belt[i].human=false;
belt[i+1].human=true;
belt[i+1].dur--;
}
}
if(belt[N-1].human==true) belt[N-1].human=false;
if(belt[0].human == false and belt[0].dur>0){
belt[0].human=true;
belt[0].dur--;
}
int cnt=0;
for(int i=0;i<2*N;i++){
if(belt[i].dur==0)cnt++;
}
if(cnt>=K)break;
}
cout<<time<<endl;
}
'Development > BOJ' 카테고리의 다른 글
[BOJ] 백준 9095번 : 1, 2, 3 더하기 C++ : 아주정은 (0) | 2021.04.19 |
---|---|
[BOJ] 백준 1992번: 쿼드트리 C++ : 아주정은 (0) | 2020.10.27 |
[BOJ] 백준 19237번 : 어른 상어 C++ : 아주정은 (0) | 2020.10.17 |
[BOJ] 백준 15683번 : 감시 C++ : 아주정은 (0) | 2020.10.17 |
[BOJ] 백준 19236번 : 청소년 상어 C++ : 아주정은 (0) | 2020.10.16 |