알고리즘
[프로그래머스] LV1. 카드 뭉치
j9972
2023. 3. 9. 13:17
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/159994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근
1. 처음에는 card1, card2에 대한 조합 중에 goal과 같은게 있으면, Yes 없으면 No 를 return 하려고 했는데, 2가지 배열에 대한 조합 구하는 방법을 모르겠어서 PASS
2. 두번째로 생각한 방법은 for i in goal 이렇게 for문을 돌려서 i == cards1[0] 혹은 i == cards2[0] 일때마다 i == cards1 이면 cards1 = cards[1:] 이런식으로 하려고 했지만, indexError 가 나서 PASS
3. 세번째로 for문을 돌려서 i 가 cards1 혹은 2에 있으면 새로운 배열에 담고 cnt를 증가해가면서 마지막에 len(goal) == cnt인지 아닌지 체크해서 return하는 방식을 사용했다 ( 근데 코드가 너무 중복적임 -> 해결할 수 있을거 같은데,,? )
4. 4번째는 3번째에 사용했던 방식에서 중복 코드를 함수로 묶어주는 작업만 했다
풀이
1차 풀이
def solution(cards1, cards2, goal):
# goal이 card1, card2 의 조합 중 하나하면 yes
first = []
second = []
for i in goal:
if i in cards1:
first.append(i)
elif i in cards2:
second.append(i)
cnt = 0
for i in range(len(first)):
if first[i] == cards1[i]:
cnt += 1
for i in range(len(second)):
if second[i] == cards2[i]:
cnt += 1
if cnt == len(goal):
return 'Yes'
else:
return 'No'
2차 풀이 ( 위의 중복 코드를 함수로 묶음 )
def compare(arr,arr1):
cnt = 0
for i in range(len(arr)):
if arr[i] == arr1[i]:
cnt += 1
return cnt
def solution(cards1, cards2, goal):
# goal이 card1, card2 의 조합 중 하나하면 yes
first = []
second = []
for i in goal:
if i in cards1:
first.append(i)
elif i in cards2:
second.append(i)
length = compare(first, cards1) + compare(second, cards2)
if length == len(goal):
return 'Yes'
else:
return 'No'