728x90
문제
https://www.acmicpc.net/problem/20055
문제 설명
문제 설명이 약간 해석하기 어려운데 간단하게 그냥 저 컨베이어 벨트가 현실과 똑같이 움직인다고 생각한다면 쉽다.
로봇은 무조건 올리는 자리에 올라가야하고 내리는 자리에서 내려야한다. 그리고 로봇은 움직일 수 있으면 무조건
움직이여야한다. 로봇이 움직이거나 로봇을 올리면 컨베이어 벨트에 내구도가 -1 된다. 이 내용만 숙지하고 조건에
맞게 풀어 나가면 된다.
알고리즘 풀이
1. 컨베이어 벨트 배열의 길이를 201, 로봇을 놓는 배열의 길이를 101로 설정한다. (문제와 같이 인덱싱하기 위함)
로봇을 놓는 배열의 길이가 101인 이유는 로봇을 놓는 것은 결국에는 1~N이기 때문이다.
2. 조건에 맞게 설계하면 된다. 딱히 설명이 필요하기 보다는 코드를 보는것이 좋을 것 같다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <iostream> #include <cstring> #include <vector> #include <queue> #include <stack> #include <algorithm> using namespace std; int N,K; int result = 0; int cnt = 0; int belt[201]; bool robo[101] = {false}; void turn(void){ belt[0] = belt[2*N]; for(int i = 2*N;i>=2;i--){ belt[i] = belt[i-1]; } for(int i = N;i>=2;i--){ robo[i] = robo[i-1]; } robo[1] = false; belt[1] = belt[0]; } int main(int argc, char* argv[]){ cin >> N >> K; for(int i = 1;i<=2*N;i++){ cin >> belt[i]; if(belt[i] == 0){cnt++;} } while(1){ if(cnt>=K){break;} result++; turn(); if(robo[N]){ robo[N] = false; } for(int i = N-1;i>=1;i--){ if(robo[i] == true){ if(belt[i+1] >=1&&robo[i+1] == false){ robo[i+1] = true; robo[i] = false; belt[i+1]--; if(belt[i+1] == 0){cnt++;} } } } if(belt[1] >= 1 && robo[1] == false){ robo[1] = true; belt[1]--; if(belt[1] == 0){cnt++;} } } cout << result; } | cs |
728x90
'삼성sw역량테스트 기출문제' 카테고리의 다른 글
[Code Ground][SCPC 1차예선 방속의 거울] (0) | 2021.07.18 |
---|---|
[Code Ground][SCPC 예선 - 개구리 뛰기] (2) | 2021.07.17 |
미세먼지 안녕!(백준 17144번) (0) | 2021.05.25 |
치킨 배달(백준 15686번) (0) | 2021.05.24 |
스타트와 링크(백준 14889번) (0) | 2021.05.21 |