[프로그래머스/Python] 위장

minj-j·2022년 7월 31일
0

CodingTest

목록 보기
6/14

🐹 내가 풀이한 코드 & 참고한 블로그 🐹

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에 의존하는 습관을 버려야 한다.

profile
minj-j`s Development diary!

0개의 댓글