코딩테스트

[백준 / 실버5] 1251 : 단어 나누기 (JAVA)

lyndaa 2023. 3. 17. 17:44

문제


풀이 방법

  • 문자열을 나누기 위한 두 지점 i와 j를 잡고 이중포문을 통해 모든 경우의 수를 확인한다. 
    • [0, i), [i, j), [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));


    }

}