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
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 스마일게이트
- 카카오
- 유니온파인드
- 백준
- 삼성 #코테 #2020상반기 #c++
- Smilegate
- 코테
- Union-find
- Algorithm
- 알고리즘
- 카카오인턴
- 중반부
- 보석쇼핑
- LIS #Algorithm #요소추적
- 코딩테스트
- 서버개발캠프
- c++
- 투포인터
- 소감
- 식단
- BaekJoon
- BFS
- 1편
Archives
- Today
- Total
짱아의 개발 기록장
[Algorithm] 2020 하반기 삼성전자 코딩테스트 - 컨베이어 벨트 위의 로봇(c++) 본문
Algorithm/삼성 sw 역량테스트 기출
[Algorithm] 2020 하반기 삼성전자 코딩테스트 - 컨베이어 벨트 위의 로봇(c++)
jungahshin 2021. 2. 7. 00:05반응형
2020 하반기 오전 sw역량테스트 시험에서 출제되었던 문제이다.
뭔가 실제 시험장에서 봤던 시험이 더 친절하게 설명이 되어 있었던 것 같다...
백준은 약간 복기가 어설프게 되어있는 느낌?? 설명이 아무래도 살짝 헷갈렸다.
[메인 로직]
strong -> 내구도, robot-> 로봇이 있는 지 여부
- 벨트가 각 칸 위에 있는 로봇들과 함께 한 칸 회전한다. 내리는 위치에 있는 로봇은 내린다.
- 가장 먼저 벨트에 올라간 로봇부터, 벨트가 회전하는 방향으로 한 칸 이동할 수 있다면 이동한다. 만약 이동할 수 없다면 가만히 있는다.
- 로봇이 이동하기 위해서는 로봇이 내리는 위치가 아니고, 이동하려는 칸에 로봇이 없으며, 그 칸의 내구도가 1 이상 남아 있어야 한다.
- 올리는 위치에 있는 칸의 내구도가 0이 아니면 올리는 위치에 로봇을 올린다.
- 내구도가 0인 칸의 개수가 K개 이상이라면 과정을 종료한다. 그렇지 않다면 1번으로 돌아간다.
여기서 주의해야할 점은!!! n번째 칸에 도달하면 무조건 내려야한다는 것이다.
그래서 컨베이어벨트 회전, 로봇트 이동 후 무조건 n번째 로봇이 있으면 내려주었다.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
// 컨베이어 벨트 위의 로봇
#include <iostream>
using namespace std;
bool robot[101]; // 로봇이 있는지 여부
int strong[201] = {0, }; // 내구도
int n, k;
void move()
{
// 벨트 한 칸 회전 & 로봇도 같이 회전
int temp[201] = {0, };
for(int i=1; i<2*n; i++){
temp[i+1] = strong[i];
}
temp[1] = strong[2*n];
for(int i=1; i<=2*n; i++){
strong[i] = temp[i];
}
bool roTemp[101];
for(int i=1; i<n; i++){
roTemp[i+1] = robot[i];
}
if(roTemp[n]){
roTemp[n] = false;
}
for(int i=1; i<=n; i++){
robot[i] = roTemp[i];
}
// 로봇 이동
for(int i=n-1; i>=1; i--){
if(robot[i]){
if(!robot[i+1] && strong[i+1]>0){
robot[i] = false;
robot[i+1] = true;
strong[i+1]--;
}
}
}
if(robot[n]){
robot[n] = false;
}
// 올라갈 위치에 로봇 올리기
if(!robot[1] && strong[1]>0){
robot[1] = true;
strong[1]--;
}
}
bool check(){
int cnt = 0;
for(int i=1; i<=2*n; i++){
if(strong[i]==0) cnt++;
}
if(cnt>=k){
return true;
}
return false;
}
int main()
{
cin>>n>>k;
for(int i=1; i<=2*n; i++){
cin>>strong[i];
}
int ans = 0;
while(!check()){
ans++;
move();
}
cout<<ans<<"\n";
return 0;
}
|
cs |
반응형
'Algorithm > 삼성 sw 역량테스트 기출' 카테고리의 다른 글
[Algorithm] 2020 하반기 삼성전자 코딩테스트 - 마법사 상어와 파이어스톰(c++) (0) | 2021.02.08 |
---|---|
[Algorithm] 2020 하반기 삼성전자 코딩테스트 - 마법사 상어와 토네이도(c++) (0) | 2021.02.07 |
[Algorithm] 삼성전자 코딩테스트 - 치킨 배달(c++) (0) | 2020.10.08 |
[Algorithm] 삼성전자 코딩테스트 - 경사로(c++) (0) | 2020.09.24 |
[Algorithm] 삼성전자 코딩테스트 - 연산자 끼워넣기(c++) (0) | 2020.09.23 |
Comments