๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 1181 ๋‹จ์–ด ์ •๋ ฌ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 14.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/1181

    • ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ N๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
      1. ๊ธธ์ด๊ฐ€ ์งง์€ ๊ฒƒ๋ถ€ํ„ฐ
      2. ๊ธธ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ์‚ฌ์ „ ์ˆœ์œผ๋กœ
    • ๋‹จ, ์ค‘๋ณต๋œ ๋‹จ์–ด๋Š” ํ•˜๋‚˜๋งŒ ๋‚จ๊ธฐ๊ณ  ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค.
    • ์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 20,000)
    • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 50์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.
    • ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜์—ฌ ๋‹จ์–ด๋“ค์„ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • ๋จผ์ € ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ํ•œ๋ฒˆ ์ •๋ ฌํ•œ ํ›„, ๊ฐ™์€ ๊ธ€์ž๊ธธ์ด๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ํ•œ ๋ฌธ์ž์”ฉ ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ–ˆ๋‹ค.

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ๋งž์•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค... ๋‹ค๋ฅธ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํ•œ๋ฒˆ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.. ใ…œใ…œ

์‹œ๊ฐ„์ด... ใ„ทใ„ท
ํ’€์–ด๋„ ์Šฌํ”„๋‹ค...

์ฝ”๋“œ

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

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

        int N = Integer.parseInt(br.readLine());

        // ์ค‘๋ณต๋œ ๋‹จ์–ด๋“ค์€ ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋˜๋ฏ€๋กœ
        Set<String> hash = new HashSet<String>();

        for(int i = 0; i < N; i++){
            String s = br.readLine();

            hash.add(s);
        }

        // ์ •๋ ฌ๋œ ๋‹จ์–ด๋“ค์„ ์ €์žฅํ•  ๋ฐฐ์—ด
        String arr[] = new String[hash.size()];

        int cnt = 0;

        // set์„ ๋‹ค์‹œ ๋ฐฐ์—ด๋กœ ์ „ํ™˜
        for(String i : hash){
            arr[cnt] = i;

            cnt = cnt + 1;
        }

        // ์ €์žฅ๋œ ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด ๊ธธ์ด๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        Arrays.sort(arr, (String s1, String s2) -> s1.length() - s2.length());

        // ๋ฌธ์ž์—ด ๊ธธ์ด๋Œ€๋กœ ์ •๋ ฌ๋์œผ๋‹ˆ ์ด์ œ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌ
        // i๋ฒˆ์งธ ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ
        for(int i = 0; i < arr.length; i++){
            // i๋ฒˆ ๋””์Œ ๋ฌธ์ž์—ด๊ณผ ๋น„๊ต
            for(int j = i + 1; j < arr.length; j++){
                // ๋น„๊ตํ–ˆ์„ ๋•Œ, i๋ฒˆ์งธ ๋ฌธ์ž์—ด๊ณผ ๊ธธ์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด
                if(arr[i].length() == arr[j].length()){
                    // ๊ทธ ๋‘ ๋ฌธ์ž์—ด๋ผ๋ฆฌ
                    for(int k = 0; k < arr[i].length(); k++){
                        // ์•ž์—์„œ ๋ถ€ํ„ฐ ๋ฌธ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด์„œ ๋งŒ์•ฝ i๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜
                        // ๋ฌธ์ž ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ๋‘ ๋ฌธ์ž์—ด์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟˆ
                        if(arr[i].charAt(k) > arr[j].charAt(k)){
                            String str = arr[i];

                            arr[i] = arr[j];
                            arr[j] = str;

                            break;
                        }

                        // ๊ธฐ์ค€ ๋ฌธ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ ๋” ์ž‘๋‹ค๋ฉด ๋น„๊ตํ•  ๋ฌธ์ž์—ด์„
                        // ๋‹ค์Œ ๋ฌธ์ž์—ด๋กœ ๊ต์ฒด
                        if(arr[i].charAt(k) < arr[j].charAt(k)){
                            break;
                        }
                    }
                }
            }
        }

        for(int i = 0; i < hash.size(); i++){
            System.out.println(arr[i]);
        }
    }
}