๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 11656๋ฒˆ ์ ‘๋ฏธ์‚ฌ ๋ฐฐ์—ด ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 3.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 11656๋ฒˆ ์ ‘๋ฏธ์‚ฌ ๋ฐฐ์—ด ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

ํ•ด๊ฒฐ๋ฒ•

๋ฌธ์ œ ๋ถ„์„์„ ํ•ด๋ณด์ž.

 

์šฐ์„  ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ n์ธ ๋ฌธ์ž๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ n-1, n-2 ... 1์ด ๋  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ„๊ณ  ํ•ด๋‹น ๋ฌธ์ž ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋ฉด ๋œ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

ํ˜น์‹œ ๋ชจ๋ฅด๋‹ˆ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐ ํ•ด๋ณด์ž.

 

์ผ๋‹จ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ด๋ฒˆ ๋ฐ˜๋ณต์˜ ์ฃผ์ฒด์ธ n์ด ๋  ๊ฒƒ์ด๋ฏ€๋กœ n์€ ์ตœ๋Œ€ 1,000์ด๋‹ค.

 

๋˜ํ•œ ์šฐ๋ฆฌ๋Š” java์— ํฌํ•จ๋œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๋ฐ, java ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Object์ธ ๊ฒฝ์šฐ TimSort๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.


TimSort์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ํ‰๊ท  O(n log n)์ด๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n^2) ์ด๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ์˜ ์ž…๋ ฅ์—๋Š” 1,000,000 ๋ฒˆ ์ดํ•˜์˜ ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์‹œ๊ฐ„ ์ œํ•œ์ด 1์ดˆ์ด๋ฏ€๋กœ ์ถฉ๋ถ„ํžˆ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ด๋‹ˆ ์šฐ๋ฆฌ์˜ ํ’€์ด์—์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

์ •๋‹ต ์ฝ”๋“œ

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[] s = br.readLine().split("");
    String[] answer = new String[s.length];

    for(int i = 0; i < s.length; i++) {
      StringBuilder sb = new StringBuilder();
      for(int j = i; j < s.length; j++) {
        sb.append(s[j]);
      }
      answer[i] = sb.toString();
    }

    Arrays.sort(answer);

    for(String str : answer) {
      bw.write(str + "\n");
    }
    bw.flush();
    bw.close();
  }
}

๊ทธ๋ฆฌ๊ณ  ์—ฐ์Šต์‚ผ์•„ Comparator์„ ์ด์šฉํ•ด ์ •๋ ฌ ๊ธฐ์ค€ ์žฌ์ •์˜๋กœ ์ •๋ ฌ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;

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[] s = br.readLine().split("");
    String[] answer = new String[s.length];

    for(int i = 0; i < s.length; i++) {
      StringBuilder sb = new StringBuilder();
      for(int j = i; j < s.length; j++) {
          sb.append(s[j]);
      }
      answer[i] = sb.toString();
    }

    Comparator<String> myComparator = new Comparator<String>() {
      @Override
      public int compare(String s1, String s2) {
          return s1.compareTo(s2);
      }
    };

    Arrays.sort(answer, myComparator);

    for(String str : answer) {
      bw.write(str + "\n");
    }
    bw.flush();
    bw.close();
  }
}

 

๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์ž˜ ํ†ต๊ณผํ•œ๋‹ค.


๋ฌธ์ œ ํšŒ๊ณ 

ํšŒ๊ณ 

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€