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

진예·2023년 10월 22일
0

Baekjoon : JAVA

목록 보기
41/76
post-thumbnail

📌 문제

[11478] 서로 다른 부분 문자열의 개수

문자열 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의 서로 다른 부분 문자열의 개수를 출력한다.

💡 코드

✅ 문자열 s를 입력받아 toCharArray() 메서드를 사용하여 arr[]char 타입으로 변환하여 저장한 후, 이중 for문을 사용하여 부분 문자열을 생성한다. 서로 다른 부분 문자열, 즉, 중복 문자열을 제외한 개수를 구해야 하므로 HashSet set을 생성하여 문자열을 생성할 때마다 추가해주면 중복 데이터는 알아서 걸러진다! 개수를 출력해야 하므로 마지막 출력문에 size() 메서드를 사용하였다.

import java.io.*;
import java.util.*;
public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		String s = br.readLine();
		char[] arr = s.toCharArray();
		Set<String> set = new HashSet<>();
		
		for(int i=0;i<arr.length;i++) {
			String str = String.valueOf(arr[i]);
			set.add(str);
			
			for(int j=i+1;j<arr.length;j++) {
				str += arr[j];
				set.add(str);
			}
		}
		bw.write(set.size() + "");
		
		br.close();
		bw.close();
	}
}

다른 사람의 코드 : 다들 내 풀이보다 시간이 짧길래 봤는데 나처럼 굳이 변환+변환+... 하지 않아도 subString() 메서드를 사용하니 간단하게 풀 수 있었다,,! 문자열 끊기 하면서 이 메서드를 생각 못하다니,, 망충 그잡채,,

import java.io.*;
import java.util.*;
public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		String s = br.readLine();
		Set<String> set = new HashSet<>();
		
		for(int i=0;i<s.length();i++) {
			for(int j=0;j<s.length()-i;j++) {
				set.add(s.substring(j, j+i+1));
			}
		}
		bw.write(set.size() + "");
		
		br.close();
		bw.close();
	}
}

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글