개발/코테문제풀이
[자바] 백준 14425번 문제풀이
후누피
2023. 5. 25. 13:31
728x90
문제이해
N과 M개의 문자를 입력받아,
M에 포함된 N개의 문자의 갯수를 출력하면된다.
ex)
입력) 출력)
N = apple,banana,car 2
M = apple,back,car,desk,top
풀이코드
/* 백준 14425번 문제풀이)
총 N개의 문자열로 이루어진 집합 S가 주어진다.
입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.
입력)
첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.
다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.
다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.
입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다.
집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.
출력)
첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.
*
*/
package test_0525;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class test_0525_1 {
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//문자열을 입력받아 토큰화해준다(분리), StringTokenizer(문자열,분리구분자,true/false);
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
HashMap <String,Integer> map = new HashMap <>();
for(int i=0; i<N; i++){
map.put(br.readLine(),1);
}
int cnt = 0;
for(int i=0; i<M; i++){
if(map.containsKey(br.readLine())){
cnt++;
}
}
System.out.print(cnt);
}
}
Scanner를 사용해 풀이했었지만, 백준에서 제출할 때 런타임에러가 발생하였다.
그래서 이번엔 bufferedreader와 stringtokenizer를 사용했다.
StringTokenizer에 대한 설명은 따로 정리해두었다.
입력받은 값을 공백기준으로 분리해주고
분리된 문자열값을
(readLine()으로 입력받은 값은 문자열이기 때문에 Integer.parseInt를 통해 정수로 바꿔준다)
int N과 M에 저장해준다.
HashMap객체를 생성하고
반복문을 통해
HashMap객체에 N개에 해당하는 문자열을 넣어준다.
마찬가지로
반복문을통해
M개에 해당하는 문자열들이 HashMap객체에 포함되어있다면
cnt를 증가해준다.
마지막으로 cnt를 출력해주면 문제가 완성된다.
결과
N값:3 M값:5
N = apple,banana,car
M = apple,ball,car,desk,dear
728x90