🐹 내가 풀이한 코드 & 참고한 블로그 🐹
def solution(clothes):
answer = 1
hashmap = {}
for clothe, type in clothes:
hashmap[type] = hashmap.get(type, 0) + 1 #1.
for type in hashmap:
answer *= (hashmap[type]+1) #2.
return (answer-1)
해시 카테고리에 있는 문제 이기에 최대한 해시로 풀어볼려고 했다.
먼저 clothes에 들어있는 배열들을 hashmap으로 만들어 주었다.
예시로 나온 clothes에 들어가는 배열 목록은
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
이다.
두번째에 있는 값들을 키로 사용하고자
hashmap[type]
이라고 작성했다.
그리고 이에 값으로 들어가는 hashmap.get(type, 0) + 1
은
key에 해당하는 value가 있으면 가져오고,
아닐 경우 0을 Default로 지정하여 사용하겠다는 의미이다.
+1
을 하였으니 기존에 value가 있었으면 기존 value 값에 +1을 해주면 되고,
없었으면 1을 넣어주면 되는 것이다.
첫 번째 for문이 끝난 결과는
{'headgear': 2, 'eyewear': 1}
이다.
두 번째 for문은 스파이가 위장을 할 수 있는 경우의 수를
구하는 for문이다.
이때, 스파이가 아무것도 입지 않을 경우를 고려해 줘야 하는데
그럼 경우가 어떻게 나오냐면
yellow_hat을 쓸 경우 1, green_turban을 쓸 경우 1, 어떤 headgear도 쓰지 않는 경우
이렇게 3가지
blue_sunglasses 쓸 경우 1 어떤 eyewear도 쓰지 않는 경우 1
이렇게 2가지가 나온다.
둘의 경우의 수를 구하기 위해 곱하면 6이나온다.
근데 문제에서 스파이가 어떤 옷도 입지 않을 경우는 없다
고 했다.
그렇다면 전체 경우에수에서 스파이가 어떤 옷도 입지 않는 경우 1만 빼면 된다.
answer - 1
이렇게 답이 나왔다.
🐹 안 읽어도 되는 실패기
이번에도 역시 꼬아서 생각했다.
나는 여러가지 조합하는 류의 문제가 나오면
무조건 조합으로 풀 생각부터 하게된다.
그래도 이번에는 hash를 좀 공부했고,
문제 예시도 대놓고 key와 value를 줬기 때문에
hash로 풀어보고 싶었지만 combination
으로 밖에 방법이 생각나지 않아
combination
으로 풀이를 시작하였다.
answer = 0
just_cloth = []
for i in clothes:
just_cloth.append(i[0])
answer += 1
print(just_cloth)
print(answer)
from itertools import combinations
print(list(combinations(just_cloth, 2)))
일단 옷을 하나씩 입는 경우는 분명히 있으니
하나식 입는건 따로 for문으로 세주고
나머지는 combinations으로 조합을 찾아내려고 했다.
근데 간과한 것이 있었다. 이렇게 풀면 headgear가 두번 들어가는 경우도 생긴다는 것을,,,,(yellow_hat, green_turban)
이 경우를 어떻게 제외 시켜야 하나 고민하다가
hash를 써서 각 value에 key를 부여하면 되겠다는 생각까지 도달했지만
그 이후로는 어떻게 풀어나가야 할지 몰랐다.
그래서 결국 다른 분의 도움을 받게되었다.
경우의 수로 풀면 되는 문제였다.
무조건 적으로 for문과 combinations에 의존하는 습관을 버려야 한다.