https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터
www.acmicpc.net
#include <bits/stdc++.h>
// 삼성 SW 역량 테스트 기출문제 [C++] 백준
std::string temp[4];
std::string wheels[4];
bool visit[4];
int k;
void rotate(int curr, int dir){
char ch;
if (dir == 1){
ch = temp[curr][7];
for (int i = 7; i >= 1; --i){
temp[curr][i] = temp[curr][i - 1];
}
temp[curr][0] = ch;
}
else {
ch = temp[curr][0];
for (int i = 1; i < 8; ++i){
temp[curr][i - 1] = temp[curr][i];
}
temp[curr][7] = ch;
}
}
void move(int curr, int dir){
rotate(curr, dir);
if (curr - 1 >= 0 && !visit[curr - 1] && wheels[curr][6] != wheels[curr - 1][2]){
visit[curr - 1] = true;
move(curr - 1, -dir);
}
if (curr + 1 < 4 && !visit[curr + 1] && wheels[curr][2] != wheels[curr + 1][6]){
visit[curr + 1] = true;
move(curr + 1, -dir);
}
}
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
for (int i = 0; i < 4; ++i){
std::cin >> wheels[i];
}
std::cin >> k;
int num, dir;
for (int i = 0; i < 4; ++i){
temp[i] = wheels[i];
}
while(k--){
std::cin >> num >> dir;
visit[num - 1] = true;
move(num - 1, dir);
std::fill(visit, visit + 4, false);
for (int i = 0; i < 4; ++i){
wheels[i] = temp[i];
}
}
int ret = 0;
int value = 1;
for (int i = 0; i < 4; ++i){
if (wheels[i][0] == '1'){
ret += value;
}
value <<= 1;
}
std::cout << ret << '\n';
return 0;
}
'삼성 SW 역량 테스트 기출문제' 카테고리의 다른 글
[C++] 삼성 SW 역량 테스트 기출문제 백준 15686 - 치킨 배달 (0) | 2023.07.11 |
---|---|
[C++] 삼성 SW 역량 테스트 기출문제 백준 15683번 - 감시 (0) | 2023.07.11 |
[C++] 삼성 SW 역량 테스트 기출문제 백준 14499번 - 주사위 굴리기 (0) | 2023.07.10 |
[C++] 삼성 SW 역량 테스트 기출문제 백준 14503번 - 로봇 청소기 (0) | 2023.07.10 |
[C++] 삼성 SW 역량 테스트 기출문제 백준 13460번 - 구슬 탈출 2 (0) | 2023.07.05 |