자바썸
자바랑 썸타는중
자바썸

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
자바썸

자바랑 썸타는중

백준 5397. 키로거(JAVA)
문제풀이/백준

백준 5397. 키로거(JAVA)

2022. 5. 24. 11:00

○ 문제 요약

창영이가 강산이의 비밀번호를 알아낼 수 있도록 도와주자!

 

○ 문제 풀이

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

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int L = Integer.parseInt(br.readLine());


        for(int i = 0 ; i < L; i++){
            String str = br.readLine();

            String password = solution(str);
            System.out.println(password);
        } 
    }

    public static String solution(String str){
        Stack<Character> stack = new Stack<>();
        Stack<Character> tmp = new Stack<>();
        StringBuilder sb = new StringBuilder();

        for(int j = 0 ; j < str.length(); j++){
            switch(str.charAt(j)){
                case'<':
                    if(!stack.isEmpty()) tmp.push(stack.pop());
                    break;
                case'>':
                    if(!tmp.isEmpty()) stack.push(tmp.pop());
                    break;
                case'-':
                    if(!stack.isEmpty()) stack.pop();
                    break;
                default:
                    stack.push(str.charAt(j));
                    break;
            }
        }
        while(!tmp.isEmpty()){
            stack.push(tmp.pop());
        }

        for(int j = 0 ; j < stack.size(); j++){
            sb.append(stack.elementAt(j));
        }
        return sb.toString();
    }
}

사용자 정의 함수를 만들지 않고 main 함수에서 다 해결하려고 했는데 이상하게 stack.clear()를 해도 이전 값이 다음 값과 같이 나와서 따로 함수를 정의하고 푸는 방법으로 바꿨다.

 

문제를 우리가 평소 로그인할 때, 비밀번호를 입력하는 창을 구현한다고 생각하면 쉬울 거 같다.

 

Stack을 두 개 만들어주고 주 Stack은 stack이 담당하고 서브 Stack은 tmp가 담당한다.

stack에 [B, P]가 들어있고 다음 입력받은 값이 '<'일 경우 B와 P사이에 입력을 해야 하기 때문에 P를 tmp로 옮겨놓고 입력한다.

 

'>'일 경우 tmp에 옮겨놓은 값을 다시 원래 stack으로 가져오면 된다.

'-'일 경우 문제에서 말했듯이 stack에 마지막에 있는 값을 없애주면 된다.

이밖에 문자나 숫자가 들어오면 stack에 하나씩 넣어준다.

 

stack에 들어있는 값을 인덱스 순서대로 뽑아서 sb에 저장하고 그 값을 반환해주면 된다.

 

○ 결과

'문제풀이 > 백준' 카테고리의 다른 글

백준 12018. Yonsei TOTO(JAVA)  (0) 2022.06.10
백준 1697. 숨바꼭질 (JAVA)  (0) 2022.05.19
백준 1620. 나는야 포켓몬 마스터 이다솜  (0) 2022.05.18
백준 10816. 숫자 카드2 (JAVA)  (0) 2022.05.17
백준 1920. 수 찾기(JAVA)  (0) 2022.05.16
    '문제풀이/백준' 카테고리의 다른 글
    • 백준 12018. Yonsei TOTO(JAVA)
    • 백준 1697. 숨바꼭질 (JAVA)
    • 백준 1620. 나는야 포켓몬 마스터 이다솜
    • 백준 10816. 숫자 카드2 (JAVA)
    자바썸
    자바썸

    티스토리툴바