-
SWEA 4013 : [모의 SW 역량테스트] 특이한 자석백준 문제풀이/etc 2020. 6. 6. 16:29
문제
문제 풀어보기
풀이
먼저 4개의 톱니바퀴를 어떤방향으로 돌릴것인지
배열에 결정해준다.
배열을 돌면서 톱니바퀴를 돌려준다.
한비트 쉬프트하며 정답에 더해준다.
코드
#include <iostream> #include <vector> #include <queue> #include <algorithm> #include <tuple> using namespace std; //#define safe(x,y) x>=n || x<0 || y<0 || y>=n //int dx[] = { -1 , 1, 0,0}; //int dy[] = { 0,0, -1, 1 }; ////위 오른쪽 아래 왼쪽 //int dx[] = { -1, 1, 1, -1 }; //int dy[] = { 1, 1, -1 , -1 }; // 대각선 vector< vector<int>> v(4, vector<int>(8, 0)); // 회전방향 결정 void go(vector<int>& dir, int index) { int tmp = index; // 왼쪽 톱니바퀴 while (tmp--) { if (v[tmp][2] != v[tmp + 1][6]) { dir[tmp] = -dir[tmp + 1]; } else break; } tmp = index; // 오른쪽 톱니바퀴 while (tmp++ < 3) { if (v[tmp][6] != v[tmp - 1][2]) { dir[tmp] = -dir[tmp - 1]; } else break; } } // 회전 void spin(int index, int d) { int tmp; if (d == 1) { tmp = v[index][7]; for (int i = 7; i > 0; i--) { v[index][i] = v[index][i - 1]; } v[index][0] = tmp; } else if( d==-1) { tmp = v[index][0]; for (int i = 0; i < 7; i++) { v[index][i] = v[index][i + 1]; } v[index][7] = tmp; } } int main() { ios::sync_with_stdio(false); cin.tie(NULL); int T; cin >> T; for (int test = 1; test <= T; test++) { int n; cin >> n; for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { cin >> v[i][j]; } } for (int e = 0, index, d; e < n; e++) { cin >> index >> d; index -= 1; vector<int> dir(4,0); dir[index] = d; go(dir, index); for (int j = 0; j < 4; j++) { spin(j, dir[j]); } } int ans = 0; for (int i = 0; i < 4; i++) { if (v[i][0] == 1) { ans += (1 << i); } } cout << "#" << test << ' '; cout << ans << endl; } return 0; }
'백준 문제풀이 > etc' 카테고리의 다른 글
BOJ 10828 : 스택 (0) 2020.07.09 BOJ 1406 : 에디터 (0) 2020.06.05 BOJ 9663 : N-Queen (0) 2020.05.19 BOJ 17140 : 이차원 배열과 연산 (0) 2020.05.10 BOJ 17143 : 낚시왕 (0) 2020.05.04