문제
0 ~ 999999 사이의 수가 나열된 암호문이 있을 때, 명령에 따라 암호문을 수정하는 문제
명령문>
I(삽입) x, y, s : x는 삽입할 인덱스, y는 삽입할 숫자의 수, s는 삽입할 숫자들
D(삭제) x, y : x는 삭제할 데이터의 인덱스, y는 삭제할 데이터의 수
A(추가) y, s : 암호문의 맨 뒤에 y개의 숫자를 덧붙인다. s는 덧붙일 숫자들
풀이방법
데이터의 삽입이 많은 문제로 연결리스트 구조를 사용해 연산의 수를 줄인다
소스코드
package samsung;
import java.util.*;
public class s_1230 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int t = 1; t <= 10; t++) {
int n = sc.nextInt();
LinkedList <Integer> l = new LinkedList<>();
for(int i = 0; i < n; i++) {
int tmp = sc.nextInt();
l.add(tmp);
}
int c = sc.nextInt();
for(int i = 0; i < c; i++) {
String s = sc.next();
if(s.equals("I")) {
int x = sc.nextInt();
int y = sc.nextInt();
int[] a = new int[y];
for(int j = 0; j < y; j++) {
a[j] = sc.nextInt();
}
for(int j = y-1; j >= 0; j--) {
l.add(x, a[j]);
}
}
else if(s.equals("D")) {
int x = sc.nextInt();
int y = sc.nextInt();
for(int j = 0; j < y; j++) {
l.remove(x);
}
}
else if(s.equals("A")) {
int y = sc.nextInt();
int[] a = new int[y];
for(int j = 0; j < y; j++) {
a[j] = sc.nextInt();
}
for(int j = y-1; j >= 0; j--) {
l.addLast(a[j]);
}
}
}
System.out.print("#" + t + " ");
for(int i = 0; i < 10; i++) {
System.out.print(l.get(i) + " ");
}
System.out.println();
}
}
}
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA] 1285. 아름이의 돌 던지기 (0) | 2020.02.09 |
---|---|
[SWEA] 1234. 비밀번호 (0) | 2020.02.09 |
[SWEA] 1229. 암호문2 (0) | 2020.02.09 |
[SWEA] 1940. 가랏! RC카! (0) | 2020.02.05 |
[SWEA] 1288. 새로운 불면증 치료법 (0) | 2020.02.05 |
댓글