ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] Lv1 카드뭉치
    알고리즘 2024. 11. 23. 21:07

    문제를 보자마자 회사에서 활용하던 것처럼 딕셔너리가 떠올라서 접근해봤는데 효율성에서 문제가 있었으나

    cards1과 cards2를 함께 확인하는 코드로 구현하고 싶었는데 도저히 생각나지 않는데 계속 고민만 하다가는 시작도 못 하고 포기하게 될 것 같아 GPT 도움을 받아 완료했습니다.

    cards1 = ["i", "drink", "water"]
    cards2 = ["want", "to"]
    goal = ["i", "want", "to", "drink", "water"]
    
    # 1차 시도 (테스트 20, 21, 24, 25 실패)
    def solution(cards1, cards2, goal):
        answer = ''
        goal_dict = {value: index for index, value in enumerate(goal)}
        # print(goal_dict)
        cards1_list = [goal_dict[index] for index in cards1]
        cards2_list = [goal_dict[index] for index in cards2]
        # print(cards1_list)
        # print(cards2_list)
        if len(cards1_list) > 1:
            for i in range(len(cards1_list) - 1):
                if cards1_list[i] > cards1_list[i + 1]:
                    answer = 'No'
                    return answer
                    
        if len(cards2_list) > 1:
            for i in range(len(cards2_list) - 1):
                if cards2_list[i] > cards2_list[i + 1]:
                    answer = 'No'
                    return answer
        
        answer = 'Yes'
        return answer

     

    # 2차 시도 (테스트 25 실패)
    # [GPT로 진행] 1차 시도와 거의 같지만 예외 처리 추가 (회사에서 사용하는 코드와 유사하게 처리했는데 회사에서는 키를 명확하게 정해서 사용하기 때문에 해당 키가 없어서 생기는 에러 처리는 하지 않았는데 그렇더라도 하는게 좋을것 같음)
    def solution(cards1, cards2, goal):
        goal_dict = {value: index for index, value in enumerate(goal)}
        
        # goal_dict에 없는 값은 무시하도록 처리
        cards1_list = [goal_dict[index] for index in cards1 if index in goal_dict]
        cards2_list = [goal_dict[index] for index in cards2 if index in goal_dict]
        
        # cards1_list에서 순서 확인
        if not all(cards1_list[i] <= cards1_list[i + 1] for i in range(len(cards1_list) - 1)):
            return 'No'
        
        # cards2_list에서 순서 확인
        if not all(cards2_list[i] <= cards2_list[i + 1] for i in range(len(cards2_list) - 1)):
            return 'No'
        
        # 모든 조건 만족 시
        return 'Yes'

     

    # 3차 시도 (합격)
    # GPT 통해서 했으며 cards1과 cards2를 동시에 비교하고 싶었는데 그 방법이 도저히 생각나지 않았는데 지금 보니.. 생각보다 간단함
    def solution(cards1, cards2, goal):
        # cards1과 cards2의 현재 위치를 추적하는 포인터
        pointer1, pointer2 = 0, 0
        
        # goal 리스트를 하나씩 순회하며 확인
        for word in goal:
            if pointer1 < len(cards1) and cards1[pointer1] == word:
                pointer1 += 1
            elif pointer2 < len(cards2) and cards2[pointer2] == word:
                pointer2 += 1
            else:
                return "No"
        
        return "Yes"

     

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

    댓글

Designed by Tistory.