코딩테스트/백준

[백준 - 14425] 문자열 집합 .java

머밍 2025. 5. 17. 17:00

https://www.acmicpc.net/problem/14425

 

 

Set 풀이

  • 집합 -> Set 으로 n개를 저장
  • 검사하기 위해 contains 메서드 활용
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;


public class Solution {

    public static void main(String[] args){
    		Scanner sc = new Scanner(System.in);
    		
    		int n = sc.nextInt();
    		int m = sc.nextInt();
    		
    		Set<String> s = new TreeSet<>();
    		
    		for(int i =0;i<n;i++) {
    			s.add(sc.next());
    		}
    		
    		
    		
    		int answer = 0;
    		
    		while(m-->0) {
    			String test = sc.next();
    			
    			if(s.contains(test)) answer++;
    		}
    		System.out.println(answer);
	 
    	 
     }
    
}

 

 

배열 풀이 -> 이분 탐색

str1.compareTo(str2)
:str1과 str2를 사전순으로 비교한 결과를 정수로 반환

반환값 의미 (사전순 기준)
음수 (< 0):  str1이 str2보다 앞에 있음
0 : str1과 str2가 같음
양수 (> 0):  str1이 str2보다 뒤에 있음
import java.util.Arrays;
import java.util.Scanner;


public class Solution {
	public static boolean isExist(String[] s, String test) {
		int l = 0;
		int r = s.length -1;
		
		while(l<=r) {
			int mid = (l+r)/2;
			int result = s[mid].compareTo(test);
			
			if(result ==0) return true;
			else if(result>0) r = mid-1;
			else l = mid+1;
			
		}
	
		
		return false;
	}
    public static void main(String[] args){
    		Scanner sc = new Scanner(System.in);
    		
    		int n = sc.nextInt();
    		int m = sc.nextInt();
    		
    		String[] s = new String[n];
    		for(int i =0;i<n;i++) {
    			s[i] = sc.next();
    		}
    		
    		Arrays.sort(s);
    		
    		int answer = 0;
    		
    		while(m-->0) {
    			String test = sc.next();
    			
    			if(isExist(s,test)) answer++;
    			
    		}
    		System.out.println(answer);
    		
    	 
    	 
    	 
     }
    
}