-
프로그래머스_광물캐기_level2(python)Algorithm/프로그래머스_생각정리 2023. 3. 26. 16:22
※ 접근법
문제를 봤을 때 어떤 곡괭이로 광물을 캐는지에 따라서 누적 피로도가 달라지니 바로 백트래킹인 것을 떠올렸다. 하지만 여기서 곡괭이가 최대 15개가 될 수 있는데 시간초과가 나지 않을까라는 생각이 들었다. 결국 여기서 시간초과가 발생했고 로직을 조금 수정했더니 문제가 해결됐다.
※ 풀이
1. 곡괭이 종류만큼 반복을 해 곡괭이가 남아있다면 곡괭이로 광물을 캔다.
2. 광물을 캐면서 누적 피로도를 계산해준다.
3. 다음 재귀로 넘어갈 때 누적피로도, 다음 광물 인덱스, 쓴 곡괭이 개수를 계산해서 넘겨준다.
def dfs(picks,minerals,fatigue,m_idx,p_count,total): global count if m_idx >= len(minerals) or p_count == total: # 광물을 다 캤다면 곡괭이 다씀 count = min(count,fatigue) return for i in range(len(picks)): # 곡괭이 종류만큼 반복을 한다. if picks[i] > 0: temp = 0 a_sum = 0 picks[i] -= 1 for j in range(m_idx,m_idx+5): temp = j if j == len(minerals): break if i == 0: a_sum += 1 elif i == 1: if minerals[j] == "diamond": a_sum += 5 continue a_sum += 1 else: if minerals[j] == "diamond": a_sum += 25 elif minerals[j] == "iron": a_sum += 5 else: a_sum += 1 dfs(picks,minerals,fatigue+a_sum,temp+1,p_count+1,total) picks[i] += 1 def solution(picks, minerals): global count count = 100000 total = sum(picks) dfs(picks,minerals,0,0,0,total) return count
※ 회고
처음에 시간초과가 발생할 것을 알면서도 쉽게 풀기 위해 코드를 구현했다. 역시나 시간초과가 발생했다.
앞으로는 쉽게 풀려고 하지말고 에러가 날 것 같으면 요행 부리지말고 열심히 코딩하자
'Algorithm > 프로그래머스_생각정리' 카테고리의 다른 글
프로그래머스_연속된 부분 수열의 합(python) (0) 2023.04.10 프로그래머스_과제 진행하기(python) (0) 2023.04.02 프로그래머스_두 큐 합 같게 만들기_level2(python) (0) 2023.03.23 프로그래머스_level 2_리코쳇 로봇(python) (0) 2023.03.19 프로그래머스_주차 요금 계산(python) (0) 2022.12.08