Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 크롬설치
- 백준 14888번
- 삼성 sw 역량테스트
- 백준 14503번
- 바로꺼짐
- 로봇청소기
- 크롬 설치 안됨
- chromeSetup.exe꺼짐
- ChromeStandaloneSetup64안됨
- chromeSetup.exe 안됨
- 연산자 끼워넣기
- C++
- 크롬설치파일꺼짐
Archives
- Today
- Total
공대생의 개발 일기장
33. [백준 20055번 / C++] 컨베이어 벨트 위의 로봇 본문
https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
결론부터 말하겠다. 풀지마라.
왜냐하면 이 문제는 너무 쉬운 구현문제지만, 문제 설명이 난이도를 올려놨다.
문제의 그림과 지문을 보자. 지문에서 '언제든지 로봇이 내리는 위치에 도달하면 그 즉시 내린다' 라고 되어있다. 아하! N + 1로 내리는거구나~
아니다. 그림 상에서 컨베이어벨트 상으로 그렇게 생각하지만 이건 그냥 컨베이어 벨트가 이렇게 움직인다는거고, 로봇은 내리는 위치인 N번 칸에 도착하면 컨베이어 벨트에서 out이다. 걍 사라진다는 것.
이 점만 고려해서 문제의 내용을 구현하면 쉬울 것이다.
#include<bits/stdc++.h>
using namespace std;
int n, k, num, ret;
vector<int> a, b;
void rotate_robot(){
if(b[2 * n - 1] == 1 && a[0] >= 1){
b[0] = b[2 * n] = 1;
b[2 * n - 1] = b[4 * n - 1] = 0;
a[0] -= 1;
a[2 * n] -= 1;
}
for(int i = 2 * n - 2; i >= 0; i--){
if(b[i] == 1){
if(b[i + 1] == 0 && a[i + 1] >= 1){
b[i + 1] = b[i + 1 + 2 * n] = 1;
b[i] = b[i + 2 * n] = 0;
a[i + 1] -= 1;
a[i + 1 + 2 * n] -= 1;
}
}
}
if(b[n - 1] == 1 && a[n] >= 1){
b[n - 1] = b[3 * n - 1] = 0;
}
}
void on_robot(){
if(a[0] >= 1){
b[0] = b[2 * n] = 1;
a[0] -= 1;
a[2 * n] -= 1;
}
}
bool check(){
int cnt = 0;
for(int i = 0; i < 2 * n; i++){
if(a[i] == 0) cnt++;
}
if(cnt >= k) return true;
else return false;
}
int main(){
cin >> n >> k;
for(int i = 0; i < 2 * n; i++){
cin >> num;
a.push_back(num);
b.push_back(0);
}
for(int i = 0; i < 2 * n; i++){
a.push_back(a[i]);
b.push_back(0);
}
while(true){
ret++;
rotate(a.rbegin(), a.rbegin() + 1, a.rend());
rotate(b.rbegin(), b.rbegin() + 1, b.rend());
if(b[n - 1] == 1){
b[n - 1] = b[3 * n - 1] = 0;
}
rotate_robot();
on_robot();
if(check()) break;
}
cout << ret << "\n";
}
하지만 다시 한 번 말한다. 풀지마라...ㅠㅠㅠ
'코딩 테스트 > 삼성 SW 역량 테스트 기출 문제' 카테고리의 다른 글
35. [백준 20057번 / C++] 마법사 상어와 토네이도 (1) | 2024.04.12 |
---|---|
34. [백준 20056번 / C++] 마법사 상어와 파이어볼 (0) | 2024.04.11 |
32. [백준 19238번 / C++] 스타트 택시 (0) | 2024.04.04 |
31. [백준 19237번 / C++] 어른 상어 (1) | 2024.04.04 |
30. [백준 19236번 / C++] 청소년 상어 (0) | 2024.04.02 |