관리 메뉴

Storage Gonie

(4) [C++, Java] 백준 No.1406 : 에디터 본문

알고리즘/백준풀이2. 스택

(4) [C++, Java] 백준 No.1406 : 에디터

Storage Gonie 2019. 4. 24. 15:22
반응형

문제

풀이

# 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);
    }
}
반응형
Comments