알고리즘

[Lv_3] n + 1 카드게임

deedee2 2024. 2. 14. 01:00
728x90

 

def solution(coin, cards):
    answer = 0
    n = len(cards)
    target = n + 1
    myCard = {}
    for i in range(n // 3):
        myCard[cards.pop(0)] = 1
    all_round = len(cards) // 2
    temp = {}
    nowRound = 1
    for i in range(all_round):
        temp[cards.pop(0)] = 1
        temp[cards.pop(0)] = 1
        
        check = False

        for key in myCard.copy():
            reverse = target - key
            if myCard.get(reverse) != None:
                del myCard[reverse]
                del myCard[key]
                check = True
                nowRound += 1
                break
                
        if coin > 0 and check == False:
            for key in myCard.copy():
                reverse = target - key
                if coin > 0 and temp.get(reverse) != None:
                    del temp[reverse]
                    del myCard[key]
                    check = True
                    nowRound += 1
                    coin -= 1
                    break
                
        if coin > 1 and check == False:
            for key in temp.copy():
                reverse = target - key
                if temp.get(reverse) != None:
                    del temp[key]
                    del temp[reverse]
                    coin -= 2
                    nowRound += 1
                    check = True
                    break
                    
        if check == False:
            break
    return nowRound

2024 KAKAO WINTER INTERNSHIP

🫡 KeyPoint

- (1) 내가 소유한 카드에서 처리 (2) 코인을 소비해 추가 획득 가능한 카드와 섞어 처리 (3) 추가 획득 가능한 카드 내에서 처리

- 내가 소유하고 있거나, 획득 가능한 카드는 딕셔너리로 활용해 key로 바로 접근해서 불필요한 순회 방지

 

✔️ 링크: 코딩테스트 연습 - n + 1 카드게임 | 프로그래머스 스쿨 (programmers.co.kr)