문제 해석
- 문자열 S를 입력받아 문자열로 만들 수 있는 모든 부분문자열의 개수를 구하면 된다.
- 예를 들면, ababc가 주어졌다는 가정하에 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 존재하는데, 같은 것을 제거하면 a, b, c, ab, ba, bc, aba, bab, abc, abab, babc, ababc로 12개가 된다.
- 단, 부분문자열은 연속된 일부분만 가능하며, 길이는 1보다 같거나 커야한다.
코드
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();
br.close();
HashSet<String> partS = new HashSet<String>();
for(int i = 0; i < S.length(); i++) {
for(int j = i+1; j <= S.length(); j++){
partS.add(S.substring(i, j));
}
}
bw.write(partS.size() + "");
bw.flush();
bw.close();
}
}
결과
느낀 점
- 시간이 많이 소요된다. => 항상 보안해야하는 문제...
- 이번 문제는 subString() 함수가 다 한 문제 같다.