アルゴリズム問題2-機能開発


2番目のアルゴリズム


前回に続き、今回はアルゴリズムの問題を解いてみました.この問題のテーマは機能開発です.

前回の質問と違って、すぐに理解できるようです.まず問題を理解し,return値と同じ結果を生成するためにコードを記述する.
問題を理解するようにprosessには進捗状況に応じた数値リストが入力されます.また、速度入力動作速度.進捗が100の場合は出力できますが、リストの前の進捗が完了していない場合は、後の進捗は配布できません.
FIFO方式のヒント問題のようです.
まず、速度に基づいて結果を出すのにどれだけの時間がかかるかを知る必要があります.
math関数を用いて分割する場合,ceil法を用いて無停止の小数点を上の整数に変換する.
import math

for i in range(len(progresses)):
	days.append(math.ceil((100-progresses[i])/speeds[i]))
そして、この数をdaysのリストとして宣言し、append保存で符号化する.結果はね.
テストの結果はすべて成功した.よし!しながらコードをコミットしましたテスト1、8、11を除いて、すべての結果が失敗しました.
「これは何?どこが間違っていますか.「何が間違っているのか理解できない」
考え直した.いろいろな状況を考慮し,不適切な状況を見つけなければならない.次のタスクはすべて100ですが、前のタスクのために導入が遅延した場合、エラーが発生する可能性があります.
この例外を考慮して,コードを書き直した.
import math

def solution(progresses, speeds):
    
    days = [] # progresses를 speeds의 속도로 처리하는 데 걸리는 각각의 시간을 담는 리스트
    answer = [] # 처리되는 배포 양?을 포함하는 리스트
    l = 0 # 위치를 반환하는 변수
    w = True #while문을 빠져나오기 위한 변수

    for i in range(len(progresses)): #math 함수의 ceil을 이용해 나누기의 소수점을 바로 위의 정수로 변환해 필요한 일 수 계산
        days.append(math.ceil((100-progresses[i])/speeds[i]))
    
    while w == True:

        for i in range(l,len(progresses)): #l부터 끝까지 탐색
            if days[l] < days[i]: #temp[l]보다 큰 수가 있는지 탐색
                answer.append(i-l)  #있다면 l - i인 값을 answer에 저장
                l = i #큰 수가 있는 i부터 다시 탐색
                break
            elif (i == len(progresses)-1) and (days[l] >= days[i]): #끝까지 갔는데 큰 수가 없을 경우
                answer.append(len(progresses)-l) #progresses의 전체 길이에서 l을 뺌.
                w = False #while문 탈출을 위해 w를 False로 변경
                break

    return answer
1時間かけてコードと対決し、作成したコードをプログラマーのプログラムに戻した.

結果は大成功だった.
今回の問題は皮肉なことではないかと思いますので、コードには時間がかかったと思います.Qとスタックの問題はまだ適応しにくい.問題をより速く解決するためには、多くの実習問題に触れる必要があるかもしれません.