본문 바로가기
알고리즘 문제풀이 입문: 코딩테스트 대비/섹션 1. String(문자열)

특정 문자 뒤집기

by _비니_ 2024. 4. 2.

 

문제 이해

 

특수 문자는 그 자리에 고정시키고, 그 외의 문자들만 거꾸로 배치해서 출력하는 문제이다.

 

문제 해결

 

나는 이 문제를 Stack으로 접근했다. Stack은 나중에 들어간 것이 먼저 나오는 LIFO 구조로 거꾸로 출력하는 것에 적합하다고 생각했다. 

특수문자는 그 자리에 고정해야하므로 Stack에는 특수문자를 제외한 것들만 push 해주어야 한다.

Stack<Character> specificCh = new Stack<>();

for (char word : s.toCharArray()) { //특수 문자 제외하고 스택에 push
    if((word >= 'A' && word <= 'Z') || (word >= 'a' && word <= 'z') || (word >= '0' && word <= '9')) {
        specificCh.push(word);
    }
}

 

출력해줄 최종 String 변수 result를 만들어준 후 차례로 돌며 만약 툭수문자가 아닌 것을 마주했다면 Stack에서 pop해주고,

특수문자를 마주했다면 문자 그대로 result 변수에 넣어주면 된다!

String result = "";
for (char word : s.toCharArray()) {
    if((word >= 'A' && word <= 'Z') || (word >= 'a' && word <= 'z') || (word >= '0' && word <= '9')) {
        result += specificCh.pop();
    } else {
        result += word;
    }
}

 

 

최종 코드

 

import java.util.Scanner;
import java.util.Stack;

public class P05_특정문자뒤집기 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();

        Stack<Character> specificCh = new Stack<>();

        for (char word : s.toCharArray()) { //특수 문자 제외하고 스택에 push
            if((word >= 'A' && word <= 'Z') || (word >= 'a' && word <= 'z') || (word >= '0' && word <= '9')) {
                specificCh.push(word);
            }
        }

        String result = "";
        for (char word : s.toCharArray()) {
            if((word >= 'A' && word <= 'Z') || (word >= 'a' && word <= 'z') || (word >= '0' && word <= '9')) {
                result += specificCh.pop();
            } else {
                result += word;
            }
        }

        System.out.println(result);
    }
}
반응형