광물 캐기
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 풀이
- 한 곡괭이로 5개의 광물을 연속으로 깨야하기 때문에 5개씩 묶음
- 광물이 최대 50개 이므로 5개씩 묶으면 10개의 group이 생성됨
- 각 그룹마다 dia,iron,stone의 갯수를 셈
- dia, iron, stone이 많은 순서대로 정렬
- dia, iron, stone 순으로 곡괭이를 사용할 것이기 때문
- 곡괭이 수를 줄여나가면서 각 그룹에서의 피로도 계산
- 한 곡괭이로 5개의 광물을 연속으로 깨야하기 때문에 5개씩 묶음
def solution(picks, minerals):
# 사용할 수 있는 최대 광물 수
max_minerals = sum(picks) * 5
minerals = minerals[:max_minerals] # 캘 수 있는 만큼만 자르기
# 광물 5개씩 묶어서 카운트
groups = [[0, 0, 0] for _ in range(10)]
for i, mineral in enumerate(minerals):
if mineral == 'diamond':
groups[i // 5][0] += 1
elif mineral == 'iron':
groups[i // 5][1] += 1
else:
groups[i // 5][2] += 1
# 피로도가 높은 순으로 정렬
groups.sort(key=lambda x: (-x[0], -x[1], -x[2]))
# 피로도 계산
answer = 0
for group in groups:
d, i, s = group
if picks[0] > 0: # 다이아 곡괭이
picks[0] -= 1
answer += d + i + s
elif picks[1] > 0: # 철 곡괭이
picks[1] -= 1
answer += 5 * d + i + s
elif picks[2] > 0: # 돌 곡괭이
picks[2] -= 1
answer += 25 * d + 5 * i + s
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][구현] 충돌위험 찾기 (0) | 2024.12.03 |
|---|---|
| [프로그래머스][BFS] 석유 시추 (0) | 2024.11.27 |
| [프로그래머스][완전탐색] 16498. 작은 벌점 (0) | 2024.11.21 |
| [프로그래머스][BFS/DFS] 빛의 경로 사이클 (0) | 2024.11.20 |
| [프로그래머스][Counter] 롤케이크 자르기 (0) | 2024.11.17 |