강의로 돌아가기
서상현

그리디 고수님들 도와주세요!

해당 문제가 그리디 알고리즘으로 푼다는 풀이들이 많아서 의문이 생겨 질문을 남깁니다

이 문제에서 5개의 광물을 처리할 때, 각 광물에 맞는 최적의 곡괭이를 선택해야 피로도를 최소화할 수 있습니다. 예를 들어, 5개의 광물 중 철이 가장 많이 나온다면, 철 곡괭이를 사용하는 것이 가장 효율적입니다. 그러나 철 곡괭이가 없고 다이아몬드 곡괭이1개, 돌 곡괭이 1개 만 있다고 하였을때 다이아몬드 곡괭이 또는 돌 곡괭이 중 하나를 선택해야 하는 상황이 발생합니다.

이때, 다이아몬드 곡괭이를 선택하여 5개의 광물을 처리했을 경우, 이후 5개의 광물에서 다이아몬드 광물이 많이 나온다면 최적의 해를 보장할 수 없게 됩니다. 따라서, 그리디 알고리즘으로 현재 상황에서 가장 좋은 선택을 했다고 하더라도, 이후 상황에 따라 이 선택이 최적의 해가 아닐 수 있습니다.

저는 이러한 이유로 그리디 알고리즘이 항상 최적의 해를 보장하는지에 대해 의문을 가지고 있습니다. 만약 이 문제를 그리디 알고리즘으로 풀었을 때 정답으로 인정된다면, 문제 자체가 최적의 해를 보장하지 못할 가능성이 있는 잘못된 문제가 아닌가 하는 질문을 드립니다.

제 질문이 잘못되었다면 지적 부탁드립니다 ㅠㅠ

2 개의 답변
코딩줍줍

설명

다른 분들의 그리디 풀이 방법을 보니 광물 자원의 value를 계산하고 정렬 한 후 최대 값에 맞는 곡괭이를 사용하는 방식인 것 같습니다.
그러므로 질문자님께서 의문을 가지는 경우는 생기지 않을 것으로 보입니다.

왜냐하면 정렬을 해서 value가 큰 경우부터 이미 가장 좋은 곡괭이를 사용하기 때문에 철 광물 5개가 남은 후 다음 경우에는 다이아 광물이 나오는 경우가 없기 때문입니다.

추가 설명

value를 비교하는 부분에서 조금 더 설명을 드리면

다이아, 철, 돌 곡괭이가 광물을 캐는 부분에서 5배 차이나고, 광물은 5개 단위로 캐기 때문에 어떻게 하던 다이아 광물이 하나라도 포함된 경우와 다이아 광물이 하나도 포함되지 않은 조합을 비교했을 때 다이아 광물이 포함된 경우에 좋은 곡괭이를 사용하는게 이득입니다.

극단적인 예로 [다이아] [철,철,철,철,철] 을 비교할 경우
다이아, 철, 돌 곡괭이를 비교해 보겠습니다.
다이아1
1, 5, 25
철5
5, 5, 25

위와 같은 피로도가 됩니다. 이를 통해 [다이아가 하나라도 포함된 경우]와 [다이아가 포함되지 않은 경우]를 비교했을 때, [다이아가 하나라도 포함된 경우]에 좋은 곡괭이를 쓰는 게 무조건 이득이라는 것을 알 수 있습니다.

그러므로 이러한 방법으로 그리디하게 문제를 풀 수 있습니다.

  • value 설정은 [다이아 : 400, 철 : 20, 돌 : 1] 처럼 하위 광물에 5를 곱해도 상위 광물 하나 보다 value가 작도록 설정하면 정렬하기 편합니다.
  • 서상현

    근데 광물을 캘 수 있는 순서는 정해져있는거 아닌가요? "문제조건에 광물은 주어진 순서대로만 캘 수 있습니다." 이렇게 적혀있어서요 철 광물 5개가 남은 후 다음 경우에는 다이아 광물이 나오는 경우가 생길 수 있는거 아닌가요 ?? 제가 잘 이해를 못해 죄송합니다 ㅜ

    서상현―2024.10.12 20:40
  • 코딩줍줍

    말씀하신 대로 광물을 캘 수 있는 순서는 정해져 있습니다. 하지만, 그에 맞춰 곡괭이의 순서를 조정할 수 있습니다. 그래서 정렬로 순서를 바꿔서 value가 가장 큰 순서로 좋은 곡괭이를 사용해 문제를 해결합니다. 추가하자면 정렬할 때, 곡괭이의 개수를 세 실제로 캘 수 있는 광물의 범위를 계산한 뒤 정렬을 해야 합니다. 철 광물 5개 이후 다이아 광물이 나오지 않는다는 의미는 value를 기준으로 정렬을 했을 경우에 나오지 않는다는 의미입니다. 궁금한 점이 있으면 더 물어보세요!

    코딩줍줍―2024.10.13 15:05
  • 서상현

    코딩줍줍님 덕분에 이해했습니다 다른사람들 풀이를 제가 더 정확하게 해석했어야했는데 그렇지않았나봐요 죄송합니다 다시 돌이켜보니 해선 안될질문이었네요ㅜㅜ 수준낮은 질문에 세심한 답변 달아주셔서 정말 감사합니다 좋은하루되세요 !!

    서상현―2024.10.13 16:33
  • Siyoung Kim

    [철, 철, 철, 철, 철, 다이아] 이렇게 있을 때, 설명하신 대로 계산하면 철의 가치는 100이고 다이아의 가치는 400이 되는데 다이아 곡괭이로 철을 우선적으로 캐야만 최적이 됩니다.

    Siyoung Kim―2025.05.14 17:16
hyk2202@gmail.com

원래 그리디 알고리즘이 현재 상태에서 최선의 선택을 한다는 것에서 착안한 알고리즘인것으로 그리디알고리즘의 선택이 모든것을 고려했을때 최선의 선택인지는 포함되어있지않습니다.

즉, 그리디 알고리즘은 최적의 해를 구하는 알고리즘이 아닙니다..

  • 서상현

    그럼 해당 문제는 그리디알고리즘을 사용해서 풀면 안되는거 아닌가요 ?

    서상현―2024.10.12 20:41
  • hyk2202@gmail.com

    이 문제에서는 그리디 알고리즘이 최적해를 구하는 것과 동일해서 사용해도 됩니다

    hyk2202@gmail.com―2024.10.13 09:46
  • hyk2202@gmail.com

    최적해를 풀어야 할 때 그리디 알고리즘을 적용하는것은 '그리디로 풀었을때 최적해인가' 를 먼저 확인한 후 그리디를 적용해서 풀이합니다

    hyk2202@gmail.com―2024.10.13 09:47
  • hyk2202@gmail.com

    그리디 알고리즘은 단시간에 적당히 좋은 해를 구하기 위해 사용하긴합니다

    hyk2202@gmail.com―2024.10.13 09:47
  • 서상현

    hyk님 덕분에 그리디 알고리즘에 대해 다시한번 생각해보게되었습니다 감사합니다 좋은하루되세요 !!

    서상현―2024.10.13 16:34
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.