일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
Tags
- java_programming
- 다이나믹프로그래밍
- AWS
- react
- Python
- ubuntu
- SQL
- 알고리즘
- SWEA 15612번
- 명품자바
- 깃헙
- javascript
- 백준
- 백준 16918번
- 그리디
- 그래프
- MySQL
- HUFS 모각코 캠프
- 자바
- 백준 18310번
- 백준 3085번
- 다이나믹 프로그래밍
- 백준 1331번
- 모각코
- 백준 15787번
- 머신러닝과 딥러닝
- 백준 1253번
- 백준 2512번
- 백준 1987
- 백준 17451번
Archives
- Today
- Total
차곡차곡
[BOJ/Python] 백준 16206번 - 롤케이크 본문
백준 #16206 롤케이크
import sys
input = sys.stdin.readline
n, m = map(int, input().split()) # n: 롤케이크 개수, m: 자를 수 있는 최대 횟수
length = list(map(int, input().split())) # 롤케이크 길이
l1 = [] # 10의 배수 리스트
l2 = [] # 10의 배수가 아닌 리스트
for l in length:
if l < 10:
continue
elif l % 10 == 0:
l1.append(l)
else:
l2.append(l)
l1.sort()
l2.sort()
length = l1 + l2
cut = 0 # 자른 횟수
cnt = 0 # 롤케이크 개수 최댓값
for l in length:
while True:
if l < 10:
break
elif l == 10:
cnt += 1
l -= 10
else:
l -= 10
cnt += 1
cut += 1
if cut == m:
if l == 10:
cnt += 1
print(cnt)
exit(0)
print(cnt)
길이가 10의 배수인 롤케이크부터 잘라야 길이가 10인 롤케이크를 가장 많이 만들어낼 수 있다!
- 입력 받은 롤케이크 길이 리스트를 10의 배수인 것과 아닌 것으로 분리하여 각각 오름차순으로 정렬한다.
- 10의 배수 리스트가 앞에 오도록 하여 두 개의 리스트를 합친다.
- 길이가 10인 롤케이크는 개수 + 1을 주고, 10보다 클 경우 10을 잘라 개수와 자른 횟수 + 1씩 해준다.
- 자른 후 나머지 길이가 10보다 작을 경우 다음 롤케이크로 넘어간다.
- 자른 횟수가 최대 횟수에 도달할 경우 자른 직후 나머지 길이가 10인 롤케이크까지 합쳐 최종 롤케이크의 개수를 출력한다.
10의 배수로 정렬하는 게 포인트! 오름차순 정렬만 생각해서 계속 틀림 😰
10의 배수로 정렬하는 거 람다식으로 쓰려다 모르겠어서 리스트 두 개 쓰는 방법으로 구현했는데 역시 방법이 있었어 ,,
arr.sort(key=lambda x: (x % 10, x))
'CS > Algorithm' 카테고리의 다른 글
[BOJ/Python] 백준 13414번 - 수강신청 (0) | 2022.07.15 |
---|---|
[BOJ/Python] 백준 2002번 - 추월 (0) | 2022.07.09 |
[파이썬 알고리즘 인터뷰] 11장 해시 테이블 (2) | 2022.07.08 |
[BOJ/Python] 백준 18115번 - 카드 놓기 (0) | 2022.07.01 |
[BOJ/Python] 백준 13022번 - 늑대와 올바른 단어 (0) | 2022.07.01 |
Comments