[프로그래머스/Python] 카드 뭉치

PhilAI·2023년 8월 2일
0

문제

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

풀이

풀이 1 - (실패)

  1. for문을 통해 goal 배열의 요소를 순차적으로 꺼낸다.
  2. 꺼낸 goal 요소가 cards1, cards의 가장 맨앞에 있는 지 확인한다
  3. cards1,2의 앞에 있다면 해당하는 cards에서 제거한다.
  4. cards1,2의 앞에 없다면 'No'를 출력한다.
  5. 모든 for문이 다 돌아가면 'Yes'를 출력한다
def solution(cards1, cards2, goal):
    for target in goal:
        if target == cards1[0]: cards1.pop(0)
        elif target == cards2[0]: cards2.pop(0)
        else: return 'No'
    return 'Yes'

풀이 2 - (성공)

예를 들어 아래와 같이 배열이 주어졌다고 가정한다.
cards1 = ["i", "drink", "water"]
cards2 = []
goal = ["i", "want", "to", "drink", "water"]

target = "i"때 len(cards2)가 0인 상태(비어있음)에서 elif 문으로 진입한다. 하지만, cards2[0]에 접근하려고 할 때 IndexError가 발생한다. 왜냐하면 빈 리스트인 cards2에서는 가져올 단어가 없기 때문이다. 결과적으로 elif 문은 실행되지 않고, cards1을 확인해 "i"를 찾을 수 없으므로 "No"를 반환하고 함수가 종료된다.

따라서 cards2가 비어있는 상태에서 인덱스 접근을 시도하면 IndexError가 발생하므로, len(cards2)를 확인하여 이러한 상황을 방지하는 것이다. 따라서 len(cards2)를 확인함으로써 문제가 발생하지 않도록 처리하는 것이 중요하다.

def solution(cards1, cards2, goal):
    for target in goal:
        if len(cards1) and target == cards1[0]: cards1.pop(0)
        elif len(cards1) and target == cards2[0]: cards2.pop(0)
        else: return 'No'
    return 'Yes'
profile
철학과가 도전하는 Big Data, AI

0개의 댓글