-
고민
회전하는 자석과 영향을 받는 자석의 회전 여부와 회전하는 자석과 영향을 받는 자석의 거리에 따라 방향 값을 정해준뒤 주어진 회전 조건에 맞게 회전한 후 점수를 계산하는 문제였다. 테스트케이스 마다 자석 정보를 초기화 해줘야 하는데 이 부분에서 해맸다.
-
#include <iostream> #include <string> using namespace std; string rotate(string g, int i) { if (i == 1) { return g.substr(7, 1) + g.substr(0, 7); } else if (i == -1) { return g.substr(1, 8) + g.substr(0, 1); } else { return g; } } bool is_rotate(string left, string right) { if (left[2] != right[6]) { return true; } else { return false; } } string g[5]; int rr[5]; int main() { int t; int ans_count = 1; cin >> t; while (t--) { int temp, k; cin >> k; for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { cin >> temp; g[i] += to_string(temp); } } while (k--) { int s, r; cin >> s >> r; for (int i = 0; i < 4; i++) { rr[i] = 0; } s--; rr[s] = r; for (int i = s - 1; i >= 0; i--) { if (is_rotate(g[i], g[i + 1])) { rr[i] = ((s - i) % 2 == 1 ? -1 : 1) * r; rr[i + 1] = ((s - i + 1) % 2 == 1 ? -1 : 1) * r; } else { break; } } for (int j = s + 1; j < 4; j++) { if (is_rotate(g[j - 1], g[j])) { rr[j] = ((j - s) % 2 == 1 ? -1 : 1) * r; rr[j - 1] = ((j - 1 - s) % 2 == 1 ? -1 : 1) * r; } else { break; } } for (int i = 0; i < 4; i++) { g[i] = rotate(g[i], rr[i]); } } int ans = 0; for (int i = 0; i < 4; i++) { if (g[i][0] == '1') { ans += (1 << i); } g[i].clear(); } cout << '#' << ans_count++ << ' ' << ans << '\n';; } }