[プログラマー]ポンケンモン


質問する


出典:プログラマーコードテスト練習、ポンケンモン
https://programmers.co.kr/learn/courses/30/lessons/1845#

問題の説明


長い旅行を経て、あなたはやっと洪博士の研究室に着いた.洪博士はあなたに教えて、あなたは自分の実験室の全部のN匹の携帯電話の殻の中からN/2匹を持っていくことができます.
ホン博士研究室のボンケンモンは種類番号で区別されている.そのため、同じタイプの携帯電話のガードプロセスには同じ番号があります.例えば、研究室に4つの携帯電話のケースがある場合、各携帯電話のケースの種類番号は[3号、1号、2号、3号]で、3号携帯電話のケースが2つ、1号携帯電話のケースが2つ、2号携帯電話のケースが2つあることを示しています.このとき、4つのケースの中から2つを選ぶ方法は、以下の6つがあります.
  • 第1号(3号)、第2号(1号)携帯電話守護プロセス
  • を選択
  • 第1回(3回)、第3回(2回)携帯電話守護プロセス
  • を選択
  • 最初の(3)、4番目の(3)携帯電話のガードプロセス
  • を選択
  • 第2(1)、第3(2)携帯電話守護プロセス
  • を選択する.
  • 第2(1)、第4(3)携帯電話守護プロセス
  • を選択する.
  • 第3(2)、第4(3)携帯電話守護プロセス
  • を選択
    この場合、1番目(3番)のphonecketmonと4番目(3番)のphonecketmonを選択する方法は1つ(3番のphonecketmonの2つ)のphonecketmonしかありませんが、他の方法は2つのphonecketmonがあります.したがって、上記の例では、携帯電話のケースタイプ数の最大値は2です.
    可能な限り多くの携帯電話の保護プロセスを望んでいるので、できるだけ多くの携帯電話の保護プロセスを含むN/2を選択したいと思っています.n個の携帯電話ガードプロセスタイプ番号を含む配列numsをパラメータとして指定すると、N/2個の携帯電話ガードプロセスを選択する方法のうち、最も多くのタイプの携帯電話ガードプロセスを選択する方法を見つけ、解法関数を完了し、当時の携帯電話ガードプロセスタイプ番号の個数を返す.

    せいげんじょうけん

  • numsは、携帯電話のデーモンプロセスのタイプ番号を含む1次元配列です.
  • numsの長さ(N)は1または10000以下の自然数であり、常に偶数である.
  • 携帯電話のガードプロセスのタイプ番号は1または2万0以下の自然数です.
  • 最も多くのタイプの携帯電話のデーモンを選択する方法が複数ある場合は、最大1つの選択可能な携帯電話のデーモンタイプの値を返すだけでよい.
  • I/O例


    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です.

    コード#コード#

    function solution(nums) {
        return [... new Set(nums)].length <= nums.length/2 ? [... new Set(nums)].length : nums.length/2;
    }

    に答える


  • Setオブジェクトから重複値の項目を削除すると、アレイ長の携帯電話デーモンの数を選択できます.

  • 1のタイプ数が選択可能な携帯電話ケース釘の元のアレイ(nums)の長さの半分未満である場合、最大選択可能な携帯電話ケースのタイプ数は1から得られたタイプ数[.new Set(nums)]に等しい.長さを返します.

  • 種類数が選択可能なPhonecketmonの数より多い場合、選択可能なPhonecketmonの数は選択可能な最大のPhonecketmonの種類数numsである.長さ/2を返します.