白駿17413単語反転2
https://www.acmicpc.net/problem/17413
単語は1題の適用バージョンを反転し,タグ内の単語とタグ外の単語を大別することがこの問題のポイントである.
タグ変数を宣言して、タグ内の単語を区別します. if"<"then tag=true,スタック中pop() if">"then tag=false,直接出力 ifタグの単語であれば を出力する. elseラベル以外の単語は です.スタック() にプッシュの空白に遭遇した場合、スタックが空きになるまでpop() がスタック内に存在する.
pop()タグの中の文字を区別するためのタグ変数 とは思わなかった.タグの文字は、 を独立して認識できません.
トラブルシューティング
単語は1題の適用バージョンを反転し,タグ内の単語とタグ外の単語を大別することがこの問題のポイントである.
タグ変数を宣言して、
pop()
ソースコード
import java.io.*;
import java.util.Stack;
/**
* 단어 뒤집기 문제 응용 - 스택
* <> 태그 안에 있는 문자는 그대로 출력
* <> 태그 밖에 있는 문자는 뒤집어서 출력
*/
public class b17413 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
boolean tag = false; // 태그 구분 변수
Stack<Character> stack = new Stack<>();
for (char ch : input.toCharArray()) {
if (ch == '<') { // 시작하는 태그라면
tag = true;
while (!stack.empty()) {
bw.write(stack.pop()); // 태그 전까지의 단어 뒤집어서 출력
}
bw.write(ch); // < 출력
} else if (ch == '>') { // 끝나는 태그라면
tag = false;
bw.write(ch); // > 출력
} else if (tag) { // 태그 안에 있는 단어라면
bw.write(ch); // 그대로 출력
} else { // 태그 안에 있는 단어가 아니라면 기존 단어 뒤집기와 동일한 로직
if (ch == ' ') {
while (!stack.empty()) {
bw.write(stack.pop());
}
bw.write(ch);
} else {
stack.push(ch);
}
}
}
while (!stack.empty()) {
bw.write(stack.pop());
}
bw.flush();
}
}
足りないところ
Reference
この問題について(白駿17413単語反転2), 我々は、より多くの情報をここで見つけました https://velog.io/@im_lily/백준-17413-단어뒤집기2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol