본문 바로가기

Algorithm/Baekjoon

[백준_JAVA_알고리즘] 11478 서로 다른 부분 문자열의 개수

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

public class Main {
    public static void main(String[] args) throws IOException{
    	BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    	BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    	HashSet<String> set = new HashSet<String>();
    	String str = bufferedReader.readLine();
    	
    	for(int i = 0; i <= str.length(); i++) {
    		for(int j = i+1; j <= str.length(); j++)
    			set.add(str.substring(i ,j));
    	}
    	bufferedWriter.write(String.valueOf(set.size()));
    	
    	bufferedWriter.flush();
    	bufferedReader.close();
    	bufferedWriter.close();
    }
}

bufferedReader, bufferedWriter을 이용해서 빠른 입출력을 구현했다.

중복되는 데이터 없이 값을 저장하기 위해서 HashSet을 이용했다.

ArrayList를 이용할 수도 있지만, 시간 초과 문제가 발생한다.

 

HashSet이란

- 자바의 컬렉션 중 하나로 중복되지 않는 데이터를 순서에 상관없이 저장함

- Set 인터페이스의 구현 클래스

- 저장 순서가 유지되지 않음

- 비선형 구조로 저장 순서가 없으며 인덱스도 없음

 

substring이란

- String 클래스에 포함된 메서드

- 문자열에서 원하는 부분을 추출하고자 할 때 사용

- 찾을문자열.substring(찾을 문자열의 시작번호, 읽어들일 문자열 개수)