[17413]単語反転2
🔗 質問リンク
https://www.acmicpc.net/problem/17413
問題の説明
文字列Sが与えられると、その文字列の中で単語だけを反転させたい.
まず、文字列Sは、以下のルールを遵守する.
小文字("a"-"z")、数字("0"-"9")、スペース(")、特殊文字("<"、">")のみで構成されます.
文字列の先頭と末尾はスペースではありません.
「<」と「>」は文字列内で交互に現れ、「<」が先に現れる.また、2文字の個数は同じです.
1行目に文字列Sの単語を逆さに出力します.
⚠▼制限
最初の行は文字列Sを与える.
Sの長さは100000以下である.
💡 プール(言語:Java)
反転出力は、入る逆の順序で出力されるLIFOである.つまり,スタックを利用して実現すればよい.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] input = br.readLine().toCharArray();
StringBuilder answer = new StringBuilder();
Stack<Character> stack = new Stack<>();
// 태그 안인지 알려주는 변수
boolean flag = false;
for (char ch : input) {
// 태그 시작
if (ch == '<') {
// 앞에 글자들 아직 뒤집어서 정답에 반영 안했으면 처리
while (!stack.isEmpty())
answer.append(stack.pop());
answer.append('<');
flag = true;
// 태그 종료
} else if (ch == '>') {
answer.append('>');
flag = false;
// 태그 안의 내용은 그대로 넣기
} else if (flag) {
answer.append(ch);
// 태그 밖일 때, 공백 만났을 경우
} else if (ch == ' ') {
// 공백 직전까지 글자를 뒤집어서 넣어줌 = 스택에서 pop()
while (!stack.isEmpty())
answer.append(stack.pop());
answer.append(' ');
// 태그 밖에서 공백아닌 글자들은 전부 스택에 넣어줌
} else {
stack.push(ch);
}
}
// for문을 다돌았을때 아직 처리안된 stack의 글자들을 뒤집어서 넣기
while (!stack.isEmpty())
answer.append(stack.pop());
System.out.print(answer);
}
}
Reference
この問題について([17413]単語反転2), 我々は、より多くの情報をここで見つけました https://velog.io/@shiningcastle/17413-단어-뒤집기-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol