문제
문제 설명
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류이름얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
입력 & 출력
입출력 예
clothesreturn
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] | 5 |
[["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]] | 3 |
풀이 과정
1. 각각의 의상의 타입을 구해야 한다. 처음 구상은 입력받은 clothes의 값을 for문으로 나열하면서 clothe라는 배열 값을 얻어내고 그 배열 값의 [1] 값을 구하면서 result_type 변수에 넣는 것으로 생각하였지만 다른 사람의 풀이를 참고하여 밑의 방식대로 types = [y for x, y in clothes]로 타입의 개수를 구하였다.
2. set 함수를 이용하여 types에 있는 중복을 제거하여 준다 이렇게 되면 중복이 제거된 타입의 경우의 수가 나오게 되고 중복이 제거 되지 않은 것에서 몇 번이나 들어가 있었는지를 count 함수를 이용하여 얻어오게 되면 타입마다의 횟수를 구할 수 있다.
3. 마지막으로 이렇게 구한 횟수 값의 배열의 값에 각각 1을 더해서 곱해준다음 1을 빼주면 원하는 경우의 수를 얻을 수 있다.
코드
def solution(clothes):
answer = 1
types = [y for x, y in clothes]
counts = [types.count(type) for type in set(types)]
for c in counts:
answer *= c + 1
return answer - 1
'Algorithm' 카테고리의 다른 글
[프로그래머스] 줄 서는 방법 (0) | 2022.09.07 |
---|---|
[프로그래머스] 방문길이 (0) | 2022.09.06 |
[프로그래머스] 튜플 (0) | 2022.08.28 |
[프로그래머스] 수식 최대화 (0) | 2022.08.24 |
[프로그래머스] 올바른 괄호 (0) | 2022.08.20 |