본문 바로가기
✔️ Algorithm/Baekjoon

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

by Eunse 2023. 2. 18.

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

 

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

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

www.acmicpc.net

 

✔️ 풀이과정

자바에서 지원하는 HashSet을 사용하면 쉽게 풀리는 문제이다.

먼저 문제에서 주어진 문자열을 입력하고, substring() 함수를 사용하여 문자열을 문제 조건에 맞게 자른 뒤 set에 추가한다. substring(int beginIndex, int endIndex) 이므로 인자 값에 문자열을 자를 시작부분과 마지막 부분을 반복문 통해 설정해주었다. 이때 문자열은 beginIndex ~ enlIndex-1까지 잘라준다는 점을 주의하자.

마지막으로 집합이 중복을 허용하지 않는다는 점을 이용하여 해당 HashSet의 크기를 출력해주면 된다.

 

✔️ 코드

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

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

    String str = br.readLine();
    for(int i=0 ; i<str.length()+1 ; i++){
      for(int j=i+1 ; j<str.length()+1 ; j++){
        String s = str.substring(i, j);
        set.add(s);
      }
    }
    System.out.println(set.size());
  }
}

댓글