본문 바로가기
알고리즘문제풀이

[JAVA] SWEA 1228 암호문1

by Hindsight.. 2020. 8. 15.

전체코드

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class SWEA_1228_암호문1 {
	
	static int N, T = 10, cmdNum, plain[]; 
	static String cmd, tmp;
	public static void main(String[] args) throws IOException {
		int idx, num;
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		for(int test = 1; test<=T; test++) {
			N = Integer.parseInt(br.readLine());
			st = new StringTokenizer(br.readLine());
			plain = new int[T];
			
			for(int i=0; i<N; i++) {
				if(i<T)
					plain[i] = Integer.parseInt(st.nextToken());
				else
					tmp = st.nextToken();
			}
			cmdNum = Integer.parseInt(br.readLine());
			st = new StringTokenizer(br.readLine());
			
			for(int i=0; i<cmdNum; i++) {
				cmd = st.nextToken();
				idx = Integer.parseInt(st.nextToken());
				num = Integer.parseInt(st.nextToken());
				
				push(idx, num);
				
				for(int j=idx; j<idx+num; j++) {
					if(j<T)
						plain[j] = Integer.parseInt(st.nextToken());
					else{
						tmp = st.nextToken();
					}
				}
			}
			System.out.print("#" + test);
			for(int i=0; i<10; i++) {
				System.out.print(" " + plain[i]);
			}
			System.out.println();
				
			
			
		}
	}
	
	private static void push(int idx, int num) {
		for(int i=T-num-1; i>=idx; i--) {
			plain[i+num] = plain[i];
		}
	}
	

}

 

문제 핵심 부분

 

cmdNum = Integer.parseInt(br.readLine()); //명령어 개수
st = new StringTokenizer(br.readLine()); 
			
for(int i=0; i<cmdNum; i++) {
	cmd = st.nextToken(); // I(삽입) 명령어 
	idx = Integer.parseInt(st.nextToken()); // 삽입될 자리
	num = Integer.parseInt(st.nextToken()); // 삽입될 개수
				
	push(idx, num); // 삽입될 자리를 비워놓는 함수 실행.
				
	for(int j=idx; j<idx+num; j++) { // 삽입될 자리에 입력된 수들 삽입
		if(j<T) // 이것 또한 10개 이상은 필요없으므로 tmp 에담고 배열에 저장하지 않는다.
			plain[j] = Integer.parseInt(st.nextToken());
		else{
			tmp = st.nextToken();
		}
	}
}

Push 함수

private static void push(int idx, int num) {
	for(int i=T-num-1; i>=idx; i--) { // 삽입될 인덱스부터 문자 개수까지 기존 배열의 요소들을 밀어놓는다.
		plain[i+num] = plain[i];
	}
}

 

 

결국 출력될 암호문은 10개이므로 그 이외의 연산들을 생략하는 것이 포인트인 문제였다.