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

 

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

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

www.acmicpc.net

 


풀이 과정


  1. 문제를 간단하게 생각하면 이진 탐색으로 위치를 찾으면 왼쪽 구간의 요소의 개수가 바로 먹을수 있는 수이다. 
    • 즉, 이진 탐색 결과가 곧 개수이다.
  2. A의 각각의 요소들을 리스트 B에 대해서 이진탐색 진행
    • 같은 경우 왼쪽 구간 진행(같아도 안되므로)
    • 파이썬의 bisect_left 함수 사용
  3. 요소의 개수의 합을 출력해주면 된다.

소스 코드


 

import sys
from bisect import bisect_left

input = lambda : sys.stdin.readline().rstrip()

T = int(input())

for _ in range(T):
    A, B = map(int, input().split())
    T1 = sorted(map(int, input().split()))
    T2 = sorted(map(int, input().split()))
    count = 0
    for e1 in T1:
        pos = bisect_left(T2, e1)
        count += pos
    print(count)

+ Recent posts