๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[๋ฐฑ์ค€/1141/์ ‘๋‘์‚ฌ/์‹ค๋ฒ„1]

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 3. 13.

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

 

1141๋ฒˆ: ์ ‘๋‘์‚ฌ

์ ‘๋‘์‚ฌX ์ง‘ํ•ฉ์ด๋ž€ ์ง‘ํ•ฉ์˜ ์–ด๋–ค ํ•œ ๋‹จ์–ด๊ฐ€, ๋‹ค๋ฅธ ๋‹จ์–ด์˜ ์ ‘๋‘์–ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์ง‘ํ•ฉ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, {hello}, {hello, goodbye, giant, hi}, ๋น„์–ด์žˆ๋Š” ์ง‘ํ•ฉ์€ ๋ชจ๋‘ ์ ‘๋‘์‚ฌX ์ง‘ํ•ฉ์ด๋‹ค. ํ•˜์ง€๋งŒ, {hello, hell}, {giant,

www.acmicpc.net

 

<<ํ’€์ด>>

 

์‹œ๊ฐ„๋ณต์žก๋„ : O(N^3)

 

์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ• : Comparable<T> ์ •๋ ฌ

 

->

์šฐ์„ , ์ด ๋ฌธ์ œ๋Š” Comparable<T>๋กœ ๊ฐ์ฒด๋ฅผ ์ •๋ ฌ์‹œํ‚จ ๋’ค์— ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ, ์ด์ƒํ•˜๊ฒŒ ์ด ๋ฌธ์ œ๊ฐ€ ํ‹€๋ ธ๋‹ค... ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” ๋‹ค ๋งž๋А๋ฐ ๋ง์ด๋‹ค..

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

class Data implements Comparable<Data>{
    String data= "";
    int datalength = data.length();

    public Data(String data, int datalength) {
        this.data = data;
        this.datalength = datalength;
    }


    @Override
    public int compareTo(Data o) {

        return this.datalength - o.datalength;
    }
}

class Main {
    static int answer2 = 0;

    private int solution(Data[] brr) {
        int answer = 0;
        for (int i = 0; i < brr.length - 1; i++) {
            answer = 0;
            int count = 0;
            for (int j = i; j < brr.length; j++) {
                if (brr[j].data.indexOf(brr[i].data) != 0 ) {
                    for (int k = j; k < brr.length; k++) {
                        if(brr[k].datalength != brr[j].datalength && brr[k].data.indexOf(brr[j].data) == 0) {
                            count--;
                        }
                    }
                    count++;
                }

            }
            answer = count + 1;
            answer2 = Math.max(answer2, answer);
        }
        return answer2;
    }



    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] arr = new String[n];
        for (int i = 0; i < n; i++) {
            String a = br.readLine();
            arr[i] = a;
        }

        Data[] brr = new Data[n];

        for (int i = 0; i < n; i++) {
            brr[i] = new Data(arr[i], arr[i].length());
        }

        Arrays.sort(brr);
        System.out.println(T.solution(brr));

    }
}

 

 

<<์ตœ์ข… ํ’€์ด>>

์ด ๋ฌธ์ œ๋Š” ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๊ณ  ํ‘ธ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค..!!

 

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด์ „๊บผ์™€๋งŒ ๋น„๊ตํ•ด๋„ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์‚ฌ์ „ ์ˆœ์œผ๋กœ ํ•ด์„œ ํ˜„์žฌ ๊ฒƒ์ด ์ด์ „ ๊ฒƒ๊ณผ ์กฐํ•ฉ์ด ์•ˆ ๋˜๊ณ , ๊ทธ ๋‹ค์Œ ๊ณผ๋„ ์กฐํ•ฉ์ด ์•ˆ ๋œ๋‹ค๋ฉด ๋‹น์—ฐํžˆ ์ด์ „ ๊ฐ’๊ณผ ๊ทธ ๋‹ค์Œ ๊ฐ’ ๊ณผ๋„ ์กฐํ•ฉ์ด ์•ˆ ๋œ๋‹ค.

์ด๋Ÿฐ ์ƒ๊ฐ์œผ๋กœ ์ ‘๊ทผ์„ ํ•œ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ด๊ฑด ๊ธ€๋กœ๋งŒ ๋ณด๋Š” ๊ฒƒ ๋ณด๋‹ค ์ง์ ‘ ์จ๋ณด๋ฉด์„œ ๋…ผ๋ฆฌ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ข‹๋‹ค.

 

indexOf ๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์€ ์ข‹์€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ๋ฐ”๋กœ startWith์ธ ์…ˆ์ด๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ตณ์ด

 

indexOf๊ฐ€ ๊ฐ’์ด 0์ธ๊ฐ€์— ๋Œ€ํ•ด ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค ใ…‹ใ…‹ใ…‹

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

class Data implements Comparable<Data> {
    String data;

    public Data(String data) {
        this.data = data;
    }

    @Override
    public int compareTo(Data o) {
        // ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ
        return this.data.compareTo(o.data);
    }
}

class Main {
    private int solution(Data[] brr) {
        // ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ
        Arrays.sort(brr);

        int count = 1; // ์ตœ์†Œ ํ•˜๋‚˜์˜ ๋‹จ์–ด๋Š” ํ•ญ์ƒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
        for (int i = 0; i < brr.length - 1; i++) {
            // ํ˜„์žฌ ๋‹จ์–ด๊ฐ€ ๋‹ค์Œ ๋‹จ์–ด์˜ ์ ‘๋‘์‚ฌ์ธ์ง€ ํ™•์ธ
            if (!brr[i + 1].data.startsWith(brr[i].data)) {
                // ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ถ€๋ถ„์ง‘ํ•ฉ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) throws Exception {
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Data[] brr = new Data[n];

        for (int i = 0; i < n; i++) {
            String data = br.readLine();
            brr[i] = new Data(data);
        }

        System.out.println(T.solution(brr));
    }
}

 

 

<<์ถ”๊ฐ€ ๊ณต๋ถ€>>

 

startsWtih : ์ฒซ ์‹œ์ž‘์˜ ๋ฌธ์ž์—ด์ด ํŠน์ • ๊ฐ’์ธ๊ฐ€?

 

indexOf : ํŠน์ • ๋ฌธ์ž๊ฐ€ ๋ช‡ ๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์žˆ๋Š”๊ฐ€?

 

๊ฐ์ฒด ์ •๋ ฌ

Comparable<T>

 

1. ์‚ฌ์ „์ˆœ

 @Override
    public int compareTo(Data o) {
        // ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ
        return this.data.compareTo(o.data);
    }

 

2. ์˜ค๋ฆ„์ฐจ์ˆœ

 

 @Override
    public int compareTo(Data o) {

        return this.datalength - o.datalength;
    }

 

3. ๋‚ด๋ฆผ์ฐจ์ˆœ

 

 @Override
    public int compareTo(Data o) {

        return o.datalength - this.datalength;
    }

 

๋Œ“๊ธ€