https://www.acmicpc.net/problem/14425
14425번: 문자열 집합
첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어
www.acmicpc.net
문제의 내용은 이렇다
문제
총 N개의 문자열로 이루어진 집합 S가 주어진다.
입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.
다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.
다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.
입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.
출력
첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.
처음에 문제 내용을 보고 뭘 말하려는 건지 이해가 잘 안가서 어려운 문제라고 생각했다.
그런데 문제 풀어보니까 그렇게 어려운 문제는 아님
내가 하도 책을 안읽어서 독해력이 떨어져서 그런지는 모르겠지만 문제 조건과 입력 출력을 번갈아 보니
무슨 말을 하려는 건지 이해가 갔다.
역시 사람은 글을 읽고 살아야하고 한국말은 끝까지 듣거나 읽어야한다.
package source;
import java.io.*;
import java.util.HashSet;
import java.util.StringTokenizer;
public class test_algo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int array = Integer.parseInt(st.nextToken()); //기준이 되는 문자열 집합의 길이
int inputSentence = Integer.parseInt(st.nextToken()); //체크할 문자열의 개수
int countSentence = 0; //집합에 해당하는 문자열이 얼마나 있는지 카운트
HashSet<String> hash = new HashSet<String>();
//해쉬셋 선언
for(int i=0;i<array;i++) {
hash.add(br.readLine()); //기준이되는 문자열 집합의 길이만큼 반복해서 해쉬 값에 넣어줌
}
for(int i=0;i<inputSentence;i++) {
if(hash.contains(br.readLine())) //해당 해쉬에 해당 원소(문자열)이 있는지 확인
countSentence++; //있으면 카운트를 증가시켜줌
}
System.out.println(countSentence);
}
}
1. 문제 입력 조건이 길이를 받는 첫번째 줄에서는 공백을 구분해야해서 StringTokenizer를 썼다.
그 다음부터는 쭉 줄바꿈으로 진행되서 readLine을 사용해서 한줄씩 갖고오는 방식을 사용했다.
2. 첫번째줄에서 기준이 되는 문자열 개수, 확인하려는 문자열의 개수를 각각 받기 때문에
nextToken을 사용해 각각 받아온다.
3. 해쉬셋을 써먹을거기 때문에 해쉬셋을 선언하고
4. 확인할 문자열들의 기준이 되는 값들을 넣기 위해 array(기준 문자열)의 크기(값)만큼 반복하여 해쉬에 넣는다
5. 위에서 받은 확인할 문자열들의 개수 만큼 반복, 한줄씩 가져와 해당 문자열이 해쉬안에 존재하는지 확인
-있으면 countSentence를 하나씩 증가시킨다
6. 위의 과정이 끝난 후 확인된 문자열의 개수를 출력
사실 HashSet를 알고 있다면 연습문제 수준의 난이도 인듯,
다른 방식으로 어떻게 푸는지는 더 찾아보고 해석해봐야겠다
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] 백준 문제풀이(1269번 : 대칭 차집합) (1) | 2022.12.06 |
---|---|
[JAVA] 백준 문제풀이(9733번 : 꿀벌) (0) | 2022.12.06 |
[JAVA] 백준 문제풀이(9625번 : BABBA) (0) | 2022.11.29 |
[JAVA] 백준 문제풀이(1252번 : 팰린드롬수) (0) | 2022.06.05 |
[JAVA] 백준 문제풀이 (10820번: 문자열 분석) (0) | 2022.06.04 |