IT 개발 관련/[Algorithm]

[백준] 1251번 : 단어 나누기 - Java

Baileyton 2024. 6. 22. 22:35
728x90

문제

https://www.acmicpc.net/problem/1251

주어진 문자열을 세 부분으로 나누고, 각 부분을 뒤집은 후 합친 문자열 중에서 사전순으로 가장 앞서는 문자열을 찾는 문제입니다.

접근 방법

문자를 입력 받고, 세 부분으로 문자를 나누어 각 부분을 뒤집고, 뒤집은 세 단어를 합쳐 출력

구현

  • 문자열 합치기:
    • 뒤집은 세 부분을 합쳐 새로운 문자열을 만듭니다.
    • 이 문자열을 리스트에 추가합니다.
  • 사전순 비교와 출력:
    • 모든 가능한 문자열을 리스트에 추가한 후, Collections.sort()를 사용하여 사전순으로 정렬합니다.
    • 정렬된 리스트의 첫 번째 요소를 출력합니다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = br.readLine();
        ArrayList<String> wordList = new ArrayList<>();

        for(int i = 1; i < input.length() - 1; i++) {
            for (int j = i + 1; j < input.length(); j++) {
                String word1 = new StringBuilder(input.substring(0, i)).reverse().toString();
                String word2 = new StringBuilder(input.substring(i, j)).reverse().toString();
                String word3 = new StringBuilder(input.substring(j)).reverse().toString();

                String combined = word1 + word2 + word3;

                wordList.add(combined);
            }
        }

        Collections.sort(wordList);

        System.out.println(wordList.get(0));
    }
}

 

메모리:17332kb 시간:196ms

728x90