JAVA/Coding Test

[JAVA] 백준 11478 서로 다른 부분 문자열의 개수_집합과맵

오늘도개발 2023. 3. 5. 09:57

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

 

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

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

www.acmicpc.net

 

 접근 : 

 

 - 문자열을 입력받는다.

 

- 문자열을 1개씩 체크해서 중복여부를 확인한 후 중복되지 않으면 저장한다.

 

- 문자열을 2개씩 체크해서 중복체크 후 저장한다.

 

- 문자열을 3개, 4개 , ... , 문자열 길이만큼 반복 체크해서 저장된 결과를 출력한다.

 

- 중복을 허용하지 않고 성능을 고려해야 함으로 HashSet을 사용하여 코드를 구현한다.

 

- 중복 체크는 2중 for문을 사용하여 모든 경우의 수를 체크한다.

 

 

 코드구현 : 

 

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

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String input = br.readLine();
		String temp = "";

		HashSet<String> sub_strings = new HashSet<>();

		int result = 0;

		for (int i = 0; i < input.length(); i++) {
			for (int j = 0; j + i + 1 <= input.length(); j++) {
				temp = input.substring(j, j + i + 1);
				if (sub_strings.add(temp)) {
					result++;
				}
			}
		}

		System.out.println(result);
		br.close();
	}
}