본문 바로가기

코딩테스트

[JAVA-D3] SWEA 1229 - 암호문 2

728x90
 

SW Expert Academy

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

swexpertacademy.com

 

✅ 문제 요약

n길이의 암호문이 주어지고 삽입 명령어 I와 삭제 명령어 D가 주어졌을 때

각 명령어를 수행한 뒤 암호문의 앞에서부터 10가지 원소를 출력하라

 

🤔 문제 풀이

별다른 알고리즘을 사용할 필요는 없었다.

암호문 저장을 위해 ArrayList<String>을 사용했고

 

삽입 명령어 같은 경우 삽입해야 하는 숫자들을 순차적으로 삽입해야 하므로

pos위치에서 삽입을 수행할 때마다 pos++로 그 위치를 조정해주었다.

위치 조정이 없다면 오히려 거꾸로 삽입이 될 수 있으니 주의!

 

삭제 명령어를 수행할 경우 pos위치의 원소를 삭제한 뒤, 삭제한 위치 뒤에 있는 

원소들이 자동으로 앞 인덱스로 위치가 옮겨지기 때문에 삭제 명령 위치 조정은 필요하지 않았다.

 

🚨 CODE

import java.util.*;
import java.io.*;
 
public class Solution {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int testCase = 10;
 
        for (int t = 1; t <= testCase; t++) {
            int n = Integer.parseInt(br.readLine());
            LinkedList<String> list = new LinkedList<>();
            StringTokenizer st = new StringTokenizer(br.readLine());
             
            for(int i = 0; i<n; i++) {
                list.add(st.nextToken());
            }
             
            int opLen = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            for(int i = 0; i<opLen; i++) {
                String op = st.nextToken();
                int pos = Integer.parseInt(st.nextToken());
                int addict = Integer.parseInt(st.nextToken());
                 
                if(op.equals("I")) {
                    for(int j = 0; j<addict; j++) {
                        String newElement = st.nextToken();
                        list.add(pos++, newElement);
                    }
                }else {
                    for(int j = 0; j<addict; j++) {
                        list.remove(pos);
                    }
                }
            }
             
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i<10; i++) {
                sb.append(list.get(i)).append(" ");
            }
            bw.write(String.format("#%d %s\n", t, sb.toString()));
        } // testcase
        bw.flush();
    }
}

 

728x90
반응형