

내 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// 서로 다른 부분 문자열의 개수 파악하기
// 공식 : (N + N-1 + ... + 1) - 중복 제거
// 테스트케이스를 String에 넣는다.
// charAt()을 써서 한 문자씩 배열을 만들어 넣는다.
// 2중 for문을 돌려 한 글자당 시작하는 모든 경우의 수를 set에 넣는다.
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String S = sc.next();
Set<String> set = new TreeSet<>();
for (int i = 0; i < S.length(); i++) {
String ch = "" + S.charAt(i);
set.add(ch);
for (int j = i+1; j < S.length(); j++) {
ch += S.charAt(j);
set.add(ch);
}
}
sb.append(set.size());
System.out.println(sb.toString());
}
}
느낀점
문자열에서 한 글자씩 뽑아서 TreeSet에 넣고, 다시 for문을 돌려 하나씩 추가해주면서 문제를 풀었다. 설계까지 시간이 좀 걸렸던 문제. 왜 어려웠던 문제들도 다 풀고 나면 코드는 심플할까? 좀 더 노력하자