01
08
๋ฐ˜์‘ํ˜•

 

import java.io.FileInputStream;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

class Main{
    public static int binarySearch(int[] arr, int target){
        int l=0; int r = arr.length-1;
        int len = 0;
        while (l<=r){
            int m = (l+r)/2;
            if(arr[m]<=target){
                l = m+1;
                if(arr[m] == target) len++;
            }
            else if(arr[m]>=target)
            {
                r = m-1;
                if(arr[m] == target) len++;
            }
        }
        return len;
    }

    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for(int i=0; i<n;i++){
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr);
        int m = sc.nextInt();
        for(int i=0; i<m;i++){
            int tmp = sc.nextInt();
            System.out.print(binarySearch(arr,tmp)+" ");
        }

        sc.close();
    }
}

์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

์•„๋ฌด ์ƒ๊ฐ ์—†์ด ๊ฐ’ ์ฐพ์•„์„œ ๊ฑฐ๊ธฐ์„œ for ๋ฌธ ๋Œ๋ ค์•ผ์ง€ ํ–ˆ๋˜ ๋ฌด์‹ํ•œ ๋กœ์ง์ด๋‹ค. ๊ฒฝ๊ณ„๊ฐ’์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋– ์˜ฌ๋ฆฌ๊ธด ํ–ˆ์œผ๋‚˜ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค. ์ด๋ฒˆ ํ’€์ด๋Š” ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ•ด๋ด์•ผ๊ฒ ๋‹ค.


์ •๋‹ต์ฝ”๋“œ

import java.io.FileInputStream;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

class Main{

    public static int lowerBound(int[] arr, int target){
        int l=0; int r = arr.length;
        while (l<r){
            int m = (l+r)/2;
            if(arr[m]>=target){
                r = m;
            } else{ // ์ฐพ์•˜์Œ
                l = m+1;
            }
        }
        return l;
    }

    public static int upperBound(int[] arr, int target){
        int l=0; int r = arr.length;
        while (l<r){
            int m = (l+r)/2;
            if(arr[m]>target){
                r = m;
            } else{ // ์ฐพ์•˜์Œ
                l = m+1;
            }
        }
        return l;
    }

    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for(int i=0; i<n;i++){
            arr[i] = sc.nextInt();
        }
        StringBuilder sb = new StringBuilder();
        Arrays.sort(arr);
        int m = sc.nextInt();
        for(int i=0; i<m;i++){
            int tmp = sc.nextInt();
            sb.append(upperBound(arr,tmp)-lowerBound(arr,tmp)).append(" ");
        }
        System.out.println(sb);

        sc.close();
    }
}

๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ ์€ ํ•„๊ธฐ๋ฅผ ์ฒจ๋ถ€ํ•˜๊ฒ ๋‹ค.

์ƒํ•œ, ํ•˜ํ•œ ๊ฒฝ๊ณ„์„ ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฒˆ ํ’€์ด์—์„œ๋Š” r = arr.length-1์„ ํ•ด๋ฒ„๋ฆฌ๋ฉด, l์„ ๊ธฐ์ค€์œผ๋กœ ์›€์ง์ด๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€๊ฒŒ ๋˜๋Š” ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์—ฌ๋‹ด์œผ๋กœ StringBuilder๋ฅผ ์•ˆ์“ฐ๊ณ  ๊ทธ๋ƒฅ ์ถœ๋ ฅํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„ ํšจ์œจ์„ฑ ์ฆ๊ฐ€๋ฅผ ์œ„ํ•ด ๋ญ˜ ์ถœ๋ ฅํ•  ๋•Œ๋Š” ํ•ญ์ƒ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€์„ ๊ฐ–์ž.

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT