일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 15651
- C++
- 14891
- 14890
- 14500
- 13460
- 14888
- rust설치
- 팰린드롬수
- 테트로미노
- 분해합
- 3190
- 문제풀이
- 15649
- 15650
- 백트래킹
- 15652
- 13458
- 러스트란 #cargo
- 10872
- 2798
- 9663
- C
- 연산자 끼워넣기 성공
- 15683
- 1259
- 14501
- 백준
- rustup
- 14503
Archives
Easy-So-Easy
[백준] 14891번 톱니바퀴 - C/C++ (Easy 풀이) 본문
반응형
백준 14891 문제(Problem)
풀이 & 전체 코드(Solution & Code)
#include<iostream>
using namespace std;
int res, cnt=1;
char wheels[5][9];
// 톱니바퀴를 돌리는 함수
void spin(int w, int dir) {
char temp;
if(dir==1) { // 오른쪽으로 spin
temp=wheels[w][8];
for(int i=8; i>1; i--) wheels[w][i]=wheels[w][i-1];
wheels[w][1]=temp;
} else { // 왼쪽으로 spin
temp=wheels[w][1];
for(int i=1; i<8; i++) wheels[w][i] = wheels[w][i+1];
wheels[w][8]=temp;
}
}
// 오른쪽 재귀적으로 탐색하며 톱니바퀴를 돌리는 함수
void right_side(int w, int dir) {
if(w>4) return; // 기저조건: 오른쪽에 톱니바퀴가 없을 때
if(wheels[w][3] != wheels[w+1][7]) { // 오른쪽 톱니바퀴와 극이 다를 때
right_side(w+1, -1*dir); // 재귀 호출(방향전환: dir * -1)
spin(w+1, -1*dir);
}
}
// 왼쪽을 재귀적으로 탐색하며 톱니바퀴를 돌리는 함수
void left_side(int w, int dir) {
if(w<1) return; // 기저조건: 왼족에 톱니바퀴가 없을 때
if(wheels[w][7] != wheels[w-1][3]){ // 왼쪽 톱니바퀴와 극이 다를 때
left_side(w-1, -1*dir); // 재귀 호출(방향전환: dir * -1)
spin(w-1, -1*dir);
}
}
int main() {
int k, w, dir;
for(int i=1; i<=4; i++)
for(int j=1; j<=8; j++)
cin >> wheels[i][j];
cin >> k;
for(int i=0; i<k; i++) {
cin >> w >> dir;
right_side(w, dir);
left_side(w, dir);
spin(w, dir);
}
for(int i=1; i<=4; i++) {
if(wheels[i][1]=='1') res += cnt;
cnt *= 2;
}
cout << res;
}
반응형
'BaekJoon' 카테고리의 다른 글
[백준] 15683번 감시 - C/C++ (0) | 2023.07.20 |
---|---|
[백준] 14890번 경사로 - C/C++ (Easy 풀이) (0) | 2023.07.06 |
[백준] 14503번 로봇 청소기 - C/C++ (Easy 풀이) (0) | 2023.07.06 |
[백준] 14501번 퇴사 - C/C++ (Easy 풀이) (0) | 2023.07.06 |
[백준] 14500번 테트로미노 - C/C++ (Easy 풀이) (0) | 2023.07.06 |