[파이썬&python]프로그래머스_LV1_카드 뭉치_풀이

2024. 5. 28. 22:48코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/Q-70F3kAD8c?feature=shared

 

쉽게 생각했는데 먼 길을 돌아 왔다.

 

<첫번째 시도 : 88점> : 실제는 계속 print를 하면서 확인했는데 몇가지 의문점이 있다. 그건 아래에 리뷰.

조건을 잘 읽지 않고 대충 생각해서 정확히 파악을 하지 못했다.

조건중에 "goal의 원소는 cards1과 cards2의 원소들로만 이루어져 있습니다."를 완벽히 1:1매칭이 되는걸로 착각했다.

     반대로 cards1과 cards2의 원소는 goal의 원소들로만 이루어져 있다는게 아니다.

이것을 간과하고 고민을 하니까 답이 나오지 않았다.

#88점(20, 21, 24실패). 이거 문제 조금 짜증나네. del goal[0]도 이상하게 먹히고.
def solution1(cards1, cards2, goal):
    answer = "Yes"
    for i in goal:
        if i in cards1 and i == cards1[0]:
            del cards1[0]
        elif i in cards2 and i == cards2[0]:
            del cards2[0]
    if cards1 or cards2:
        answer = "No"
           
    return answer

 

<두번째 시도 : 통과>

새로운 변수에 cards1과 cards2의 첫번째 문자부터 넣고, 다시 지우고를 반복해서

새로운 변수와 goal이 동일하다면 "Yes", 동일하지 않다면 "No"가 출력 된다.

#나 뻘짓하고 있었네. => cards는 비어있지 않아도 남아 있어도 상관 없음
def solution(cards1, cards2, goal):
    answer = "Yes"
    temp = []
    for i in goal:
        if i in cards1 and i == cards1[0]:
            temp.append(i)
            del cards1[0]
        elif i in cards2 and i == cards2[0]:
            temp.append(i)
            del cards2[0]
    if goal != temp:
        answer = "No"
       
    return answer

 

<다른사람 풀이 참고>

나도 이거랑 비슷한 생각을 했는데 계속 딴 길로 잘못들어갔다.

cards를 지우면서 계속 인덱스 0위치에 있는거랑 매칭이 되지 않으면 "No"를 출력하게 한다.

def solution(cards1, cards2, goal):
    answer = "Yes"
    for i in goal:
        if len(cards1) > 0 and cards1[0] == i:
            cards1.pop(0)
        elif len(cards2) > 0 and cards2[0] == i:
            cards2.pop(0)
        else:
            return "No"
    return answer

 

<계속 오류가 나왔던 코드>

아래의 코드에서 계속 i의 값에서 제외되는 값이 생겼다.

chatgpt답변은?

goal 리스트를 순회하면서 요소를 삭제하는 방식에서 발생하는 문제는, 리스트의 크기가 줄어들면서 인덱스가 바뀌기 때문에 예상치 못한 결과가 나오는 것이다. ※리스트의 요소를 순회하는 동안 리스트 자체를 수정하면 인덱스가 올바르게 유지되지 않기 때문이다.

  1. 첫 번째 요소인 "i"가 goal에서 제거됩니다.
  2. "want"는 더 이상 첫 번째 요소가 아니기 때문에 조건에 맞지 않아 건너뜁니다.
  3. 다음 요소는 "to"가 되며, goal에서 제거됩니다.
  4. 그 후 "drink"가 출력됩니다.

따라서, "want"가 출력되지 않습니다. 이를 해결하기 위해서는 goal 리스트를 직접 수정하지 않고 다른 방법으로 해결해야 합니다.

def solution(cards1, cards2, goal):
    answer = "Yes"
    for i in goal:
        print(i)
        if i == cards1[0]:
            del goal[0]
        elif i == cards2[0]:
            del goal[0]
728x90
반응형