Algorithm/SW Expert Academy
[SWEA] 1229 암호문2
SSONGMI
2021. 2. 22. 22:15
반응형
문제 출처: SW Expert Academy
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
: 기본 암호문이 주어지고 처리기에 따라 다른 수정을 한 후 최종 암호문의 처음 10개 항을 출력한다.
: 원본 암호문의 길이와 암호문을 입력받는다.
: 명령어 개수를 입력받는다.
: 명령어를 입력받는다.
: 명령어를 순회하면서 명령어가 I이면 정해진 위치 x 바로 다음에 y개의 숫자 s를 삽입한다.
: 명령어가 D이면 정해진 위치 x 바로 다음 위치부터 y개의 숫자를 삭제한다.
: 이때 암호문의 길이는 계속 변하고 중간에 삽입삭제가 이루어져야 하므로 ArrayList를 사용한다.
: 또한 주어진 위치 x는 1 based-index이므로 add와 remove에서 값 조정 없이 사용할 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Solution {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
public static void main(String[] args) throws IOException {
// 테스트 케이스 횟수만큼 반복
for(int tc = 1; tc <= 10; tc++) {
// 원본 암호문 길이 입력
int N = Integer.parseInt(br.readLine());
// 원본 암호문 저장
ArrayList<Integer> pw = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
pw.add(Integer.parseInt(st.nextToken()));
}
// 명령어개수 입력
int commandN = Integer.parseInt(br.readLine());
// 명령어 받기
st = new StringTokenizer(br.readLine());
// 명령어를 순회하면서
while(st.hasMoreTokens()) {
String command = st.nextToken();
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
if(command.equals("I")) {
// 명령어가 I면 x위치 바로 다음에 y개의 숫자를 삽입
for(int i = 0; i < y; i++) {
pw.add(x++, Integer.parseInt(st.nextToken()));
}
}else if(command.equals("D")) {
// 명령어가 D면 x위치 바로 다음부터 y개의 숫자 삭제
for(int i = 0; i < y; i++) {
pw.remove(x);
}
}
}
sb.append("#" + tc + " ");
for(int i = 0; i < 10; i++)
sb.append(pw.get(i) + " ");
sb.append("\n");
}
System.out.println(sb);
}
}
반응형