https://www.acmicpc.net/problem/17413
1. 아이디어
StringTokenizer와 StringBuilder의 조합으로 해결할 수 있다.
2. 문제풀이
태그 사이의 단어들은 그대로 태그 밖의 단어들은 역순으로 출력해야한다. 먼저 태그를 구분자로 하고 구분자까지 포함하는 StringTokenizer로 입력을 받았다. 토큰에서 열린 태그를 발견했을 경우 다음 토큰은 태그의 단어가 되고 그 다음 토큰은 닫는 태그가 되므로 총 3개의 토큰을 StringBuilder에 넣어줬다. 만약 토큰이 열린 태그가 아닌 경우 해당 토큰은 태그 밖 단어들이 되므로 다시 이 토큰을 공백을 구분자로 하는 StringTokenizer로 파싱한 후 StringBuilder의 reverse 메서드로 뒤집어서 넣어줬다. 기존 출력을 위한 StringBuilder와 구분해야하는 점에 주의해야 한다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine(), "<>", true);
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (token.equals("<")) {
sb.append(token).append(st.nextToken()).append(st.nextToken());
continue;
}
StringTokenizer st2 = new StringTokenizer(token, " ", true);
while (st2.hasMoreTokens()) {
sb.append(new StringBuilder(st2.nextToken()).reverse());
}
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 2847번 - 게임을 만든 동준이 [Java] (0) | 2025.01.15 |
---|---|
[백준] 2756번 - 다트 [Java] (0) | 2025.01.15 |
[백준] 2999번 - 비밀 이메일 [Java] (0) | 2025.01.14 |
[백준] 28702번 - FizzBuzz [Java] (0) | 2025.01.14 |
[백준] 5635번 - 생일 [Java] (0) | 2025.01.14 |