[プログラマー]ユニホーム


🔗 質問リンク


https://programmers.co.kr/learn/courses/30/lessons/42862

💻 コード#コード#

def solution(n, lost, reserve):
    answer = 0
    data = [1] * (n + 2)

    for i in lost:
        if i in reserve:
            reserve.remove(i)
        else:
            data[i] = 0
    
    reserve.sort()
    
    for i in reserve:
        if data[i - 1] == 0:
            data[i - 1] = 1
        elif data[i + 1] == 0:
            data[i + 1] = 1

    answer = n - data.count(0)
    return answer

デザイン


データリストの範囲はn + 2理由は1番からn番までの生徒の真前方番号を確認するため、真後方番号は1番、n番の生徒も例外ではありません.運動服がある場合は1、盗難にあった学生は0とする.盗まれたものの、複数のユニホームを持っている学生は他の学生にユニホームを貸すことができず、自分で着ているため、その学生の番号を逆リストから削除して1に残す.
余分な服を着た学生は、まず自分の前の番号の学生が盗まれたかどうかを確認し、盗まれなかったら、後の番号の学生を確認します.
n=6、loss=[4,6]、reserve=[5,3]と入力すると、reserveがソートされていなければ、5番の学生は4番の学生に服を貸し、6番の学生は授業を受けることができなくなります.この場合、reserveをソートする必要があり、複数の服を着ている学生のうち、番号の小さい学生から、前番号、後番号を確認します.

📝 整理する


Pythonリスト関数の削除
  • remove():指定値を削除
  • del():該当箇所の項目を削除