문제
주어진 문자열 S중 단어만 찾아서, 단어만 뒤집어라
- 문제 자체는 이해하기가 쉽다.
- 단어는 태그가 아니며, 단어끼리는 ' ' 공백으로 띄워져있다.
풀이
- 단어가 시작하는 index를 저장할 start변수를 통해 현재 index까지의 StringBuilder를 만들고 reverse()메서드로 뒤집은뒤 replace메서드로 다시 부분 문자열을 변경하면 된다!
- java로 풀면 불변 클래스인 String으로는 데이터 수정이 되지않으므로 StringBuilder로 하는것이 적절하다.(String은 새로운 객체를 생성함, 하나의 인스턴스에서 수정이 되지않음)
코드
package baekjoon.구현;
import java.io.*;
public class Main17413 {
static String str;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
str = br.readLine();
StringBuilder sb = new StringBuilder(str);
int start = 0;
int end = 0;
boolean isWord = true;
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == '<'){
if(end != 0){
StringBuilder s = new StringBuilder();
for(int j = start; j <= end; j++){
s.append(str.charAt(j));
}
String reverseStr = s.reverse().toString();
sb.replace(start, end + 1, reverseStr);
}
isWord = false;
}else if(str.charAt(i) == '>'){
start = i + 1;
isWord = true;
}else if(isWord && str.charAt(i) == ' '){
StringBuilder s = new StringBuilder();
for(int j = start; j <= end; j++){
s.append(str.charAt(j));
}
String reverseStr = s.reverse().toString();
sb.replace(start, end + 1, reverseStr);
start = i + 1;
}else if(i == str.length() - 1){
// 마지막문자
StringBuilder s = new StringBuilder();
for(int j = start; j <= end + 1; j++){
s.append(str.charAt(j));
}
String reverseStr = s.reverse().toString();
sb.replace(start, str.length() + 1, reverseStr);
}
end = i;
}
bw.write(sb.toString()+"\n");
bw.flush();
bw.close();
}
}
/**
단어인 곳을 식별해서 단어가 시작하는 곳의 위치를 start변수에 담고,
start부터 end(현재 i)까지를 뒤집어서 변경해서 넣었음.
단어인곳을 식별하는건 isWord라는 boolean변수로 단어인지 아닌지 식별하였꼬, >가 끝난다음을 start로, ' '가 끝난 다음위치를 단어의 start로 하여서 품
**/
'algorithm' 카테고리의 다른 글
백준 1105(JAVA) (0) | 2021.07.19 |
---|---|
백준 14469(JAVA) (0) | 2021.07.17 |
백준 11000(JAVA) (0) | 2021.07.16 |
백준 9009(JAVA) (0) | 2021.07.14 |
백준 9081(JAVA) (0) | 2021.07.14 |