본문 바로가기

Java/Java 알고리즘 SWEA

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

반응형

0 ~ 999999 사이의 수를 나열하여 만든 암호문이 있다. 암호문을 급히 수정해야 할 일이 발생했는데,

이 암호문은 특수 제작된 처리기로만 수정이 가능하다. 이 처리기는 다음과 같이 2개의 기능을 제공한다.

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

2. D(삭제) x, y : 앞에서부터 x의 위치 바로 다음부터 y개의 숫자를 삭제한다.[ ex) D 4 4 ]

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

[입력]


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

두 번째 줄 : 원본 암호문

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

네 번째 줄 : 명령어

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

[출력]

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

입력193
701633 517247 207227 598906 709204 177422 933135 361253 641488 272037 700207 210546 897237 133041 350385 701520 298460 312226 606874 129312 960451 613318 383985 199348 152779 133823 818875 580215 459355 605845 834805 106218 905612 938377 391231 841032 683166...
11
I 19 4 281822 746265 450734 108373 I 106 9 666218 302034 208501 648283 798327 631226 998665 959675 852007 D 117 1 D 191 2 D 10 3 D 133 1 D 76 1 I 105 7 362012 585269 876166 894252 294007 210018 659653 I 203 7 352576 568766 700855 768224 339990 691517 213258 D 84 4 I 6 6 291139 808642 764059 913376 124313 256337
113
365906 969923 174155 356997 290732 896596 181853 154816 851464 684571 213258 880002 117882 222368 574807 164443 327355 588809 487619 450895 504676 349488 892904 299342 297667 964549 362868 428685 526653 324294 852266 375925 529434 133733 621545 481065 548372...
10
D 68 1 I 32 3 561245 526664 467258 I 70 2 250067 293448 D 30 2 I 5 2 329245 306750 I 5 8 844819 994015 645785 826206 259513 304798 880274 893206 D 39 3 D 31 4 I 60 6 877160 722165 135501 527521 682217 713949 D 61 5
...
 
출력
#1 701633 517247 207227 598906 709204 177422 291139 808642 764059 913376
#2 365906 969923 174155 356997 290732 844819 994015 645785 826206 259513
...

 

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 ArrayList<Integer> solution2(ArrayList<Integer> list, int[] arr2, int b, int z) {
		int i=0;
		while (i<z) {
			list.remove(b);
			i++;
		}

		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();
				
				if(c=='I') {
					int z = kb.nextInt();
					arr2 = new int[z];
					for (int a = 0; a < z; a++) {
						arr2[a] = kb.nextInt();
					}
					T.solution(list, arr2, b);
				}
				if(c=='D') {
					int z = kb.nextInt();
					T.solution2(list, arr2, b,z);
				}
			}

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

		}

	}

}
반응형