노력만이 살길!/알고리즘

[JAVA][SWEA] 1228 암호문1

갱스타 2022. 2. 8. 18:13

1. 문제

출처 :

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14w-rKAHACFAYD

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

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개 항을 출력한다.

2. 풀이 코드 ArrayList 사용

package com.ssafy.day04.stack;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution_D3_1228_김유경 {
	public static void main(String[] args) throws Exception {
		
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=null;
		for(int i=0;i<2;i++) { //테스크케이스 10개
			st=new StringTokenizer(br.readLine());
			int N=Integer.parseInt(st.nextToken());//원문의 길이
			ArrayList<String> list=new ArrayList<>(); //링크드 리스트 생성
			
			st=new StringTokenizer(br.readLine());
			for(int k=0;k<N;k++) { //원문 리스트에 삽입
				list.add(st.nextToken());
			}
			
			st=new StringTokenizer(br.readLine());
			int commend=Integer.parseInt(st.nextToken()); //명령어의 개수 읽어온다.
			
			//명령어를 읽어온다.
			st=new StringTokenizer(br.readLine());
			for(int j=0;j<commend;j++) { //명령어의 개수만큼 반복.
				if(st.nextToken().equals("I")) { //I문자 날려버
				int index=Integer.parseInt(st.nextToken()); //몇번째 위치에 삽입할건지.
				int size=Integer.parseInt(st.nextToken()); //삽입할 원소가 몇개인지.
				for(int z=0;z<size;z++) {
					list.add(index+z,st.nextToken());
				}
			}
			}
			System.out.printf("#%d ",i+1);
			for(int m=0;m<10;m++) {
				System.out.printf("%s ",list.get(m));
			}
			System.out.println();
			
			
		}
	
	}
}