ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디펜스 게임
    코딩 테스트/Level 2 2022. 12. 8. 19:51
    반응형

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

    힙큐를 쓰면 쉽게 풀 수 있다. 
    push와 pop을 같이 해야할 경우 pushpop을 쓰는 것이 더 빠르다. 
    파이썬 내장 함수에 round가 있기 때문에 변수명으로 round는 사용하지 않는 것이 좋다. 
    파이썬의 힙큐는 최소힙이라 최대힙을 사용하기 위해 '-'를 붙여주었다. 

    def solution(n, k, enemy):
        from heapq import heappushpop, heappush
        heap = []
        total = round_ = 0
        for each in enemy:
            total += each
            if total <= n:
                heappush(heap, -each)
                round_ += 1
            elif k > 0:
                k -= 1
                total += heappushpop(heap, -each)
                round_ += 1
        return round_
    테스트 1 〉	통과 (1.26ms, 10.5MB)
    테스트 2 〉	통과 (12.10ms, 11.5MB)
    테스트 3 〉	통과 (214.77ms, 52.8MB)
    테스트 4 〉	통과 (70.99ms, 18.6MB)
    테스트 5 〉	통과 (3.84ms, 10.3MB)
    테스트 6 〉	통과 (200.71ms, 53.1MB)
    테스트 7 〉	통과 (174.89ms, 56.8MB)
    테스트 8 〉	통과 (135.24ms, 54.4MB)
    테스트 9 〉	통과 (155.29ms, 54.9MB)
    테스트 10 〉	통과 (279.97ms, 85.6MB)
    테스트 11 〉	통과 (70.50ms, 18.5MB)
    테스트 12 〉	통과 (72.63ms, 18.5MB)
    테스트 13 〉	통과 (0.01ms, 10.2MB)
    테스트 14 〉	통과 (0.01ms, 10.1MB)
    테스트 15 〉	통과 (0.01ms, 10.2MB)
    테스트 16 〉	통과 (0.01ms, 10MB)
    테스트 17 〉	통과 (0.00ms, 10.1MB)
    테스트 18 〉	통과 (0.00ms, 9.98MB)
    테스트 19 〉	통과 (0.00ms, 10.1MB)
    테스트 20 〉	통과 (0.01ms, 10.2MB)
    테스트 21 〉	통과 (0.01ms, 10.2MB)
    테스트 22 〉	통과 (0.01ms, 10.3MB)
    테스트 23 〉	통과 (0.03ms, 10.2MB)
    테스트 24 〉	통과 (0.03ms, 9.97MB)
    테스트 25 〉	통과 (0.03ms, 10.2MB)
    테스트 26 〉	통과 (0.07ms, 9.96MB)
    테스트 27 〉	통과 (0.05ms, 10.2MB)
    테스트 28 〉	통과 (0.03ms, 10.1MB)
    테스트 29 〉	통과 (0.08ms, 10.3MB)
    테스트 30 〉	통과 (0.04ms, 10.2MB)
    테스트 31 〉	통과 (0.07ms, 10.2MB)
    테스트 32 〉	통과 (0.07ms, 10.1MB)

    급하게 작성하느라 break를 빼먹음...

    def solution(n, k, enemy):
        from heapq import heappushpop, heappush
        heap = []
        total = round_ = 0
        for each in enemy:
            total += each
            if total <= n:
                heappush(heap, -each)
                round_ += 1
            elif k > 0:  # total > n
                k -= 1
                total += heappushpop(heap, -each)
                round_ += 1
            else:
                break
        return round_
    테스트 1 〉	통과 (0.40ms, 10.6MB)
    테스트 2 〉	통과 (2.01ms, 11.6MB)
    테스트 3 〉	통과 (117.94ms, 52.9MB)
    테스트 4 〉	통과 (3.75ms, 18.5MB)
    테스트 5 〉	통과 (2.47ms, 10.4MB)
    테스트 6 〉	통과 (127.65ms, 53.1MB)
    테스트 7 〉	통과 (61.60ms, 57MB)
    테스트 8 〉	통과 (63.90ms, 54.5MB)
    테스트 9 〉	통과 (47.96ms, 55MB)
    테스트 10 〉	통과 (191.11ms, 85.7MB)
    테스트 11 〉	통과 (0.03ms, 18.6MB)
    테스트 12 〉	통과 (0.06ms, 18.6MB)
    테스트 13 〉	통과 (0.01ms, 10.2MB)
    테스트 14 〉	통과 (0.01ms, 10.2MB)
    테스트 15 〉	통과 (0.01ms, 10.2MB)
    테스트 16 〉	통과 (0.01ms, 10.3MB)
    테스트 17 〉	통과 (0.01ms, 10.3MB)
    테스트 18 〉	통과 (0.00ms, 10.2MB)
    테스트 19 〉	통과 (0.01ms, 10.3MB)
    테스트 20 〉	통과 (0.01ms, 10.3MB)
    테스트 21 〉	통과 (0.01ms, 10.2MB)
    테스트 22 〉	통과 (0.01ms, 10.3MB)
    테스트 23 〉	통과 (0.02ms, 10.3MB)
    테스트 24 〉	통과 (0.02ms, 10.3MB)
    테스트 25 〉	통과 (0.04ms, 10.3MB)
    테스트 26 〉	통과 (0.04ms, 10.2MB)
    테스트 27 〉	통과 (0.07ms, 10.2MB)
    테스트 28 〉	통과 (0.02ms, 10.2MB)
    테스트 29 〉	통과 (0.05ms, 10.1MB)
    테스트 30 〉	통과 (0.03ms, 10.2MB)
    테스트 31 〉	통과 (0.04ms, 10.2MB)
    테스트 32 〉	통과 (0.03ms, 10.4MB)
    반응형
Designed by Tistory.