-
(프로그래머스) 코딩테스트 연습 > 해시 > 위장코딩연습 2020. 3. 25. 18:40
스파이들은 매일 다른 옷을 조합하여 자신을 위장해야 한다. 조합할 옷에 관한 정보는 종류와 이름으로 주어진다. 스파이는 최소한 한 개의 옷은 위장에 사용해야 한다. 이 문제는 옷의 개수를 종류별로 세어준다음 경우의 수를 계산해주면 된다. 예를 들어 'a':5, 'b':3, 'c':2와 같이 a타입 5개, b타입 3개 c타입 2개가 있다면 우리가 고를 수 있는 선택지는 6x4x3-1이 된다. 여기서 곱하는 수가 각각의 타입별 옷의 개수보다 1개 더 많다는 것을 주목해야 한다. 왜 1개를 더 세어주냐면 각 타입 별로 선택을 하지 않는 경우를 헤아리기 위함이다. 그리고 1을 빼어주는 이유는 앞의 곱하기에서 모든 타입을 선택하지 않는 경우를 세어버렸기 때문에 그걸 제외시키기 위한 것이다.
def solution(clothes): answer = 1 pick = {} for _, kind in clothes: pick[kind] = pick.get(kind, 0) + 1 for num in [pick[kind] for kind in pick]: answer *= num + 1 return answer - 1
다른 사람들의 풀이를 보니, lambda와 기타 함수들을 활용하여 더 간결하게 만든 코드도 존재한다.
'코딩연습' 카테고리의 다른 글
같은 숫자는 싫어 (0) 2020.08.02 두 정수 사이의 합 (0) 2020.07.30 (프로그래머스) 코딩테스트 연습 > 그리디 > 저울 (0) 2020.03.25 (프로그래머스) 코딩테스트 연습 > 그리디 > 체육복 (0) 2020.03.19 (프로그래머스) 코딩테스트 연습 > 해시 > 전화번호 목록 (0) 2020.03.19