항해99를 하면서 풀어봤던 문제지만 다시 한 번 풀어보기
https://www.acmicpc.net/problem/11478
- 예제 입력1
ababc
- 예제 출력1
12
- 문제 접근
- 입력
- 첫째줄 : 문자열 S
- S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하
- 출력
- 첫째 줄에 S의 서로 다른 부분 문자열 개수 출력
- 입력
- 문제 해결
- 길이가 1 (a, b, c)부터 길이가 5(ababc)까지 중복되지 않는 문자열의 개수를 체크
- 중복이 되지 않아야하기 때문에 컬렉션의 Set 사용
- 기존 풀이 [메모리 : 226,680 KB / 시간 : 628 ms]
public static void main(String[] args) throws IOException {
Set<String> set = new HashSet<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int length = str.length(); // 문자열 길이
int scope = 1; // 부분 문자열 범위
for(int i = 0; i < length; i++){
for(int j = 0; j < length - i; j++){
if(j == length - 1)
set.add(str.substring(j));
else
set.add(str.substring(j, j + scope));
}
scope++;
}
System.out.println(set.size());
}
'Coding Test > Step14. 집합과 맵' 카테고리의 다른 글
[Java] 7단계. 대칭 차집합 [1269번] (1) | 2024.11.03 |
---|---|
[Java] 6단계. 듣보잡 [1764번] (0) | 2024.11.03 |
[Java] 5단계. 숫자 카드 2 [10816번] (0) | 2024.11.03 |
[Java] 4단계. 나는야 포켓몬 마스터 이다솜 [1620번] (0) | 2024.11.02 |
[Java] 3단계. 회사에 있는 사람 [7785번] (0) | 2024.11.02 |