SWIFTで解決


プログラマーの問題をswiftで解決する


問題の説明 一般的なプリンタでは、必要な印刷順に印刷されます。したがって、重要なドキュメントは後で印刷される可能性があります。この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます。

印刷待ちリスト
  • から、先頭の文書(J)を取り出す.
  • 残りの
  • 個の印刷対象リストにJよりも重要なドキュメントがある場合は、Jを印刷対象リストの最後に配置します.
  • でなければJを印刷します.
    例えば、4つの文書(A、B、C、D)が印刷対象リストに順次存在し、重要度が2 1 3 2の場合、CD A Bの順に印刷される.
  • 私が印刷を要求したドキュメントが何回目の印刷なのか知りたいです.上記の例では、Cは1位、Aは3位である.
    ソリューション関数を作成してください.パラメータが現在のキュー・リスト内のドキュメントの重要度のソート順と、印刷を要求したドキュメントが現在のキュー・リスト内にある場所を指定した場合、印刷を要求したドキュメントの何回目の印刷かを返します.
    せいげんじょうけん
    現在のキュー・リストには、100個未満の1つ以上のドキュメントが含まれています.
    印刷ジョブの重要性は1~9で表され、数字が大きいほど重要です.
    locationには0未満の値(現在のキューリストのタスク数-1)があり、キューリストの一番前にある場合は0、2番目にある場合は1と表示されます.
    I/O例
    priorities location return
    [2, 1, 3, 2] 2 1
    [1, 1, 9, 1, 1, 1] 0 5
    I/O例説明
    例1
    問題の例は次のとおりです.
    例2
    6つの文書(A、B、C、D、E、F)は、印刷対象リストにおいて、重要度が1 1 1 1 9 1 1 1 1であり、C D E F A Bの順に印刷される.
    私の答え
    import Foundation
    
    func solution(_ priorities:[Int], _ location:Int) -> Int {
        let pri = priorities[location]
        var max: Int = pri
        var max_loc: Int = 0
        var seq: Int = 0
        for i in priorities {
            max = i > pri ? i : max
        }
        while max > pri {
            var cnt = max_loc
            for j in cnt..<priorities.count {
                if max == priorities[j] {
                    seq += 1
                    max_loc = j
                }
            }
            for j in 0..<cnt {
                if max == priorities[j] {
                    seq += 1 
                    max_loc = j
                }
            }
            max -= 1
        }
        if max_loc < location {
            for i in max_loc..<location {
                if priorities[i] == max { seq += 1 }
            }
        } else if max_loc > location{
            for i in max_loc..<priorities.count {
                if priorities[i] == max { seq += 1 }
            }
            for i in 0 ..< location {
                if priorities[i] == max { seq += 1 }
            }
        } else {
            return seq + 1
        }
        return seq + 1
    }
    
    論理的説明 例えば[1,4,9,5,4],1

    最大(最大重要度を探す)-->9
    maxが検索するドキュメントの重要性より大きい場合(4)
    max loc(現在のドキュメント出力位置)を指定します.
    seqを順に1上げます.(maxが見つかるたびに)
    たとえば、
    9が見つかったのでmax loc=2     seq = 1
    max locから最後まで、次のmaxが見つかったらmax locを設定します.
    seqを1つ追加します.
    0から前max locまでmaxを再検索します.(重複maxが存在する可能性があるため)
    最後に、自分を含むseq+1を返し、終了します.