일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Django란
- 엑셀
- 시간복잡도
- iOS14
- EOF
- 프레임워크와 라이브러리의 차이
- UI한글변경
- correlation coefficient
- 입출력 패턴
- 연결요소
- 자료구조
- 이분그래프
- string 메소드
- double ended queue
- 백준
- string 함수
- 구조체와 클래스의 공통점 및 차이점
- 2557
- 알고리즘 공부방법
- 표준 입출력
- vscode
- c++
- Django의 편의성
- k-eta
- 매크로
- 장고란
- scanf
- Django Nodejs 차이점
- 입/출력
- getline
Archives
- Today
- Total
Storage Gonie
(4) [C++, Java] 백준 No.1406 : 에디터 본문
반응형
문제
풀이
# C++(내가 푼 방법)
- 스택의 내용을 모두 출력하거나 할 때 len = stack.size() for(i =0; i< len;i++) { stack.pop() } 이런방식으로 함.
#include <iostream>
#include <stack>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
stack<char> left_st, right_st;
string str;
int N;
cin >> str;
cin >> N;
// 커서가 맨 뒤에 있는 상태로 스택의 초기상태를 만들어 주는 것
for (int i = 0; i < str.size() ; i++)
left_st.push(str[i]);
// 명령어가 수행되는 부분
while(N--){
string cmd;
cin >> cmd;
if (cmd == "P") // 커서의 왼쪽에 문자를 추가함
{
char c;
cin >> c;
left_st.push(c);
}
else if (cmd == "L") // 커서를 왼쪽으로 한 칸 옮김
{
if (!left_st.empty()){
right_st.push(left_st.top());
left_st.pop();
}
}
else if (cmd == "D") // 커서를 오른쪽으로 한 칸 옮김
{
if (!right_st.empty()){
left_st.push(right_st.top());
right_st.pop();
}
}
else if (cmd == "B") // 커서 왼쪽에 있는 문자를 삭제함
{
if (!left_st.empty())
left_st.pop();
}
}
// 정상적으로 출력할 수 있도록 왼쪽스택의 내용을 오른쪽 스택으로 모두 옮기는 작업
int len;
len = left_st.size();
for (int i = 0 ; i < len ; i++)
{
right_st.push(left_st.top());
left_st.pop();
}
// 오른쪽 스택에 몰아둔 문자들을 모두 출력함.
len = right_st. size();
for (int i = 0 ; i < len ; i++)
{
cout << right_st.top();
right_st.pop();
}
}
# C++(백준)
- 스택의 내용을 모두 출력하거나 할 때 while(stack.empty()){ stack.pop() } 이런방식으로 함.
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
char a[600000];
int main() {
scanf("%s",a);
stack<char> left, right;
int n = strlen(a);
for (int i=0; i<n; i++) {
left.push(a[i]);
}
int m;
scanf("%d",&m);
while (m--) {
char what;
scanf(" %c",&what);
if (what == 'L')
{
if (!left.empty())
{
right.push(left.top());
left.pop();
}
}
else if (what == 'D')
{
if (!right.empty()) {
left.push(right.top());
right.pop();
}
}
else if (what == 'B')
{
if (!left.empty())
left.pop();
}
else if (what == 'P')
{
char c;
scanf(" %c",&c);
left.push(c);
}
}
while (!left.empty()) {
right.push(left.top());
left.pop();
}
while (!right.empty()) {
printf("%c",right.top());
right.pop();
}
printf("\n");
return 0;
}
# Java
import java.util.*;
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
Stack<Character> left = new Stack<Character>();
Stack<Character> right = new Stack<Character>();
for (int i=0; i<s.length(); i++) {
left.push(s.charAt(i));
}
int m = Integer.parseInt(br.readLine());
while (m-- > 0) {
String[] line = br.readLine().split(" ");
char what = line[0].charAt(0);
if (what == 'L') {
if (!left.empty()) {
right.push(left.pop());
}
} else if (what == 'D') {
if (!right.empty()) {
left.push(right.pop());
}
} else if (what == 'P') {
char c = line[1].charAt(0);
left.push(c);
} else if (what == 'B') {
if (!left.empty()) {
left.pop();
}
}
}
while (!left.empty()) {
right.push(left.pop());
}
StringBuilder sb = new StringBuilder();
while (!right.empty()) {
sb.append(right.pop());
}
System.out.println(sb);
}
}
반응형
'알고리즘 > 백준풀이2. 스택' 카테고리의 다른 글
(3) [C++, Java, Python] 백준 No.10799 : 쇠막대기 (0) | 2019.04.24 |
---|---|
(2) [C++, Java, Python] 백준 No.9012 : 괄호 (0) | 2019.04.23 |
(1) [C++,Java, Python] 백준 No.10828 : 스택(기본구현) (2) | 2019.04.22 |
Comments