1. 문제
https://www.acmicpc.net/problem/1251
1251번: 단어 나누기
알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다. 먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다
www.acmicpc.net
2. 풀이
문자열 관련 문제이고 브루트포스로 해결하였다.
단어를 세 부분으로 나누어야 하기에, 나누는 포인트(/) 2개를 브루트포스 알고리즘으로 나눌 수 있는 모든 문자열을 구하여 각각 뒤집고 합친 후 리스트에 추가한다.
그 후 Collections.sort()로 정렬하면 기본적으로 오름차순으로 정렬되기에, 리스트의 첫 번째 인덱스에 들어있는 문자열이 사전순으로 가장 앞선 문자열이 된다.
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));
String input = br.readLine();
List<String> stringList = new ArrayList<>();
for (int i = 1; i < input.length() - 1; i++) {
for (int j = i + 1; j < input.length(); j++) {
String tempString = new String();
tempString += reverse_String_method(0, i, input);
tempString += reverse_String_method(i, j, input);
tempString += reverse_String_method(j, input.length(), input);
stringList.add(tempString);
}
}
Collections.sort(stringList);
bw.write(stringList.get(0));
bw.flush();
bw.close();
br.close();
}
private static String reverse_String_method(int i, int j, String input) {
StringBuilder sb = new StringBuilder();
sb.append(input.substring(i, j));
sb.reverse();
return sb.toString();
}
}