문제출처
programmers.co.kr/learn/courses/30/lessons/42578?language=swift
문제설명
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
종류 | 이름 |
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지 |
겉옷 | 긴 코트 |
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
✨문제풀이
풀고나면 쉬운데 처음에 문제 의도를 파악못해서 시간이 조금 걸렸다.
이 문제는 단순하게 의상 종류별로 경우의 수를 구하면 되는 문제인데 주의할 점은 종류별로 의상이 1개도 선택되지 않는 경우가 있을 수 있다는 것이다.
만약 상의 2개, 하의 3개 라면
일반적으로 경우의 수를 구할때 단순하게 2 ✖️ 3을 하면 되기 때문에 6가지가 나온다.
이 경우는 상의나 하의가 1번씩은 모두 선택되는 경우이고 상의나 하의가 아예 선택되지 않은 경우는 없다.
하지만 문제에서는 하루에 최소 1개의 의상을 입을 수 있다고 하였으므로 상의가 1개도 선택되지 않거나 하의가 1개도 선택되지 않는 상황도 포함해주어야 한다.
따라서 경우의 수를 계산하기 전에 각 의상별로 선택되지 않는 상황을 1씩 더해주면 된다.
상의 2개 + 1(선택되지 않는 경우)
하의 3개 + 1(선택되지 않는 경우)
(2+1) ✖️ (3+1) 로 계산하면 되는데 여기에는 상의가 선택되지 않으면서 하의도 선택되지 않는 경우도 포함되므로 이 경우의 수만 빼주면 된다.
3 ✖️ 4 ➖ 1 = 11 로 계산하면 된다.
코드는 두 순서로 구현하였다.
1) 의상을 종류별로 구분하여 개수를 세어준다
2) 종류별 개수를 가지고 경우의 수를 계산해 준다
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 3진법 뒤집기 (레벨1, swift) (0) | 2020.11.05 |
---|---|
프로그래머스 - 두 개 뽑아서 더하기 (레벨1, swift) (0) | 2020.10.24 |
프로그래머스 - 다리를 지나는 트럭 (레벨2, swift) (0) | 2020.07.30 |
프로그래머스 - 땅따먹기 (레벨2, swift) (0) | 2020.07.20 |
프로그래머스 - 올바른 괄호 (레벨2, swift) (0) | 2020.07.20 |