♣ 문제 설명
cards1 과 cards2 를 순서대로 한 장씩 사용하여 (리스트 안의 단어 순서는 바꿀 수 없음) goal list 처럼 만들 수 있으면 "Yes" Return, 아니면 "No" 리턴하는 문제

♣ 시도했던 코드 1 (오답, runtime error)
▶ 풀이 방법 : goal 의 요소 값들을 key로 가지며 index 를 value 로 하는 dic (딕셔너리) 를 생성하여 cards1 과 cards2 를 index 를 요소로 가지는 리스트를 생성하고, cards2 요소의 goal 에서의 index (cards2_idx) 와 cards2 를 cards1 에 더해줬을 때, goal 가 일치하면 "Yes" 아니면 "No" 를 return 하는 식으로 코드를 작성했다. 하지만, runtime 에서 에러가 나는 것을 알 수 있었다. 아무래도 for 문이 문제에서 요구하는 것 보다 많이 사용돼서 계산량이 많아서 그런 것 같다고 생각했다.
def solution(cards1, cards2, goal):
dic = {}
for (v, k) in enumerate(goal) :
dic[k] = v
cards1_idx = [dic[c] for c in cards1]
cards2_idx = [dic[c] for c in cards2]
for idx, card in zip(cards2_idx, cards2) :
cards1.insert(idx, card)
if cards1 == goal :
return 'Yes'
else :
return 'No'
♣ 시도했던 코드 2 (오답, runtime error)
▶ 풀이 방법
위와 비슷한 방법인데, cards1 와 cards2 가 goal 를 만들 수 있다면 goal 의 요소 index 를 cards1과 cards2 에 적용해 인덱스 값을 가지는 리스트를 만들어줬을 때, 리스트를 정렬한 값과 정렬전 값이 (오름차순) 같을 것이라고 생각해서 수행
위와 동일하게 return 은 옳게 나오나 계산량에서 에러가 나는 것을 확인.
def solution(cards1, cards2, goal):
dic = {}
for (v, k) in enumerate(goal) :
dic[k] = v
cards1_idx = [dic[c] for c in cards1]
cards2_idx = [dic[c] for c in cards2]
if (cards1_idx == sorted(cards1_idx)) and (cards2_idx == sorted(cards2_idx)) :
return 'Yes'
else :
return "No"
♣ 정답 코드
▶ 풀이 방법
각 카드 덱에서 goal의 순서대로 카드를 제거할 수 있는지 확인하고, 만약 불가능하다면 'No'를 반환
만약, 순서대로 제거하지 못한다면 goal 에서 뽑은 요소가 cards1 과 cards2 의 첫 번째 요소에서 일치하는 것이 없다면 순서대로 만들 수 없는 것으로 판단할 수 있기 때문에 return No 를 진행
* 여기서 if cards1 and ~ 를 해준 것은 빈 리스트는 [] false, 비어있지 않다면 True 를 반환하는 자료형 Bool 의 특성을 활용해서 모두 비워내기 전까지만 수행하기 위함. !
def solution(cards1, cards2, goal) :
first_idx = 0
for g in goal :
if cards1 and g == cards1[first_idx] :
cards1.pop(first_idx)
elif cards2 and g == cards2[first_idx] :
cards2.pop(first_idx)
else : return 'No'
return 'Yes'
'Programming > Python' 카테고리의 다른 글
[프로그래머스 Python] 기사단원의 무기 (1) | 2024.07.24 |
---|---|
[프로그래머스 Python] 소수 만들기 (1) | 2024.07.18 |
[프로그래머스 Python] 명예의 전당 (1) (0) | 2024.07.16 |
[프로그래머스 Python] 푸드 파이트 대회 (5) | 2024.07.15 |
[프로그래머스 Python] 가장 가까운 값 찾기 (1) | 2024.07.12 |