1. 예전에는 이런 문제가 별로 라고 생각했는데, 지금은 꼼꼼함을 기를 수 있는 중요한 문제라고 생각됩니다. 어떻게하면 메모리를 축소시킬 수 있는지, 시간을 단축할 수 있는지를 명확히 할 필요가 있습니다. 시간 복잡도와 메모리 복잡도를 계싼할 수 있는 실력이 되도록 합니다. 라인에서의 경험은 정말 큰 자산이 되었습니다. 새로운 문제에 대해서 대처할 수 있는 능력이 필요하다고 생각됩니다. 톱니바퀴때 스왑을 못했던 것을 생각하면, 몇 일안에 연결 요소 그래프를 한번 찾아보도록 하겠습니다. 저는 잘 할 수 있습니다. |
/* 2018.04.01.1003 시작하겠습니다. 암호생성기 1225 문제시작. 끝나는 부분은 0보다 작아지거나 0일 경우 0으로 저장되며, 해당 숫자 배열이 암호가 됩니다. 그리고 칸 미루는 것은 swap 을 사용하도록 하겠습니다. 8칸을 1,2,3,4,5 씩 빼다가, 0이 되면 그때까지만 하도록 합니다. 한 사이클 씩 검사를 하도록 하겠습니다. 아니다. 그냥 5뭉텅이인데, 스왑도 계속해주도록 합니다. 5개씩 짜면, 뭉텅이를 짠 다음에 낱개로 짜야 하기 때문에 귀찮아 집니다. */ #include <iostream> #include <algorithm> using namespace std; #define SIZE 8 int map[SIZE]; int map_store[SIZE]; int flag; void problemIn() { for (int i = 0; i < 8; i++) { cin >> map[i]; } } void copy_map(int a[SIZE], int b[SIZE]) { for (int i = 0; i < 8; i++) { b[i] = a[i]; } } void turn() { for (int i = 0; i < 8; i++) { map_store[i] = map[(i + 5) % 8]; } } void turn_end(int index) { for (int i = 0; i < 8; i++) { map_store[i] = map[(i + index + 1) % 8]; } } void solve() { while (flag != 1) { for (int i = 1; i <= 5; i++) { map[i-1] = map[i-1] - i; if (map[i-1] <= 0) { map[i-1] = 0; turn_end(i-1); flag = 1; break; } } if (flag) { copy_map(map_store, map); break; } turn(); copy_map(map_store, map); } } int main() { for (int i = 0; i < 10; i++) { int tc; cin >> tc; problemIn(); solve(); cout << "#" << tc << " "; for (int i = 0; i < 8; i++) { cout << map[i] << " "; } cout << endl; flag = 0;
} return 0; } |