문제 이해
특수 문자는 그 자리에 고정시키고, 그 외의 문자들만 거꾸로 배치해서 출력하는 문제이다.
문제 해결
나는 이 문제를 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);
}
}
반응형
'알고리즘 문제풀이 입문: 코딩테스트 대비 > 섹션 1. String(문자열)' 카테고리의 다른 글
가장 짧은 문자 거리 (1) | 2024.04.02 |
---|