후기

풀이를 보고 처음 떠올렸던 접근

이 문제는 곡괭이를 한 번 선택하면 광물을 최대 5개까지 연속으로 캐야 합니다.

따라서 처음에는 다음과 같이 생각했었습니다.

  1. 현재 사용할 곡괭이를 하나 선택한다.
  2. 선택한 곡괭이로 광물을 최대 5개 캔다.
  3. 발생한 피로도를 누적한다.
  4. 남아 있는 곡괭이 중 하나를 다시 선택한다.
  5. 모든 선택을 시도한 뒤 가장 작은 피로도를 반환한다.

예를 들어 다이아몬드, 철, 돌 곡괭이가 모두 남아 있다면 다음 세 경우로 나누었습니다.

현재 광물 묶음
├─ 다이아몬드 곡괭이 사용
├─ 철 곡괭이 사용
└─ 돌 곡괭이 사용

각 선택 이후에도 다시 남은 곡괭이를 선택해야 하므로 DFS를 사용했습니다.

이 문제에서 DFS의 한 단계는 광물 하나를 캐는 과정이 아니라, 곡괭이 하나를 선택하여 광물을 최대 5개 캐는 과정으로 잡았습니다.


피로도 계산 방법

각 곡괭이와 광물의 등급을 다음처럼 숫자로 표현했었습니다.

const pick_fatigue = {
    diamond: 3,
    iron: 2,
    stone: 1,
};

사용한 곡괭이의 등급에서 광물의 등급을 뺀 결과로 피로도를 판단했습니다.

const fatigue =
    pick_fatigue[used] - pick_fatigue[stone];

if (fatigue >= 0) {
    original_cnt += 1;
} else if (fatigue >= -1) {
    original_cnt += 5;
} else {
    original_cnt += 25;
}

각 경우는 다음과 같습니다.