[프로그래머스] Lv1 - 카드 뭉치

김멉덥·2023년 7월 18일
0

알고리즘 공부

목록 보기
56/171
post-thumbnail
post-custom-banner

문제

프로그래머스 연습문제


코드 구현

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

    # 1-0 / 2-0 / 2-1 / 1-1 / 1-2 -> O
    # 1-0 / 2-0 / 2-1 / 1-2 / 1-1 -> X

    i_one = 0
    i_two = 0

    for i in range(len(goal)):
        check = False

        if(goal[i] == cards1[i_one]):
            i_one += 1
            if (i_one == len(cards1)):
                i_one -= 1
            check = True
        elif(goal[i] == cards2[i_two]):
            i_two += 1
            if(i_two == len(cards2)):
                i_two -= 1
            check = True

        if(check == False):
            answer += "No"
            break


    if (len(answer) == 0):
        answer += "Yes"

    return answer

풀이

  • goal 배열에 있는 값이 card1에 있는지 검사
    → 있으면 card1의 배열에서 인덱스를 가리키는 변수에 +1, check = True 유지
    → 만약 card1의 배열 길이만큼 다 돌았다면 오류 나지 않게 -1로 정지
  • 없으면 card2에 있는지 검사 → card2에서도 똑같이 있으면 card2 배열 인덱스 변수에 +1, check = True 유지
    card2에도 없으면 check = False 로 계속 내려와서 answer에는 No가 들어감
    (현재 card1에도 없고, 2에도 없으면 순서가 잘못된 카드! 즉 이 순서로는 원하는 답을 완성할 수 없는 상태)
  • card1의 인덱스 0 검사 → card2의 인덱스 0 검사 → card1의 인덱스 1 검사 → card2의 인덱스 1 검사 → …
    이런식으로 늘어나야함

What I learned

  • 개인적으로 코드가 깔끔하지 않아서 마음에 들지 않게 푼 것 같다.
    따라서 찾아보니 pop을 이용하면 훨씬 간단하게 짤 수 있었다.
def solution(cards1, cards2, goal):
    for g in goal:
        if len(cards1) > 0 and g == cards1[0]:
            cards1.pop(0)       
        elif len(cards2) >0 and g == cards2[0]:
            cards2.pop(0)
        else:
            return "No"
    return "Yes"

→ 오류가 나지 않게 card배열의 길이도 같이 검사해주어야 한다.

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

글 잘 봤습니다, 많은 도움이 되었습니다.

답글 달기