문제해결/SWExpertAcademy

SWExpertAcademy 1228번-암호문1(JAVA)

mangzz 2021. 8. 9. 18:01

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

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
 
public class Solution {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
 
        int T = 10;
        for(int t = 1; t <=T; t++) {
            int N, M, x, y;
            LinkedList<Integer> cipher;
            String str;
            sb.append("#" + t + " ");
            N = Integer.parseInt(br.readLine());
            cipher = new LinkedList<>();
            str = br.readLine();
            st = new StringTokenizer(str, " ");
            for (int i = 0; i < N; i++) {
                cipher.add(Integer.parseInt(st.nextToken()));
            }
 
            M = Integer.parseInt(br.readLine());
            str = br.readLine();
            st = new StringTokenizer(str, " ");
            for (int i = 0; i < M; i++) {
                st.nextToken();
                x = Integer.parseInt(st.nextToken());
                y = Integer.parseInt(st.nextToken());
                for (int j = 0; j < y; j++) {
                    cipher.add(x+j, Integer.parseInt(st.nextToken()));
                }
            }
            for (int i = 0; i < 10; i++) {
                sb.append(cipher.remove(0) + " ");
            }
            sb.append("\n");
        }
        System.out.println(sb);
    }
}

LinkedList의 add(index, Object) 메소드를 사용해 간단하게 해결할 수 있었습니다.