728x90
파이썬
브1 설탕 배달
맞은 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | def searchBongji(): share = N // 5 remain = N % 5 if remain == 0: result = share return result share2 = remain // 3 remain2 = remain % 3 if remain2 == 0: result = share + share2 return result while(True): if share: share -= 1 temp = share * 5 share2 = (N - temp) // 3 remain2 = (N - temp) % 3 if remain2 == 0: result = share + share2 return result if share <= 0 or share2 == 0: return -1 N = int(input()) result = 0 print(searchBongji()) | cs |
딱 봤을 때 그리디 알고리즘인 것 같았는데 생각보다 푸는데 힘들었다.
봉지의 최소 개수를 구해야하므로 5킬로그램을 우선으로 생각하고 풀었다.
젤 처음에 N개에서 5로 모듈러 연산을 해서 5의 배수인지 보고 아니면 나머지를 3으로 모듈러 연산을 해서 나머지가 3의 배수인지 확인한다.
만약 거기서 계산이 끝나지 않으면 여기서부터 무한루프를 돌린다.
5의 몫을 1씩 줄이면서 나머지가 3으로 나누어떨어질때까지 혹은 5의 몫이 0 이하거나 3의 몫이 0이 될 때까지 루프가 반복된다.
아무튼 풀다보니 이렇게 풀었는데 옳은 방법이었는지는 잘 모르겠다.
같이 코테 스터디를 하는 친구는 조금 다른 방법으로 풀었다.
코테 스터디원 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | A = int(input()) cnt = 0 while(1): if A % 5 == 0: A = A-5 cnt +=1 elif A % 3 == 0: A = A -3 cnt +=1 else: A = A-3 cnt += 1 if A ==0: break if A<0: cnt = -1 break print(cnt) | cs |
나와 비슷하게 5를 우선순위로 했고
나누어떨어지면 1씩 카운트하는 것을 N이 0 이하가 될 때까지 무한루프를 돌린다.
이게 내 코드보다 훨씬 이해하기에도 편하고 직관적으로 잘 짠 듯 싶다.
지금은 이 문제도 버겁게 풀었지만 나중에는 위 두 문제처럼 어려운 그리디 알고리즘도 잘 풀어보고 싶다.
728x90
'Python' 카테고리의 다른 글
| 211117 백준 코딩연습 파이썬 2609 최대공약수와 최소공배수, 2751 수 정렬하기 2 (0) | 2021.11.17 |
|---|---|
| 211116 백준 코딩연습 파이썬 2869 달팽이는 올라가고 싶다, 11050 이항 계수1 (0) | 2021.11.16 |
| 211112 백준 코딩연습 파이썬 15829 Hashing (0) | 2021.11.12 |
| 211111 백준 코딩연습 파이썬 2775 부녀회장이 될테야, 2798 블랙잭 (0) | 2021.11.12 |
| 211110 백준 코딩연습 파이썬 10250 ACM 호텔, 4153 직각삼각형 (0) | 2021.11.10 |




최근댓글