문제풀이/백준(Boj) 문제풀이

[백준][두 포인터] - 7795. 먹을 것인가 먹힐 것인가

얄루몬 2022. 9. 27. 12:08

 

for _ in range(int(input())):
    n,m = map(int,input().split())
    a = list(map(int,input().split()))
    b = list(map(int,input().split()))

    a.sort()
    b.sort()

    res = 0
    cnt = 0 #반복문을 돌아가며 해당 누적 쌍을 기록할 변수
    
    for start in range(n):
        while True:
            if cnt == m or b[cnt] >= a[start]:
                res += cnt
                break
            else:
                cnt += 1
    print(res)
  • 완전 탐색을 사용해(2중 for문 사용시) 풀면 시간초과가 뜬다.
  • 이 문제는 합을 누적해가는 식으로 진행해야하고 이를 위해 비교하려는 리스트와 비교되는 리스트를 정렬시켜주어야 한다.
  • 이때 a가 b보다 큰 경우에 앞에 봤던 값은 더이상 살펴보지 않아도 큰 경우라고 판단한다.(정렬을 해주었기 때문)