-
[프로그래머스] LV1. 카드 뭉치알고리즘 2023. 3. 9. 13:17728x90
문제
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'
'알고리즘' 카테고리의 다른 글
[프로그래머스] LV1. 크기가 작은 부분 문자열 (0) 2023.03.09 [프로그래머스] LV1 과일 장수 (0) 2023.03.09 [프로그래머스] Lv1. 바탕화면 정리 (0) 2023.03.08 [백준] 20040 사이클 게임 (0) 2023.02.17 [알고리즘] 백준 - 극장좌석 (0) 2023.02.15