Java/Algorithm

[Java-Algorithm] 백준1406 에디터 풀이

Jeong Jeon
반응형

문제 : https://www.acmicpc.net/problem/1406

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

 

풀이 : 

와... 사실 나는 cursor를 따로 만들어 위치를 변경시키면서 진행되는 코드를 짰었다...

다른 사람이 짠 코드에 놀라서 그 코드로 정리해놓으려고 한다.

대단하다 이런생각을...ㅠㅠ

 

Stack을 왼쪽 오른쪽 두가지로 나누어 커서의 위치를 만들어내었다...

이 아이디어로만으로도 코드 구현은 가능하니까..! 여기까지만 설명...!

public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuffer sb = new StringBuffer();

		String[] words = st.nextToken().split("");
		int n = 0;

		st = new StringTokenizer(br.readLine());
		n = Integer.parseInt(st.nextToken());

		// 왼쪽스택 오른쪽 스택 나누어 둔다.
		Stack<String> left = new Stack<String>();
		Stack<String> right = new Stack<String>();

		for (int i = 0; i < words.length; i++) {// 왼쪽 스택에 입력받은 문자열을 전부 넣는다.
			left.push(words[i]);
		}

		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			String c = st.nextToken();
			switch (c) {
			case "L":
				if(!left.isEmpty()) {
					right.push(left.pop());
				}
				break;
			case "D":
				if(!right.isEmpty()) {
					left.push(right.pop());
				}
				break;
			case "B":
				if(!left.isEmpty()) {
					left.pop();
				}
				break;
			case "P":
				left.push(st.nextToken());

				break;
			}
		}

		while(!left.isEmpty()) {right.push(left.pop());}
		while(!right.isEmpty()) {
			sb.append(right.pop());
		}

		System.out.println(sb);

	}

 

대단한 사람들이 참많구낭...

반응형