https://school.programmers.co.kr/learn/courses/30/lessons/12987#
lv3 치고는 매우 쉬운 난이도였다.
우선 이 문제는 효율성 테스트가 있기 때문에 처음 제출한 코드는 효율성과 케이스 17번에서 실패했다.
from bisect import bisect_left
def solution(A, B):
answer = 0
B.sort()
A.sort(reverse=True)
for i in A:
# print('--------')
idx = bisect_left(B, i)
# print('idx = ', idx)
# print('B = ', B)
if idx > len(B) - 1:
continue
if i < B[idx]:
answer += 1
B.pop(idx)
# print(answer)
return answer
bisect_left로 A의 각 수를 B배열에 알맞은 인덱스를 찾아 해당 B[index]와 A의 원소를 비교해 더 크다면 answer를 +1 해준다.
하지만 A = [1,2,3] B = [1,2,3]과 같은 두 배열의 원소가 일치할 때 두 원소를 알맞게 비교하지 못한다.
그래서 효율성을 고려해 힙을 이용해 다시 작성했다.
import heapq
def solution(A, B):
answer = 0
A.sort(reverse=True)
arr = []
for i in B:
heapq.heappush(arr,-i)
for a in A:
num = heapq.heappop(arr)
if -num > a:
answer += 1
else:
heapq.heappush(arr,num)
return answer
'알고리즘' 카테고리의 다른 글
PG)베스트 앨범 (0) | 2024.07.11 |
---|---|
PG)단속 카메라 -lv3 (0) | 2024.07.10 |
PG) 단어 변환 - lv3 (0) | 2024.07.08 |
PG) 야근지수 -lv3 (0) | 2024.07.07 |
PG) 네트워크 - lv3 (0) | 2024.07.06 |