오늘도 역시..
"If you have a problem, just throw a hashmap"

오늘은 해시맵 key 하나에 여러 value들을 assign 하는 방법이다.
바로 애초에 하나를 추가할 때 list로 추가해주고, 이미 value가 있으면 list에 .append() 해주는게 방법이다.
코드로 보자. 오늘은 LeetCode가 아닌 프로그래머스에서 가져왔다.

저렇게 뭐가 리스트로 주욱 왔는데, 카테고리 별로 아이템이 있으니,
문제 설명 부분의 표처럼 해시맵으로 정리하고자 했다.

없으면 추가해줄 때 [cloth] 이렇게 리스트로 감싸주고 추가해주면 된다.
이렇게 안하면 추후에 append가 안되기 때문에 대괄호로 감싸줘야한다.
여기서는 string이 들어가는데, list(cloth) 이렇게 해주면 문자 하나하나 들어간다. 그냥 대괄호로 감싸주자.
그리고 여기서 경우의 수를 구하는 풀이법을 생각을 못했는데, 기가막힌 방법이 있어서 복습하고자 작성한다.

<해설>
각 카테고리 마다 옷이 있다.
옷을 적어도 한 카테고리에서는 입어야 한다. 또한 각 카테고리에서 하나만 정할 수 있다.
모든 경우의 수를 구하려면, 각 key들이 가진 value 개수를 val 이라고 할 때,
모든 key들의 val + 1을 다 곱해주고, 마지막에 1을 빼주는 것이다.
이게 무슨 뜻이냐? 왜 val + 1을 해주냐?
1을 더해주는 것은 이 카테고리를 아예 선택하지 않을 경우의 수까지 고려해주는 것이다.
예를 들어, 문제 설명에서처럼
얼굴) 안경, 선글라스
가 있으면, 우리는
얼굴) 안경, 선글라스, 얼굴 장식 안하기(옵션)
이 추가된 것이다. 이렇게 경우의 수를 곱해주면, 나중에 경우의 수를 셀 때 자동으로 '얼굴 장식 안하기' 옵션이 선택된 상태에서 밑의 카테고리 애들을 또 선택할 수 있게 된다. 그러면 얼굴 카테고리 없이 상의/하의/겉옷 이렇게도 되고, 나머지들도 똑같이 '어떤 카테고리를 아예 꺼버리는 옵션' 을 추가하는 느낌으로 + 1 을 해주는 것이다.
하지만, 모든 카테고리를 다 꺼버리는 경우의 수가 생긴다. 우리는 적어도 하나는 입어야 하기 때문에 모든 카테고리를 다 꺼버리는 경우의 수를 빼주기 위해 - 1을 마지막에 해주는 것이다.
'LeetCode' 카테고리의 다른 글
[프로그래머스] Hash - 하나의 Key에 여러 Tuple value (0) | 2025.01.10 |
---|---|
zip() 함수 사용하기 (0) | 2025.01.09 |
[Sliding Window] Minimum Size Subarray Sum (0) | 2025.01.02 |
[Two Pointer technique] (0) | 2024.09.23 |
[String] Find the Index of the First Occurrence in a String (0) | 2024.09.23 |
오늘도 역시..
"If you have a problem, just throw a hashmap"

오늘은 해시맵 key 하나에 여러 value들을 assign 하는 방법이다.
바로 애초에 하나를 추가할 때 list로 추가해주고, 이미 value가 있으면 list에 .append() 해주는게 방법이다.
코드로 보자. 오늘은 LeetCode가 아닌 프로그래머스에서 가져왔다.

저렇게 뭐가 리스트로 주욱 왔는데, 카테고리 별로 아이템이 있으니,
문제 설명 부분의 표처럼 해시맵으로 정리하고자 했다.

없으면 추가해줄 때 [cloth] 이렇게 리스트로 감싸주고 추가해주면 된다.
이렇게 안하면 추후에 append가 안되기 때문에 대괄호로 감싸줘야한다.
여기서는 string이 들어가는데, list(cloth) 이렇게 해주면 문자 하나하나 들어간다. 그냥 대괄호로 감싸주자.
그리고 여기서 경우의 수를 구하는 풀이법을 생각을 못했는데, 기가막힌 방법이 있어서 복습하고자 작성한다.

<해설>
각 카테고리 마다 옷이 있다.
옷을 적어도 한 카테고리에서는 입어야 한다. 또한 각 카테고리에서 하나만 정할 수 있다.
모든 경우의 수를 구하려면, 각 key들이 가진 value 개수를 val 이라고 할 때,
모든 key들의 val + 1을 다 곱해주고, 마지막에 1을 빼주는 것이다.
이게 무슨 뜻이냐? 왜 val + 1을 해주냐?
1을 더해주는 것은 이 카테고리를 아예 선택하지 않을 경우의 수까지 고려해주는 것이다.
예를 들어, 문제 설명에서처럼
얼굴) 안경, 선글라스
가 있으면, 우리는
얼굴) 안경, 선글라스, 얼굴 장식 안하기(옵션)
이 추가된 것이다. 이렇게 경우의 수를 곱해주면, 나중에 경우의 수를 셀 때 자동으로 '얼굴 장식 안하기' 옵션이 선택된 상태에서 밑의 카테고리 애들을 또 선택할 수 있게 된다. 그러면 얼굴 카테고리 없이 상의/하의/겉옷 이렇게도 되고, 나머지들도 똑같이 '어떤 카테고리를 아예 꺼버리는 옵션' 을 추가하는 느낌으로 + 1 을 해주는 것이다.
하지만, 모든 카테고리를 다 꺼버리는 경우의 수가 생긴다. 우리는 적어도 하나는 입어야 하기 때문에 모든 카테고리를 다 꺼버리는 경우의 수를 빼주기 위해 - 1을 마지막에 해주는 것이다.
'LeetCode' 카테고리의 다른 글
[프로그래머스] Hash - 하나의 Key에 여러 Tuple value (0) | 2025.01.10 |
---|---|
zip() 함수 사용하기 (0) | 2025.01.09 |
[Sliding Window] Minimum Size Subarray Sum (0) | 2025.01.02 |
[Two Pointer technique] (0) | 2024.09.23 |
[String] Find the Index of the First Occurrence in a String (0) | 2024.09.23 |