풀이 방법
- 문자열을 나누기 위한 두 지점 i와 j를 잡고 이중포문을 통해 모든 경우의 수를 확인한다.
- 문자열 연산을 위해 StringBuilder 사용한다.
- String : 문자열 연산이 적고 멀티쓰레드 환경일 경우
- StringBuffer : 문자열 연산이 많고 멀티쓰레드 환경일 경우
- StringBuilder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우
- 연산한 문자열의 결과를 모두 ArrayList에 저장하여 정렬을 통해 가장 앞서는 단어를 출력한다.
코드
package boj1251;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
List<String> list = new ArrayList<>();
for(int i=1; i<str.length()-1; i++){
for(int j=i+1; j<str.length(); j++) {
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder(str.substring(0, i));
StringBuilder sb2 = new StringBuilder(str.substring(i, j));
StringBuilder sb3 = new StringBuilder(str.substring(j));
sb.append(sb1.reverse()).append(sb2.reverse()).append(sb3.reverse());
list.add(String.valueOf(sb));
}
}
Collections.sort(list);
System.out.println(list.get(0));
}
}