본문 바로가기
  • 주니어 개발자의
    RESTful 성장기
Algorithm/BaekJoon

[7795 먹을 것인가 먹힐 것인가]

by 돌건 2021. 4. 6.
 

7795번: 먹을 것인가 먹힐 것인가

심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을

www.acmicpc.net

 

  • 분석 및 해결

쉽게 말해 A배열 모든 원소에 대해서 B배열에서 자신보다 작은 원소들의 개수의 합을 구하는 문제이다. 지난 번에 포스팅한 '순위 검색'에서의 이분 탐색을 적용해 해결했다.

 

  • 소스 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BJ_7795 {

	private static int[] A, B;
	private static int T, N, M;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		T = Integer.parseInt(br.readLine());
		for(int iter = 0; iter < T; iter++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			N = Integer.parseInt(st.nextToken());
			M = Integer.parseInt(st.nextToken());
			
			A = new int[N];
			B = new int[M];
			
			st = new StringTokenizer(br.readLine(), " ");
			for(int index = 0; index < N; index++) {
				A[index] = Integer.parseInt(st.nextToken());
			}
			
			st = new StringTokenizer(br.readLine(), " ");
			for(int index = 0; index < M; index++) {
				B[index] = Integer.parseInt(st.nextToken());
			}
			
			Arrays.sort(B); // 이분 탐색을 위해 정렬 선처리
			System.out.println(solution());
		}
		
	}
	
	private static int solution() {
		int answer = 0;
		
		for(int index = 0; index < N; index++) {
			answer += binarySearch(A[index]);
		}
		
		return answer;
	}
	
	private static int binarySearch(int num) {
		int front = 0; // B배열의 첫 인덱스
		int back = M - 1; // B배열의 마지막 인덱스
		
		while(front <= back) {
			int midIndex = (front + back) / 2;
			
			if(num > B[midIndex]) {
				front = midIndex + 1;
			}
			else {
				back = midIndex - 1;
			}
		}
		
		return front; // 현재 인덱스가 자신보다 작은 원소들의 개수가 된다.
	}

}

'Algorithm > BaekJoon' 카테고리의 다른 글

[1446 지름길]  (0) 2021.04.15
[18119 단어 암기]  (0) 2021.04.14
[1715 카드 정렬하기]  (0) 2021.04.10
[2075 N번째 큰 수]  (0) 2021.04.06
[14503 로봇청소기]  (0) 2021.03.17

댓글