[珂太]救命ボート


質問する

1.どのように接近するか

  • の入力と出力を書いて条件を見ました.
  • はpeopleとlimit、数値配列と数値として入力されます.
  • の出力は最も少ない救命ボートの人数です.
  • 条件:最大2人乗り、最低1人式救命ボート.座れないことはないそうです.
  • 最初はソートしたくないので、探してみたいです.ソートを行うと、startインデックスとendインデックスで論理をより簡単に実現できるようです.
  • 並べ替えがなければ?バブルソートのようにアレイ全体を検査し続けるべきです.あまり小さく並んでいないので、一列に並んだほうがいいです.
  • 2.私が作成したコードの説明

  • 人の並びを並べ替えた後、一番前と一番後ろの値を確認し、2人が救命ボートに乗れる数を探します.
  • 3.私が解いた答え

    def solution(people, limit):
        answer = 0
        # 먼저 people을 오름차순으로 정렬한다
        people.sort();
    
        # 초기값 설정.
        start = 0;
        end = len(people) - 1
        pair_count = 0;
    
        while(True):
          if start >= end:
            break;
          weight = people[start] + people[end]
          if weight <= limit:
            pair_count+=1
            start+=1
            end-=1
          else:
            end-=1
    
        answer = len(people) - (pair_count*2) + pair_count
        return answer

    4.他人を説明する

    def solution2(people, limit) :
        answer = 0
        people.sort()
    
        a = 0
        b = len(people) - 1
        while a < b :
            if people[b] + people[a] <= limit :
                a += 1
                answer += 1
            b -= 1
        return len(people) - answer

    5.修正した草

    def solution3(people, limit):
        answer = 0
        people.sort();
    
        start = 0;
        end = len(people) - 1
        pair_count = 0;
    
        while(start < end):
          if people[start] + people[end] <= limit:
            pair_count+=1
            start+=1
          end-=1
    
        answer = len(people) - pair_count
        return answer

    6.感じ:


    1)全く同じ論理であるが,コードをどれだけ減らすことができるか,
    2)変数名ははっきり言って、韓私はもっとよく見えますが、数行もなく、意味があるかもしれませんが、これは習慣的な方法だと思います.

    7.改善点:


    1)無限ループを回避するのはよいが,もちろん割り込みを最初の条件文として書くことができる.
    2)不要な変数(重み)の制御
    3)同じ繰り返しであれば、それを外に出して1行に短縮し、end-=1

    8.称賛に値するところ?:

  • を過度に減らすよりも、変数を適切に使用するほうが読みやすいのではないでしょうか.