プログラマコードテスト高得点kit hash偽装


質問の表示 👈 クリック!

💡 に答える


解✔方法


次の服があるとします.
髪:[サングラス、ウィッグ]、上着:[黒い服、青い服、白い服]、下衣:[ジーンズ、半ズボン、スカート]
頭:総数+何もしない場合=2+1=3
トップス:総数+何もしない場合=3+1=4
下衣:総数+何もしない場合=3+1=4
総てのケース数=3×4×4と思われがちですが、少なくとも1枚は着なければならないので、着ない場合は外しましょう.
合計数=3 X 4 X 4-1=48-1=47種

インプリメンテーションコード👇

def solution(clothes):
    
    #part_n_dict = {부위 : 옷 개수 + 1, ....}
    #1을 더하는 이유는 해당 부위의 옷을 안입는 경우를 포함하기 위함
    part_n_dict = dict()
    for cl, part in clothes:
        part_n_dict[part] = part_n_dict.get(part, 1) + 1
        
    answer = 1
    for n in part_n_dict.values():
        answer *= n

    #최소 한 개의 의상은 입어야하기 때문에 전체 케이스 중 모든 옷을 안입는 경우를 빼줌
    return answer-1

モジュールを使用して簡単に実装されるコード👇

from collections import Counter
from functools import reduce

def solution(clothes):
    
    clothes_dic = Counter([part for cl, part in clothes])
    answer = reduce(lambda acc,cur: acc*(cur + 1), clothes_dic.values(), 1) - 1
    
    return answer
📝 最初に思いついた方法はitertoolsこれは,組合せモジュールを用いてすべての状況の数を計算する方法である.この方法はテスト1で失敗した(タイムアウト).後で問題を解く時、もっと簡単な方法があるかどうかをもう一度チェックします.😠