본문 바로가기

Java/Java 알고리즘 SWEA

[SW 아카데미] 1228. [S/W 문제해결 기본] 8일차 - 암호문1

728x90
반응형

0 ~ 999999 사이의 수를 나열하여 만든 암호문이 있다.

암호문을 급히 수정해야 할 일이 발생했는데, 이 암호문은 특수 제작된 처리기로만 수정이 가능하다.

이 처리기는 다음과 같이 1개의 기능을 제공한다.

1. I(삽입) x, y, s : 앞에서부터 x의 위치 바로 다음에 y개의 숫자를 삽입한다. s는 덧붙일 숫자들이다.[ ex) I 3 2 123152 487651 ]

위의 규칙에 맞게 작성된 명령어를 나열하여 만든 문자열이 주어졌을 때, 암호문을 수정하고, 수정된 결과의 처음 10개 숫자를 출력하는 프로그램을 작성하여라.

[입력]


첫 번째 줄 : 원본 암호문의 길이 N ( 10 ≤ N ≤ 20 의 정수)

두 번째 줄 : 원본 암호문

세 번째 줄 : 명령어의 개수 ( 5 ≤ N ≤ 10 의 정수)

네 번째 줄 : 명령어

위와 같은 네 줄이 한 개의 테스트 케이스이며, 총 10개의 테스트 케이스가 주어진다.

[출력]

#기호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 수정된 암호문의 처음 10개 항을 출력한다.

입력11
449047 855428 425117 532416 358612 929816 313459 311433 472478 589139 568205
7
I 1 5 400905 139831 966064 336948 119288 I 8 6 436704 702451 762737 557561 810021 771706 I 3 8 389953 706628 552108 238749 661021 498160 493414 377808 I 13 4 237017 301569 243869 252994 I 3 4 408347 618608 822798 370982 I 8 2 424216 356268 I 4 10 512816 992679 693002 835918 768525 949227 628969 521945 839380 479976
19
566753 244528 233616 328235 268163 292641 646305 944392 643695 385788 444752 939244 637877 325283 779273 712343 953523 846222 204307
5
I 0 4 600576 565945 486128 594841 I 0 1 150706 I 8 8 556294 697547 932203 845517 116062 300371 621038 358830 I 10 8 747039 701738 805438 502654 476665 919177 367272 859931 I 15 3 844423 973297 658751
 
 
출력
#1 449047 400905 139831 408347 512816 992679 693002 835918 768525 949227
#2 150706 600576 565945 486128 594841 566753 244528 233616 556294 697547
...

 

 


 

import java.util.ArrayList;
import java.util.Scanner;
//문제 파악 먼저
//추가를 하는데, 그 자리에 추가가 아닌, 해당위치는 밀고 추가
//배열은 불가능하고, ArrayList 필요

public class Solution {
	public ArrayList<Integer> solution(ArrayList<Integer> list, int[] arr2, int b) {
		int j = 0;
		while (j< arr2.length) {
			list.add(b, arr2[j]);
			b++;
			j++;
		}

		return list;
	}

	public static void main(String[] args) {
		Solution T = new Solution();
		Scanner kb = new Scanner(System.in);

		for (int k = 1; k <= 10; k++) {
			int n = kb.nextInt();
			int b = 0;
			ArrayList<Integer> list = new ArrayList<>();
			int[] arr = new int[n];
			int[] arr2 = null;
			for (int i = 0; i < n; i++) {
				list.add(kb.nextInt());
			}
			int m = kb.nextInt();
			for (int j = 0; j < m; j++) {
				char c = kb.next().charAt(0);
				b = kb.nextInt();
				int z = kb.nextInt();
				arr2 = new int[z];
				for (int a = 0; a < z; a++) {
					arr2[a] = kb.nextInt();
				}
				T.solution(list, arr2, b);
			}

			System.out.print("#" + k + " ");
			for (int v = 0; v < 10; v++) {
				System.out.print(list.get(v) + " ");
			}
			System.out.println();

		}

	}

}
728x90
반응형