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
- 문자열
- 이분탐색
- swea
- 세그먼트 트리
- Network
- 위상정렬
- 동적계획법
- CS
- 스택
- 수학
- 완전탐색
- 에라토스테네스의 체
- Kotlin
- 프로그래머스
- mst
- 플로이드-와샬
- 후니의 쉽게 쓴 시스코 네트워킹
- java
- 그리디
- 구현
- 시뮬레이션
- JUnit 5
- 유니온 파인드
- dfs
- 백트래킹
- 투 포인터
- BFS
- Effective Java
- 알고리즘
- 백준
Archives
반갑습니다!
[백준] 14891 톱니바퀴 본문
풀이
시뮬레이션 문제이다. 문제에 나온대로 구현하면 어렵지않게 해결할 수 있다. 구현을 쉽게 하기 위해서 반시계방향은 -1이 아닌 0으로 바꿔주었고, 톱니바퀴의 번호를 1씩 감소시켜 구현하였다.
코드
#include <iostream>
using namespace std;
int k;
int w[4][8];
int get_score() {
int ret = 0;
for (int i = 0; i < 4; i++)
if (w[i][0]) ret += (1 << i);
return ret;
}
// dir이 1이면 시계방향, 0이면 반시계방향 회전
void spin(int idx, int dir) {
if (dir == 1) {
int tmp = w[idx][7];
for (int i = 7; i >= 1; i--)
w[idx][i] = w[idx][i - 1];
w[idx][0] = tmp;
}
else {
int tmp = w[idx][0];
for (int i = 0; i < 7; i++)
w[idx][i] = w[idx][i + 1];
w[idx][7] = tmp;
}
}
// dir이 1이면 시계방향, 0이면 반시계방향
void spin_gears(int idx, int dir) {
// 1번째 톱니바퀴
if (idx == 0) {
// 1, 2가 다른 경우
if (w[0][2] != w[1][6]) {
// 2, 3이 다른 경우
if (w[1][2] != w[2][6]) {
// 3, 4가 다른 경우
if (w[2][2] != w[3][6])
spin(3, !dir);
spin(2, dir);
}
spin(1, !dir);
}
spin(0, dir);
}
// 2번째 톱니바퀴
if (idx == 1) {
if (w[1][6] != w[0][2]) spin(0, !dir);
if (w[1][2] != w[2][6]) {
if (w[2][2] != w[3][6])
spin(3, dir);
spin(2, !dir);
}
spin(1, dir);
}
// 3번째 톱니바퀴
if (idx == 2) {
if (w[2][2] != w[3][6]) spin(3, !dir);
if (w[2][6] != w[1][2]) {
if (w[1][6] != w[0][2])
spin(0, dir);
spin(1, !dir);
}
spin(2, dir);
}
// 4번째 톱니바퀴
if (idx == 3) {
if (w[3][6] != w[2][2]) {
if (w[2][6] != w[1][2]) {
if (w[1][6] != w[0][2])
spin(0, !dir);
spin(1, dir);
}
spin(2, !dir);
}
spin(3, dir);
}
}
int main() {
for (int i = 0; i < 4; i++)
for (int j = 0; j < 8; j++)
scanf("%1d", &w[i][j]);
scanf("%d", &k);
while (k--) {
int t1, t2;
scanf("%d %d", &t1, &t2);
spin_gears(t1 - 1, t2 == -1 ? 0 : t2);
}
cout << get_score() << '\n';
return 0;
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 불량 사용자 (0) | 2020.05.09 |
---|---|
[프로그래머스] 추석 트래픽 (0) | 2020.05.08 |
[백준] 14890 경사로 (0) | 2020.05.08 |
[프로그래머스] 셔틀버스 (0) | 2020.05.07 |
[프로그래머스] 네트워크 (0) | 2020.05.07 |