본문 바로가기

알고리즘

PG)숫자 게임 -lv3

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

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