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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream> using namespace std; int main() { for ( int T = 1; T <= 10; T++) { int code[10]; int N; char insert; int bin; // 사용하지 않지만 입력을 받을 때, cin >> N; //암호문 길이 for ( int i = 0; i < N; i++) { //연산과 출력에는 10개의 숫자만 필요, 암호는 뒤로만 이동함. 따라서 처음 10개의 값만 code[i]에 순서대로 저장, //for문을 10번만 돌리지않는 이유는 전체 암호를 모두 받아야해서 if (i < 10) cin >> code[i]; else cin >> bin; } cin >> N >> insert; //N 명령어 개수, 암호문의 길이의 정보는 초기 암호를 입력받을 때만 필요 //insert값은 구분용, for ( int i = 0; i<N; i++) { int x, y; cin >> x >> y; if (x<10) // x가 10보다 크면 = 10+n번째 암호 이후에 영향을 주므로 필요 없는 연산, 하지만 입력은 받아야하니 else이용 { for ( int j = 9-y; j >= x ; j--) // 앞에서부터 값을 미룰 경우 뒤의 값이 영향을 받게 되는 경우 발생. if (j + y<10) code[j + y] = code[j]; //j+y : 1번 값을 y개만큼 뒤로 보낼 때, 10보다 크면 필요없으므로 10보다 작은 경우만 고려 for ( int j = 0; j < y; j++) //y개의 새로운 암호를 입력받음, x번째수부터 x+1, x+2, x+3 ...x+y-1까지 { if (x + j < 10) cin >> code[x + j]; // 마찬가지로 x+j가 10보다 클 경우 저장할 필요가 없음 else cin >> bin; // 입력은 받아야하니 bin으로 받아줌 } } else //x>10인 경우 for ( int j = 0; j < y; j++) cin >> bin; if (i != N - 1) cin >> insert; } cout << "#" << T; for ( int i = 0; i<10; i++) cout << " " << code[i]; cout << endl; } } |
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
171107_최소힙 (0) | 2017.11.07 |
---|---|
171106_1234_비밀번호 (0) | 2017.11.06 |
171104_1225_암호생성기 (0) | 2017.11.04 |
171103_1221_GNS (0) | 2017.11.03 |
171103_1220_magnetic (0) | 2017.11.03 |