-
백준 1406 - 에디터자료구조와 알고리즘/문제풀기 2023. 4. 5. 11:29
해결방법
- 첫 줄을 입력받아 데이터를 저장한다.
- 각 상황에 맞게 명령을 구현한다.
-스택을 사용하면, 스택 두개를 두고
- L - 왼쪽 스택에서 글자하나 pop()해서 오른쪽 스택에 넣기
- D - 오른쪽 스택에서 글자하나 pop()해서 왼쪽 스택에 넣기
- B - 왼쪽스택에 글자하나 pop()하기
- P - 왼쪽 스택에 글자하나 push()하기
- 왼쪽스택에 있는 문자 전부 pop해서 오른쪽에 넣고 오른쪽 스택 문자 하나씩 pop출력
-> abcy (왼) x(오) -->왼에서 오로 pop xycba ->이거 다시 pop하면 abcdyx (뒤집은걸 다시 뒤집은 것 뿐)
-> 왼쪽에 몰아넣고 배열을 만들어서 배열 마지막 인덱스부터 pop()으로 넣어 만들어도 됨
public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //왼쪽 스택 Stack Sstack = new Stack<>(); //오른쪽 스택 Stack s2 = new Stack(); //초기 스택에 저장할 문자 String input = br.readLine(); for(char a: input.toCharArray()) Sstack.push(a); int t = Integer.valueOf(br.readLine()); //테스트 케이스 만큼 등록된 명령어 실행 while(t-- > 0 ){ input = br.readLine(); if(input.contains("P")){ Sstack.push(input.charAt(input.indexOf(' ')+1)); } if(input.equals("L")){ if(Sstack.empty())continue; s2.push(Sstack.pop()); } if(input.equals("D")){ if(s2.empty())continue; Sstack.push(s2.pop()); } if(input.equals("B")){ if(Sstack.empty())continue; Sstack.pop(); } } //하나로 합치기 while(!Sstack.empty()) s2.push(Sstack.pop()); //출력을 위함 while(!s2.empty()) bw.write((char)s2.pop()); bw.flush(); bw.close(); }
출력부분 배열처리
//하나로 합치기 while(!s2.empty()) Sstack.push(s2.pop()); //출력을 위함 int size = Sstack.size(); result = new char[size]; while(!Sstack.empty()){ result[--size] = (char)Sstack.pop(); }
배운점 -
스택다루기
P $같은 인풋 처리할때, split() 자주썼는데, indexof랑 substring도 괜춘할듯하다!
두번 뒤집에서 원상복구하기 1 pop- 2push - 2pop
'자료구조와 알고리즘 > 문제풀기' 카테고리의 다른 글
백준 1158 - 요세푸스 문제 (0) 2023.04.05 백준 10845 - 큐 구현 (0) 2023.04.05 백준 1874 - 스택수열 (0) 2023.04.04 백준 9012 - 괄호 (0) 2023.04.04 백준 9093 - 단어뒤집기 (0) 2023.04.04