[백준 JAVA] 11478번 풀이 - 서로 다른 부분 문자열의 개수
by mini_minpackage baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
/**
* 서로 다른 부분 문자열의 개수
* - 문자여 s가 주어졌을 때, s의 서로 다른 부분 문자열의 개수를 구하시오.
* 부분 문자열은 s에서 연속된 일부분을 말한다.
* 예를 들어, ababc 의 부분 문자열은 a,b,a,b,c,ab,ba,bc,aba,bab,abc,abab,babc,ababc가 있고
* 서로 다른 것의 개수는 12개 이다.
*
*
*/
public class _11478 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
//s는 소문자로만 이루어졌다.
Set<String> map = new HashSet<>();
int len = 1;
while ( true ) {
for ( int i = 0; i < s.length(); i++ ) {
try {
//System.out.println(s.substring(i,i+len));
map.add(s.substring(i,i+len));
} catch (Exception e) {
continue;
}
}
len++;
if ( s.length() < len ) {
break;
}
}
System.out.println(map.size());
}
}
풀이
🌟 풀이 포인트 !
1. 중복 허용을 하지 않는, Set 이용!
2. substring 을 이용해 첫번째 문자부터 순차적으로 자름!
* 자를 수 없는 부분은 try catch 문에서 catch 에서 그냥 continue 시켜버림 ( 그럼 예외 안뜨고 다음 for 문 실행됨 )
'매일매일 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 1934번/13241번 풀이 - 최소공배수 (1) | 2023.08.31 |
---|---|
[백준 JAVA] 2798 번 풀이 - 블랙잭 (1) | 2023.08.27 |
[백준 JAVA] 1269번 풀이 - 대칭 차집합 (Set) (0) | 2023.08.24 |
[백준 JAVA] 1764번 풀이 - 듣보잡 (0) | 2023.08.22 |
[백준 JAVA] 1620번 풀이 - 나는야 포켓몬 마스터 이다솜 (✨적절한 함수를 만드는 연습!!) (0) | 2023.08.19 |
블로그의 정보
개발자 미니민의 개발로그
mini_min