시간관리
사용언어 : python
Greedy Alogorithm
난이도 : 실버1
✍ 문제
💻 코드
💡초기 알고리즘
L,R=map(int,input().split())
Min=R
if L==R:
count=0
l=list(str(L))
for i in range(len(l)):
if l[i]=="8":
count+=1
else :
for k in range(L,R):
count=0
l=list(str(k))
for i in range(len(l)):
if l[i]=="8":
count+=1
if count<Min:
Min=count
if count==0:
break
print(Min)
Si-Ti
한 값은 최대로 늦은 각각의 일처리 시작시간이 됨Si-Ti
가 최대로 늦게 일을 시작할 수 있는 시간이므로 초깃값으로 세팅Ti
와 S(i+1)-T(i+1)
값을 비교 >이면 뺀 값만큼 초깃값 앞으로 당겨야함 ==이면 그대로 유지 <이면 공백이므로 다른 변수에 누적해서 저장해두며 반복한다😱 최종 결과 : 실패
실패...한 알고리즘.. 왜?
일단 앞에서 부터 채워넣는다는 발상이 잘못됨.
물론 최대 시작 시간의 값은 맞지만 앞부터 채워넣으면 생각해야할 경우의 수가 너무 많아짐 -> 그래서 위 코드에도 예외상황이 존재해 정답이 아님
즉 맨 뒤부터 꽉꽉 채워나가며 값을 시작시간을 갱신해 나가야함
💡수정된 정답 알고리즘
N=int(input())
TS=[list(map(int,input().split())) for _ in range(N)]
TS.sort(key=lambda x:(x[1],x[0]), reverse=True)
first=TS[0][1]-TS[0][0]
blank=0
print(TS)
for i in range(1,N):
if TS[i][1]>=first:
first-=TS[i][0]
else:
first=TS[i][1]-TS[i][0]
if first<0:
first=-1
break
print(first)
뒤부터 생각하니 코드가 간결..하고 쉽다..