반응형
[S/W 문제해결 기본] 8일차 - 암호문1] Java
문제
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
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개 항을 출력한다.
제한
예제 입력 |
예제 출력 |
| 11 449047 855428 425117 532416 358612 929816 313459 311433 472478 589139 568205 7 I 1 5 400905 139831 966064 336948 119288 I 8 6 436704 702451 762737 557561 810021 771706 I 3 8 389953 706628 552108 238749 661021 498160 493414 377808 I 13 4 237017 301569 243869 252994 I 3 4 408347 618608 822798 370982 I 8 2 424216 356268 I 4 10 512816 992679 693002 835918 768525 949227 628969 521945 839380 479976 19 566753 244528 233616 328235 268163 292641 646305 944392 643695 385788 444752 939244 637877 325283 779273 712343 953523 846222 204307 5 I 0 4 600576 565945 486128 594841 I 0 1 150706 I 8 8 556294 697547 932203 845517 116062 300371 621038 358830 I 10 8 747039 701738 805438 502654 476665 919177 367272 859931 I 15 3 844423 973297 658751 |
#1 449047 400905 139831 408347 512816 992679 693002 835918 768525 949227 #2 150706 600576 565945 486128 594841 566753 244528 233616 556294 697547 |
풀이 과정
X의 위치에 Y개의 숫자를 add해주면 풀리는 문제이다. 리스트를 이용하면 쉽게 풀 수있다
add하는 과정에서 인덱스의 위치에 주의하자
Java 코드
import java.util.LinkedList;
import java.util.Scanner;
/*
1228 암호문 리스트로 풀기
*
x의 위치에 y개의 숫자를 add해주면 된다. 다만 x의 위치는 add함에 따라 증가해야 정상적으로 들어간다.
* */
public class S1228 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N,K;
for (int t = 1; t <= 10; t++) {
int count=0;
N = sc.nextInt();
LinkedList<Integer> list = new LinkedList<>(); //리스트 선언
for (int i = 0; i < N; i++) list.add(sc.nextInt()); //원본암호문 추가
K = sc.nextInt();
for (int q = 0; q < K; q++) {
String s = sc.next(); //i 제거
int x =sc.nextInt(); //넣을 인덱스
int y = sc.nextInt(); //넣을 숫자
for (int i = 0; i < y; i++) {
list.add(x, sc.nextInt()); //삽입하면서 x값을 증가시켜 인덱스도 증가
x++;
}
}
System.out.printf("#%d ",t);
while (!(list.isEmpty())) {
if(count >9) break;
System.out.print(list.poll() + " ");
count++;
}
System.out.println();
}
}
}
반응형