Algorithm/BOJ

[Silver V/JAVA] 10815 ์ˆซ์ž์นด๋“œ

carsumin 2024. 11. 18. 14:24

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

 

 

  • ์ด์ง„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐฐ์—ด์„ ์ผ์ผ์ด ๋น„๊ตํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋œฌ๋‹ค.
  • ์ด์ง„ํƒ์ƒ‰(Binary Search)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ (https://marginata.tistory.com/150)
  • ํ’€์ด 1์€ System.out.print() ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ผ์ผ์ด ์ถœ๋ ฅ์„ ํ–ˆ๊ณ , ํ’€์ด 2๋Š” StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ์„ ํ–ˆ๋‹ค. ์„ฑ๋Šฅ๋ฉด์—์„œ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๋น ๋ฅด๋‹ค.

 

ํ’€์ด 1

 

import java.io.*;
import java.util.*;

public class Main{
    static int[] arr;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        //์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง„ ์นด๋“œ
        int N = Integer.parseInt(br.readLine());
        arr = new int[N];
        
        StringTokenizer st = null;
        st = new StringTokenizer(br.readLine(), " ");
        
        for(int i=0; i<N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        
        //์ด์ง„ํƒ์ƒ‰์„ ์œ„ํ•œ ์ •๋ ฌ
        Arrays.sort(arr);
        
        //๋น„๊ตํ•  ์นด๋“œ
        int M = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine(), " ");
        
        for(int i=0; i<M; i++){
            int result = binarySearch(Integer.parseInt(st.nextToken()));
            if(result != -1) System.out.print(1 + " ");
            else System.out.print(0 + " ");
                                      
        }
    }
    
    //์ด์ง„ํƒ์ƒ‰
    private static int binarySearch(int target){
        int left = 0;
        int right = arr.length-1;
        int mid;
        
        while(left <= right){
            mid = (left+right)/2;
            if(arr[mid] < target) left = mid+1;
            else if(arr[mid] > target) right = mid-1;
            else return mid;
        }
        return -1;
    }
}

 

 

ํ’€์ด 2

 

import java.io.*;
import java.util.*;

public class Main{
    static int[] arr;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        //์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง„ ์นด๋“œ
        int N = Integer.parseInt(br.readLine());
        arr = new int[N];
        
        StringTokenizer st = null;
        st = new StringTokenizer(br.readLine(), " ");
        
        for(int i=0; i<N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        
        //์ด์ง„ํƒ์ƒ‰์„ ์œ„ํ•œ ์ •๋ ฌ
        Arrays.sort(arr);
        
        //๋น„๊ตํ•  ์นด๋“œ
        int M = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine(), " ");
        
        //StringBuilder๋กœ ์ถœ๋ ฅ
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<M; i++){
            int result = binarySearch(Integer.parseInt(st.nextToken()));
            sb.append(result).append(" ");
        }
        System.out.println(sb.toString().trim());
    }
    
    //์ด์ง„ํƒ์ƒ‰
    private static int binarySearch(int target){
        int left = 0;
        int right = arr.length-1;
        int mid;
        
        while(left <= right){
            mid = (left+right)/2;
            if(arr[mid] == target) return 1; //๊ฐ’์ด ์žˆ์Œ
            else if(arr[mid] < target) left = mid + 1;
            else right = mid - 1;
        }
        return 0; //๊ฐ’์ด ์—†์Œ
    }
}

 

 

์œ„๊ฐ€ StringBuilder๋ฅผ ์ด์šฉํ•œ ๊ฒฐ๊ณผ. ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹œ๊ฐ„์ด ๋” ์ ๊ฒŒ ๋“œ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค