[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ˆซ์ž ๊ฒŒ์ž„ / ํŒŒ์ด์ฌ / (์ •๋ ฌ, ์ด์ง„ ํƒ์ƒ‰)
Problem Solving ๐Ÿ”ฅ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ˆซ์ž ๊ฒŒ์ž„ / ํŒŒ์ด์ฌ / (์ •๋ ฌ, ์ด์ง„ ํƒ์ƒ‰)

https://programmers.co.kr/learn/courses/30/lessons/12987#

ํ’€์ด

์˜ˆ์ „์— ํ’€์–ด๋ดค๋˜ ๋ฌธ์ œ๋‹ค.
ํ•ต์‹ฌ์€ ๋น„๊ต๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด, ํฐ ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋‚ด๊ณ 
๋น„๊ต๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์ด ์—†๋‹ค๋ฉด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

์ •๋ ฌ๊ณผ ์ด์ง„ ํƒ์ƒ‰์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.
ํ•œ ๋ฒˆ์€ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๊ณ , ํ•œ ๋ฒˆ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ํ–ˆ๋‹ค.

์ง์ ‘ ๊ตฌํ˜„


def solution(A, B):
    answer = 0
    B.sort()

    def b_search(val):
        start = 0
        end = len(B)-1
        while start < end:
            mid = (start + end) // 2
            if B[mid] > val:
                end = mid
            else:
                start = mid + 1
        return end

    for a in A:
        idx = b_search(a)
        if B[idx] > a:
            B.pop(idx)
            answer += 1
        else:
            B.pop(0)
    return answer

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

import bisect
def solution(A, B):
    answer = 0
    B.sort()

    for a in A:
        idx = bisect.bisect_right(B, a)
        if idx == len(B):
            B.pop(0)
        else:
            B.pop(idx)
            answer += 1
    return answer

๋” ๋‚˜์€ ํ’€์ด๋กœ๋Š”?

์กฐ๊ธˆ ๋” ์ƒ๊ฐํ•ด๋ณด๋ฉด, ์ด์ง„ ํƒ์ƒ‰์„ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

def solution(A, B):
    answer = 0
    A.sort()
    B.sort()
    j = 0

    for i in range(len(A)):
        if A[j] < B[i]:
            answer = answer + 1
            j = j+1

    return answer