Algorithm🧶 | に見せかける
https://programmers.co.kr/learn/courses/30/lessons/42578
問題の説明
スパイたちは毎日違う服を着て自分を偽装している.
例えば、スパイの服が以下のように、今日スパイが丸い眼鏡、長いコート、青いTシャツを着ている場合は、翌日はジーンズを追加したり、黒いサングラスをかけたりして、丸い眼鏡ではありません.
顔が丸いメガネ、黒いサングラスに青いTシャツのジーンズコートロングコート
スパイが持っている服に二次元配列の服が与えられた場合、異なる服の組み合わせの数を返すために解関数を作成します.
せいげんじょうけん服装の各行は「服装名、服装種類」からなる. スパイが持っている服の数は1着以上30着以下. のような名前の服は存在しません. アパレルのすべての要素は文字列から構成されています. すべての文字列の長さは、1または20未満の自然数であり、アルファベット小文字または「」のみから構成されます. スパイは毎日少なくとも1枚の服を着ている. I/O例
clothesreturn[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]5[["crowmask", "face"], ["bluesunglasses", "face"], ["smoky_makeup", "face"]]3
I/O例説明
例1
headgearに対応した服装は黄色hat、緑turban、眼鏡に対応した服装は青サングラスで、以下の5つの組み合わせが可能です.
Faceに対応した服装はcrow mask,blue sunglasse,mocky paskであり,以下の3つの組み合わせが可能である.
最初の解😁
失敗🤪
第二の解釈
他人の解答
問題の説明
スパイたちは毎日違う服を着て自分を偽装している.
例えば、スパイの服が以下のように、今日スパイが丸い眼鏡、長いコート、青いTシャツを着ている場合は、翌日はジーンズを追加したり、黒いサングラスをかけたりして、丸い眼鏡ではありません.
顔が丸いメガネ、黒いサングラスに青いTシャツのジーンズコートロングコート
スパイが持っている服に二次元配列の服が与えられた場合、異なる服の組み合わせの数を返すために解関数を作成します.
せいげんじょうけん
clothesreturn[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]5[["crowmask", "face"], ["bluesunglasses", "face"], ["smoky_makeup", "face"]]3
I/O例説明
例1
headgearに対応した服装は黄色hat、緑turban、眼鏡に対応した服装は青サングラスで、以下の5つの組み合わせが可能です.
1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses
例2Faceに対応した服装はcrow mask,blue sunglasse,mocky paskであり,以下の3つの組み合わせが可能である.
1. crow_mask
2. blue_sunglasses
3. smoky_makeup
問題を解く最初の解😁
def solution(clothes):
a=0
two = []
one = []
while True:
if a == len(clothes):
break
for i in range(len(clothes)):
one.append(f"{clothes[i][0]}")
if i != a and i > a:
if clothes[a][1] != clothes[i][1]:
two.append((clothes[a][0],clothes[i][0]))
if i == len(clothes)-1:
a += 1
two = list(set(two))
one = list(set(one))
return len(two) + len(one)
衣装の種類は2種類までしか並べられません失敗🤪
第二の解釈
def solution(clothes):
kind_dic={}
for name, kind in clothes: #dictionary를 이용하여 각 종류의 갯수를 가지고 온 뒤
if kind in kind_dic:
kind_dic[kind] += 1
else:
kind_dic[kind] = 1
count = 1
for i in kind_dic.values(): #dictionary의 value를 가져와 1을 더한 수를 곱해준다 (1을 더한 이유? 1을 더하지 않으면 해당되는 의상의 종류를 입지않을 경우를 나타내지 못한다)
count *= i+1
return count -1 #아무것도 안 입을 경우는 제한다
成功👍他人の解答
import collections
from functools import reduce
def solution(c):
return reduce(lambda x,y:x*y,[a+1 for a in collections.Counter([x[1] for x in c]).values()])-1
他人解答2def solution(clothes):
from collections import Counter
from functools import reduce
cnt = Counter([kind for name, kind in clothes])
answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
return answer
Reference
この問題について(Algorithm🧶 | に見せかける), 我々は、より多くの情報をここで見つけました https://velog.io/@action2thefuture/Algorithm-위장Hashテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol