프로그래머스_카드뭉치

임정민·2023년 6월 30일
1

알고리즘 문제풀이

목록 보기
68/173
post-thumbnail

프로그래머스 문제입니다.

문제

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

cards1 , cards2 리스트 안에 있는 문자열을 통해 goal 리스트를 완성시키는 문제였습니다.

처음에는 아래 코드 처럼 goal 리스트를 pop()하며 거꾸로 완성시키려 했으나 일부 테스트케이스에서 실패가 되었습니다.😣😣😣

[나의 풀이1]

(실패)

def solution(cards1, cards2, goal):
    answer = ''

    cnt = len(goal)

    while cnt > 0 :

        target = goal.pop()

        print(target)

        if len(cards1) != 0 and cards1[-1] == target:
            cards1.pop()
        elif len(cards2) != 0 and cards2[-1]== target:
            cards2.pop()
        else:
            answer = "No"
            print(answer)
            return answer
        cnt -= 1

    answer = "Yes"

    print(answer)
    return answer

그 이유는 입력값이

solution(["i", "drink", "water"], ["want", "to", "juice"], ["i", "want", "to", "drink", "water"])

일 때처럼 두 카드 더미를 통해 완성시킬 수 있지만 카드 더미 맨끝부분에 필요없는 문자열일 경우 완성시킬 수 없다라고 판명하기 때문입니다. 그리하여 카드더미 앞에서 부터 뽑아낼 수 있도록 popleft()하여 해결하였습니다.🐹🐹🐹

[나의 풀이2]

(성공)

def solution(cards1, cards2, goal):
    answer = ''

    cnt = len(goal)

    while cnt > 0 :

        target = goal.pop()

        print(target)

        if len(cards1) != 0 and cards1[-1] == target:
            cards1.pop()
        elif len(cards2) != 0 and cards2[-1]== target:
            cards2.pop()
        else:
            answer = "No"
            print(answer)
            return answer
        cnt -= 1

    answer = "Yes"

    print(answer)
    return answer

저의 풀이 이외에 아래와 같이 카드 더미를 변형시키지 않고 인덱스를 활용하여 해결한 풀이를 볼 수 있었습니다.

[다른 사람의 풀이]

def solution(cards1, cards2, goal):
    idx1,idx2=0,0
    for word in goal:
        if len(cards1)>idx1 and cards1[idx1]==word:
            idx1+=1
        elif len(cards2)>idx2 and cards2[idx2]==word:
            idx2+=1
        else:
            return "No"
    return "Yes"

감사합니다.🐤🐤🐤

profile
https://github.com/min731

0개의 댓글