문제설명
제한사항
문제 분석
입력값을 보면 2차원 리스트이고 각 요소의 0번째 인덱스는 옷의 이름, 1번째 인덱스는 옷의 종류이다. 같은 종류의 옷은 입을 때 1가지 밖에 못입기 때문에 옷의 각 종류마다 몇개씩 있는지 파악해야한다. 어차피 문제를 보면 경우의 수 구해야하는 문제이기 때문에 개수만 구하면 된다.
Python3
def solution(clothes):
answer = 1
category = {} # 옷의 종류를 key로하고 개수를 value로하는 딕셔너리 생성
# 종류와 개수 딕셔너리에 넣기
for item in clothes:
category[item[1]] = category.get(item[1], 0) + 1
for key, value in category.items():
answer *= value + 1
return answer - 1
category[item[1]] = category.get(item[1], 0) + 1
옷의 종류를 key로하고 옷의 개수를 value로 하는 딕셔너리를 생성할 것이다. 딕셔너리 key로 어떤 옷의 종류가 들어갈지 모르기 때문에 일단 빈 딕셔너리 상태일 것이다. 딕셔너리에 값을 추가하는 방법은 딕서너리[key] = value 방식으로 추가하면 된다. 하지만 지금은 딕셔너리에 값을 처음으로 추가하려고 할 때 딕셔너리 내부에 key가 없을 것이다. 그러면 기존 방식으로 값을 추가하려고 한다면 무조건 에러가 날 것이다. 그래서 우리는 딕셔너리에 사용가능한 get 함수를 사용해야 한다.
get함수는 첫번쩨 매개변수로 key값을 받는다. 딕셔너리에 매개변수로 주어진 key가 존재하면 key에 해당하는 value값이 반환되고, 없다면 default로 None값을 반환한다. 우리는 값이 없을 때를 대비해서 처음엔 1이 들어가야 할 것이다. 그래서 두번째 매개변수로 1로 적으려 할텐데, 그러면 안된다. 왜냐하면 1을 주게 된다면 딕셔너리에 이미 key가 있을 때는 1을 더해주기 위해서 +1 이 필요한데, +1 을 적으면 딕셔너리에 key가 없을 때도 +1이 되기 때문에 초기값이 2가 되버린다. 따라서 두번째 매개변수는 0으로 준다.
answer *= value + 1
자 이제 각 옷들의 개수를 가지고 경우의 수를 구하면 된다. 적어도 1개의 옷만 입어도 된다고 했으니까 꼭 모든 종류의 옷을 1가지 무조건 입을 필요가 없다. 즉, 특정 종류의 옷은 입지 않을 수도 있다는 것이다. 따라서 옷을 안 입는 경우의 수도 있기 때문에 +1을 해준다.
JavaScript
function solution(clothes) {
var answer = 1;
let category = {} // 옷의 종류와 개수 담을 객체
// 자바스크립트의 || 는 true가 나오면 바로 반환하고 끝남
// 카테고리가 있으면 +1 하고 아니라면 카테고리를 추가하고 value로 0을 준 후 +1
clothes.forEach((item) => category[item[1]] = (category[item[1]] || 0) + 1)
for (item in category){
answer *= category[item] + 1
}
return answer - 1;
}
'Coding Test' 카테고리의 다른 글
[CT - 프로그래머스] 베스트앨범 (0) | 2023.10.27 |
---|---|
[CT - 프로그래머스] 전화번호 목록 (0) | 2023.10.23 |