728x90
반응형
https://www.acmicpc.net/problem/11478
서로 다른 부분 문자열의 개수 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 512 MB | 31191 | 19487 | 15724 | 63.164% |
문제
문자열 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의 서로 다른 부분 문자열의 개수를 출력한다.
예제 입력 1 복사
ababc
예제 출력 1 복사
12
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;
public class Main {
public static void main (String[] args) throws IOException{
HashSet<String> set = new HashSet<>(); //가능한 문자열을 담는 해시셋
BufferedReader br= new BufferedReader(new InputStreamReader((System.in)));
String str = br.readLine();
for(int i=0;i<str.length(); i++){
String newStr="";
for(int k=i; k<str.length();k++){
newStr+=str.charAt(k);
if(!set.contains(newStr)){ //newStr이 해시셋에 없다면
set.add(newStr);
}
}
}
System.out.println(set.size());
}
}
해시셋(중복허용x)에 이중 for문으로 주어진 문자열 S에 대해 가능한 문자열을 생성하여 담아준다.
HashSet이란 Set 인터페이스의 구현 클래스로, set의 성질을 그대로 상속받는다.
객체를 중복해서 저장할 수 없고 하나의 null값만 저장할 수 있다. 저장 순서가 유지되지 않는다.
해쉬맵을 처음에는 떠올렸는데, 밸류가 필요없어서 해시셋을 사용했다.
삽입: add, 삭제: remove, 모두 제거: clear, 크기: size()
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1647번 도시 분할 계획 자바 풀이, 크루스칼 알고리즘 (0) | 2024.08.10 |
---|---|
백준 1922번 네트워크 연결 자바 풀이, 크루스칼 알고리즘 (0) | 2024.08.10 |
[백준] 1260 DFS와 BFS JAVA 풀이 (1) | 2024.06.12 |
백준 10994번 별 찍기-19 파이썬 풀이 재귀함수 (0) | 2023.09.10 |
백준 18406번 럭키 스트레이트 파이썬 풀이 (0) | 2023.08.11 |