본문 바로가기

공부하는 것들/알고리즘

백준 5532 : 방학 숙제

www.acmicpc.net/problem/5532

 

5532번: 방학 숙제

한 줄에 하나씩 총 다섯 줄에 걸쳐 L, A, B, C, D가 주어진다. (2 ≤ L ≤ 40, 1 ≤ A, B ≤ 1000, 1 ≤ C, D ≤ 100) 항상 방학 숙제를 방학 기간내에 다 할 수 있는 경우만 입력으로 주어진다.

www.acmicpc.net

 

방학 L

풀어야 하는 양: [ A, B ] 국어 A페이지, 수학 B페이지

하루에 풀 수 있는 양 : [C, D] 국어, 수학

놀 수 있는 최대 일수는?

 

if __name__=='__main__':
    lst = []
    for i in range(5):
        lst.append(int(input()))
    L,A,B,C,D = lst
    ans_K = A//C   # 국어숙제 하는 데 필요한 일수
    ans_M = B//D   # 수학숙제 하는 데 필요한 일수

    # 나눠떨어지지 않았다는 뜻이므로, 하루가 더 필요함
    if ans_K*C != A : ans_K += 1  
    if ans_M*D != B : ans_M += 1
    print(L-max(ans_K,ans_M))
   

 

wannabe00.tistory.com/entry/백준-4299-AFC-윔블던 <--여기서 배웠던 걸 사용했다.

A가 C의 배수인지, B가 D의 배수인지 if문으로 매번 확인할 필요 없이,

원래의 방정식이 복구가 되면 (ans_K*C ==A ) 배수였던 것,

복구가 되지 않았다면, 배수가 아니므로 필요한 일수에 하루를 더해줬다.

 

 

하지만, 이 경우는 둘 중 오래 걸리는 날에 대해서만 정수를 체크하면 되므로 이 방법이 더 간단하다. 

마지막 print할 때, int로 안 바꿔주면, float으로 출력돼서 답이 틀렸다고 나오니 주의하자.

if __name__=='__main__':
    lst = []
    for i in range(5):
        lst.append(int(input()))
    L,A,B,C,D = lst
    ans = max(A/C, B/D)   # 숙제 하는 데 더 오래 걸리는 날
    
    # 나눠떨어지지 않았다는 뜻이므로, 하루가 더 필요함
    if ans-int(ans)!=0 : ans += 1  
    print(L-int(ans))
   

'공부하는 것들 > 알고리즘' 카테고리의 다른 글

백준 3004 : 체스판 조각  (0) 2021.02.22
백준 5543 : 상근날드  (0) 2021.02.21
백준 4299 : AFC 윔블던 **  (0) 2021.02.21
백준 2753 : 윤년  (0) 2021.02.20
백준 2752 : 세수정렬  (0) 2021.02.20