https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
문제
코드
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();
StringBuilder ve = new StringBuilder();
String str = br.readLine();
boolean flag=false;
for(int i=0;i<str.length();i++) {
char c = str.charAt(i);
if(c == '<') {
if(ve.length()!=0) { //문자열 뒤집어 저장
sb.append(ve.reverse()); ve.setLength(0);
}
flag=true;
}
if(c == '>') {
flag=false;
sb.append(c);
continue;
}
if(flag) {
sb.append(c);
}
else {
if(c==' ') { //문자열 뒤집어 저장
sb.append(ve.reverse() + " ");
ve.setLength(0); //sb초기화
}else {
ve.append(c);
}
}
}
//문자열 뒤집어 저장
if(ve.length()!=0) sb.append(ve.reverse());
bw.write(sb+""); bw.flush();
}
}
해결방법
문자열을 뒤집기 위한 방법으로 스택이나 StringBuilder를 사용할 수 있는데 StringBuiler를 사용했다.
'<'과 '>' 사이에 들어있는 문자열은 그대로 유지해야하므로 변수 flag를 두어 현재 '<', '>' 사이에 위치해있는지를 판단하였다. '<', '>' 사이에 위치해있다면 문자를 그대로 결과값을 출력하는 sb에 붙이고 아니라면 ve에 붙여 공백이나 '<'를 만나는 경우 문자열을 뒤집어 sb에 붙여주었다.
'알고리즘 > 백준' 카테고리의 다른 글
1302번 : 베스트셀러 (0) | 2022.08.17 |
---|---|
14425번 : 문자열 집합 (0) | 2022.08.17 |
19941번 : 햄버거 분배 (0) | 2022.08.16 |
1654번 : 랜선 자르기 (0) | 2022.08.05 |
2865번 : 나는 위대한 슈퍼스타K (0) | 2022.08.05 |