티스토리 뷰

 

https://programmers.co.kr/learn/courses/30/lessons/42578

프로그래머스 위장 문제.

문제 해설을 처음에 잘못이해해서 좀 헤맸었다.

결국엔 스파이는 한가지 이상의 옷을 입으며, 옷을 입을 수 있는 경우의 수가 몇가지인지 출력하면 되는 문제.

Counter 함수를 이용해 풀수 있었다. Counter의 기능을 활용하면 종류의 개수를 쉽게 구할 수 있고, 문제의 취지인 Hash함수 형태로서 효율적으로 구할 수 있었다.

count_clothes = Counter(i[1] for i in s)

위 코드를 보면 count_clothes는 s리스트의 1번째 인덱스만 Counter한 것을 구해준 것이다.

문제의 예시는 [의상이름. 의상종류] 로 되어있어서 0번째 인덱스는 이름, 1번째 인덱스는 종류이고, 종류의 개수만 구해서 이렇게 출력된다.

이렇게 dict형식으로 key : value 형태로 저장됐다. 문제를 풀기 위해선 종류가 몇가지 있는지 value값만 필요하다.

count_clothes.values() 를 하면 아래와 같이 표현된다

count_clothes.values() 를 하면 아래와 같이 표현된다

 

https://m.blog.naver.com/PostView.nhn?blogId=nowedu1&logNo=220555048785&proxyReferer=https:%2F%2F
www.google.com%2F

 

[확률] 경우의 수_1 빠짐없이, 중복되지 않게... 경우는 달라도 경우의 수는 같다.

[확률] 경우의 수_1 빠짐없이, 중복되지 않게... 경우는 달라도 경우의 수는 같다. 경우의 수와 확률은 초...

blog.naver.com

경우의 수 공식은 위의 블로그에서 찾을 수 있었다.

스파이는 옷을 입지 않는 경우도 있으므로 (의상종류+1) * (의상종류+1) * (의상종류+1) 이 경우의 수가 되는데,

아무것도 입지 않는 경우의 수를 빼서 최종적으로 (의상종류+1) * (의상종류+1) * (의상종류+1) - 1 이된다.

    for j in count_clothes.values():
        answer *= (j + 1) # 의상 종류의 갯수 +1씩해서 곱해줌
    answer -= 1 # 아무것도 입지 않은 경우의수 1을 뺌

그렇게 정답이 완성되었다.