코딩테스트

BOJ : 10815

joonwoong 2024. 6. 2. 01:33

1. 문제

 

2. 문제 설명 및 알고리즘 설계

주어진 카드들과 상근이가 가지고 있는 카드를 이용해서 주어진 카드 중 상근이가 가진 카드를 추출하는 문제이다.

이분탐색 알고리즘을 사용하여야 한다고 생각했지만 시간초과가 나지 않을 것이라는 안일한 생각으로 다르게 짰다가 틀렸다.

 

3. 코드

package week9;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Q10815_boj {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st ;

        int N = Integer.parseInt(br.readLine());
        int card[] = new int[N];
        st = new StringTokenizer(br.readLine());
        for(int i=0;i<N;i++){
            card[i] = Integer.parseInt(st.nextToken());
        }

        int M = Integer.parseInt(br.readLine());
        int sang[] = new int[M];
        st = new StringTokenizer(br.readLine());
        for(int i=0;i<M;i++){
            sang[i] = Integer.parseInt(st.nextToken());
        }

        int result[] = new int[M];

        Arrays.sort(card);
        for(int i=0;i<M;i++){
            int low = 0, high = card.length-1;
            while ( low <= high ){
                int mid = (low+high)/2;
                if(card[mid] == sang[i]){
                    result[i] = 1;
                    break;
                }else if( card[mid] < sang[i]){
                    low = mid+1;
                }else{
                    high = mid-1;
                }
            }
        }

        for(int i=0;i<M;i++){
            System.out.print(result[i]+" ");
        }
    }
}

 

4. 시간복잡도

O(N)

O(logN)

 

5. 결과

'코딩테스트' 카테고리의 다른 글

BOJ : 11687  (0) 2024.06.06
BOJ : 1654  (0) 2024.06.03
BOJ : 4158  (0) 2024.05.31
BOJ : 3020  (0) 2024.05.29
BOJ : 14465  (0) 2024.05.29