Coding Test 연습
[Baekjoon 17413번] 문자열 뒤집기2 문제 (with 자바)
LearnerKSH
2021. 9. 15. 19:05
728x90
반응형
문제 17413번 - 문자열 뒤집기2 문제
https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net

풀이
package seohae.algorithm.level1;
import java.io.*;
import java.util.*;
/**
* https://www.acmicpc.net/problem/17413
*/
public class Problem_007_17413 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
Stack<Character> stack = new Stack<Character>();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = sc.nextLine();
input += " "; /* 마지막 단어도 걸리도록 추가 */
boolean isStart = false; /* '<' '>' 사이에 존재 여부 */
for (char ch : input.toCharArray()) {
if (ch == '<') {
/* 그 전에 push 된 데이터는 pop() */
while (!stack.isEmpty()) {
bw.write(stack.pop());
}
bw.write(ch);
isStart = true; /* '<', '>' 존재여부 true */
} else if ( ch == '>') { /* '<', '>' 사이 종료 */
bw.write(ch);
isStart = false; /* '<', '>' 존재여부 false */
} else if (isStart) { /* '<', '>' 사이의 문자열은 그대로 출력 */
bw.write(ch);
} else { /* !isStart 일 경우 (뒤집어야할 문자열) */
if (ch == ' ' || ch == '\n') { /* 단어 끝 */
while (!stack.isEmpty()) { /* 단어가 들어가있을 stack 을 pop() */
bw.write(stack.pop());
}
bw.write(ch); // 공백
} else { /* push */
stack.push(ch);
}
}
}
bw.flush();
}
}
반응형