새소식

Algorithm/BOJ

(JAVA) 백준 11478번 : 서로 다른 부분 문자열의 개수

  • -
728x90

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

 

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

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

www.acmicpc.net

서로 다른 부분 문자열의 갯수를 구하는 문제이다 보니 중복 제거가 필요하다 생각하여 HashSet 을 사용해야 한다고 생각했다. 또한 부분 문자열이 필요하니 String.subString() 을 사용했다.

 

소스코드

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

public class Main 
{ 
	public static void main(String[] args) throws IOException 
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// 중복이 아닌 배열을 생성해야 하기 때문에 HashSet 사용
		HashSet<String> set = new HashSet<>();

		String S = br.readLine();
		
		for(int i=0;i<S.length();i++)
		{
			String name = "";

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

		}

		// 배열(HashSet)의 크기를 출력
		System.out.println(set.size());
	}

	
}

 

for문에서 name 을 출력하면 아래와 같다.

첫글자부터 한글자씩 더해 전체 String 의 배열을 만들고 중복을 제거하는 방식이다.

$ java Main.java 
ababc
a
ab
aba
abab
ababc

b
ba
bab
babc

a
ab
abc

b
bc

c
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.