본문 바로가기
백준

[자바 :: 백준 10816 숫자카드2]

by javaman 2022. 8. 1.

문제 풀이 시나리오 ::

 

1. 배열에 원소가 여러개 있을 수 있는 문제임을 확인

2. 원소의 최소 인덱스를 반환하는 메서드 lower() 구현

3. 원소의 최대 인덱스 + 1 을 반환하는 메서드 upper()구현

4. 배열에 포함된 원소의 개수(upper - lower)를 공백으로 구분하여 출력

 

 

문제

 

 

풀이

 

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	public static int upper(int[] arr, int target) {
		
		int lower=0;
		
		int upper = arr.length  ;
		//while문 탈출 -> lower = mid + 1
        
        
		while(lower<upper) {
			int mid=(lower+upper)/2;
			if (target >= arr[mid])
				lower = mid + 1;
			else
				upper = mid;
		}//최대 인덱스 + 1 반환
		return lower;
		
	}
	public static int lower(int[] arr, int target) {
		
		int lower = 0;
		int upper = arr.length;
		//while문 탈출 -> lower = mid + 1
		while(lower < upper) {
			int mid = (lower+upper)/2;
			
			if(target <= arr[mid]) 
				upper = mid ;
				
			else
				lower = mid + 1;
			
		}//최소 인덱스 + 0 반환
		return lower;
	}
	public static void main(String[] args) throws IOException {
		Scanner scan = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		
		int n = scan.nextInt();
		int[] arr = new int[n];
		//한줄 입력 받기
		for (int i = 0; i< n ;i++) {
			 arr[i]=scan.nextInt();
		}
        //배열 정렬
		Arrays.sort(arr);
		int m = scan.nextInt();		
		for (int i = 0; i< m ;i++) {
			 int input = scan.nextInt();
			 sb.append(upper(arr,input)-lower(arr,input) + " ");
		}
		
		System.out.print(sb);
		
	}

		
	
}