[S/W 문제해결 기본] 8일차 - 암호문3 (D3)
문제 링크
- 원본 암호에서 명령어에 따라 암호문을 변경한 결과를 출력하는 문제이다.
- 명령어
- I(삽입) x, y, s : 앞에서부터 x의 위치 바로 다음에 y개의 숫자를 삽입한다. s는 덧붙일 숫자들이다
- D(삭제) x, y : 앞에서부터 x의 위치 바로 다음부터 y개의 숫자를 삭제한다
- A(추가) y, s : 암호문의 맨 뒤에 y개의 숫자를 덧붙인다. s는 덧붙일 숫자들이다
- 삽입, 삭제가 자주 이뤄지므로 LinkedList로 구현했다.
Solution
package swea
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class p1230 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
LinkedList<String> password;
for (int t = 1; t <= 10; t++) {
password = new LinkedList<>();
br.readLine();
stk = new StringTokenizer(br.readLine(), " ");
while (stk.hasMoreTokens()) {
password.add(stk.nextToken());
}
br.readLine();
stk = new StringTokenizer(br.readLine(), " ");
int x, y;
while (stk.hasMoreTokens()) {
switch (stk.nextToken()) {
case "I":
x = Integer.parseInt(stk.nextToken());
y = Integer.parseInt(stk.nextToken());
for (int i = 0; i < y; i++) {
password.add(x++, stk.nextToken());
}
break;
case "D":
x = Integer.parseInt(stk.nextToken());
y = Integer.parseInt(stk.nextToken());
for (int i = 0; i < y; i++) {
password.remove(x);
}
break;
case "A":
y = Integer.parseInt(stk.nextToken());
for (int i = 0; i < y; i++) {
password.add(stk.nextToken());
}
break;
}
}
System.out.print("#" + t);
for (int i = 0; i < 10; i++) {
System.out.print(" " + password.get(i));
}
System.out.println();
}
}
}