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

김태하·2023년 3월 16일
0
post-thumbnail

문제


문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오.

부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다.

예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다.

입력


첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다.

출력


첫째 줄에 S의 서로 다른 부분 문자열의 개수를 출력한다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String S = br.readLine();
        HashSet<String> set = new HashSet<>();
        for(int i=0; i<S.length(); i++){
            String tmp="";

            for(int j=i; j<S.length();j++){
                tmp += S.substring(j, j+1);
                set.add(tmp);

            }
        }

        System.out.println(set.size());
    }
}


풀이


  1. HashSet을 이용하여 집합을 하나 생성한다.
  2. 임시로 담을 String형의 변수를 만들고
  3. String에서 제공하는 subString을 이용하여 모든 경우의 글자를 집합에 넣어준다.

HashSet<>

  • 자바의 HashSet은 Set 인터페이스를 구현한 클래스이다.
  • HashSet은 중복된 값을 허용하지 않으며 List 등과는 다르게 입력한 순서가 보장되지 않는다.

HashSet의 특징을 정리하면 다음과 같습니다.

  1. 중복된 값을 허용하지 않음
  2. 입력한 순서가 보장되지 않음
  3. null을 값으로 허용

문제 링크 : 11478번: 서로 다른 부분 문자열의 개수

1개의 댓글

comment-user-thumbnail
2023년 3월 16일

정말 유용한 정보에요

답글 달기