[Java] 백준 11478번: 서로 다른 부분 문자열의 개수

hansung's·2024년 3월 15일
0

문제 url:
서로 다른 부분 문자열의 개수

문제:

🤔 문제 알아보기


일단, 중복된 값을 저장하지 않기 때문에 HashSet을 활용할 수 있다.
이를 이용해서 문제를 풀어보겠다.

필자는 subString()를 이용해 문자열을 인덱스별로 잘라 사용해보고자 한다.

이를 이용해서 함께 코드를 알아보자

🐱‍👤 실제 코드


import java.io.*;
import java.util.HashSet;
import java.util.Set;

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

        String s = br.readLine();
        Set<String> s_set = new HashSet<>();

        for(int i = 0; i< s.length(); i++) {
            for(int j = i+1; j <= s.length(); j++) {
                s_set.add(s.substring(i, j));
            }
        }

        System.out.println(s_set.size());

    }
}

예시코드는 tc인 ababc를 활용하도록 하겠다.

a (0:1)ab (0:2)aba (0:3)abab (0:4)ababc (0:5)
b (1:2)ba (1:3)bab (1:4)babc (1:5)
a (2:3)ab (2:4)abc (2:5)
b (3:4)bc (3:5)
c (4:5)

해당 문제를 이렇게 답이 나올 수 있다. 이를 HashSet에 add하게 되면 중복값이 제거된
a, b, c, ab, ba, bc, aba, bab, abc, abab, babc, ababc
총 12개가 저장될 수 있다.

🤢 회고


해당 문제를 푸는데, set과 substring()을 생각했지만, 안타깝게도 생각을 너무 깊게 하였다.

해당 문제는 길이가 최대 1,000가지로 최대 O(N^2)까지 시간 복잡도를 생각해볼 수 있다. 하지만, for문의 두려움을 견디지 못하고.... 너무 빙빙 돌아가버렸다..

해당 문제를 통해 복기하지만, 하드코딩이라도 일단 해보고 판단해보자!

profile
ABAPER를 꿈꾸는 개발자

0개의 댓글