[プログラマー][Python]ポンケンモン
📃 問題の説明
長い旅行を経て、あなたはやっと洪博士の研究室に着いた.洪博士はあなたに教えて、あなたは自分の実験室の全部のN匹の携帯電話の殻の中からN/2匹を持っていくことができます.
ホン博士研究室のボンケンモンは種類番号で区別されている.そのため、同じタイプの携帯電話のガードプロセスには同じ番号があります.例えば、研究室に4つの携帯電話のケースがある場合、各携帯電話のケースの種類番号は[3号、1号、2号、3号]で、3号携帯電話のケースが2つ、1号携帯電話のケースが2つ、2号携帯電話のケースが2つあることを示しています.このとき、4つのケースの中から2つを選ぶ方法は、以下の6つがあります.
可能な限り多くの携帯電話の保護プロセスを望んでいるので、できるだけ多くの携帯電話の保護プロセスを含むN/2を選択したいと思っています.n個の携帯電話ガードプロセスタイプ番号を含む配列numsをパラメータとして指定すると、N/2個の携帯電話ガードプロセスを選択する方法のうち、最も多くのタイプの携帯電話ガードプロセスを選択する方法を見つけ、解法関数を完了し、当時の携帯電話ガードプロセスタイプ番号の個数を返す.
せいげんじょうけん
numsresult[3,1,2,3]2[3,3,3,2,2,4]3[3,3,3,2,2,2]2
I/O例説明
I/O例#1
問題の例.
I/O例#2
ケースが6つあるのでケースを3つ選びます
最も多くの種類の携帯電話のケースを選ぶために、3番の携帯電話のケース、2番の携帯電話のケース、4番の携帯電話のケースを選んで、それから3に戻ることができます.
I/O例#3
ケースが6つあるのでケースを3つ選びます
最も種類の多い携帯電話のケースを選ぶためには、3番の携帯電話のケースと2番の携帯電話のケースを1匹、または3番の携帯電話のケースを2匹、3番の携帯電話のケースを1匹選ぶことができます.そのため、最大選択可能なケースのタイプ数は2です.
💻 問題を解く
def solution(nums):
# len(nums)//2 : 골라야 하는 폰켓몬 수
# len(set(nums)) : 중복값을 제외한 폰켓몬 종류의 수
if len(nums)//2 < len(set(nums)):
return len(nums)//2
else:
return len(set(nums))
キー(Key)
set()
利用例
例を挙げて説明すると分かりやすいようです.
"""예시1"""
nums = [3,3,3,2,2,2]
"""
# 골라야 하는 폰켓몬 수 : 3개 (6//2)
# 중복값을 제외한 폰켓몬 종류의 수 : 2개 (set(nums) => {3,2})
3개를 골라야 하는 입장에서 가장 많은 종류를 골라야 하는데,
중복값을 제외한 폰켓몬 종류의 수는 2개 밖에 없다.
그러면 결국 최대값은 2이다.
"""
"""예시2"""
nums = [1,2,3,4]
"""
# 골라야 하는 폰켓몬 수 : 2개 (4//2)
# 중복값을 제외한 폰켓몬 종류의 수 : 4개 (set(nums) => {1,2,3,4})
2개를 골라야 하는 입장에서 가장 많은 종류를 골라야 하는데,
중복값을 제외한 폰켓몬 종류의 수는 4개씩이나 있다.
그러면 결국 4개중 2개 아무거나 고르면 되기 때문에 최대값은 2이다.
"""
シングルラインエンコーディング
min()
を使用して、2つの小さな値の関数を返します.def solution(nums):
return min(len(nums)//2 , len(set(nums)))
Reference
この問題について([プログラマー][Python]ポンケンモン), 我々は、より多くの情報をここで見つけました https://velog.io/@insutance/프로그래머스Python-폰켓몬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol