코딩테스트/BOJ

[BOJ] 1251 단어 나누기 - JAVA

5월._. 2022. 7. 1.
728x90

1. 문제

 

1251번: 단어 나누기

알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다. 먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다

www.acmicpc.net

알파벳 소문자로 이루어진 단어를 가지고 아래와 같은 과정을 해 보려고 한다.
먼저 단어에서 임의의 두 부분을 골라서 단어를 쪼갠다. 즉, 주어진 단어를 세 개의 더 작은 단어로 나누는 것이다. 각각은 적어도 길이가 1 이상인 단어여야 한다. 이제 이렇게 나눈 세 개의 작은 단어들을 앞뒤를 뒤집고, 이를 다시 원래의 순서대로 합친다.
예를 들어,
단어 : arrested
세 단어로 나누기 : ar / rest / ed
각각 뒤집기 : ra / tser / de
합치기 : ratserde
단어가 주어지면, 이렇게 만들 수 있는 단어 중에서 사전순으로 가장 앞서는 단어를 출력하는 프로그램을 작성하시오.


2. 풀이

1.  입력 문자열을 char 배열로 변경한다.

2.  String을 담을 ArrayList를 만든다.

3.  i, j를 이용해 문자열을 나눈다. 쪼갠 문자열을 뒤집어서 tmp StringBuilder에 저장한다. tmp는 String으로 바꿔서 list에 넣는다.

4.  list를 정렬한 뒤, 가장 작은 문자를 출력한다.

import java.io.*;
import java.util.*;

public class BOJ_1251_단어나누기 {
   public static void main(String[] args) throws IOException {
      char[] word = new BufferedReader(new InputStreamReader(System.in)).readLine().toCharArray();
      ArrayList<String> list = new ArrayList<>();
      StringBuilder tmp;
      for(int i=0;i<word.length-2;i++){
         for(int j=i+1;j<word.length-1;j++){
            tmp = new StringBuilder();
            for(int w=i;w>=0;w--){
               tmp.append(word[w]);
            }
            for(int w=j;w>i;w--){
               tmp.append(word[w]);
            }
            for(int w=word.length-1;w>j;w--){
               tmp.append(word[w]);
            }
            list.add(tmp.toString());
         }
      }
      Collections.sort(list);

      System.out.println(list.get(0));

   }
}

3. 결과

가장 작은 두 문자를 구해서 나눠보려고 했는데 잘 안됐다.

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 10825 국영수 - JAVA  (0) 2022.07.03
[BOJ] 2003 수들의 합 2 - JAVA  (0) 2022.07.02
[BOJ] 2217 로프 - JAVA  (0) 2022.06.30
[BOJ] 1302 베스트셀러 - JAVA  (0) 2022.06.25
[BOJ] 1269 대칭 차집합 - JAVA  (0) 2022.06.24

댓글