Javascript/문제 풀이

프로그래머스 11일차

아라라_ 2023. 5. 28. 23:26

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

Frederick Philips Brooks
Mythical Man-Month 저자
728x90

개미군단

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

function solution(hp) {
  const first = Math.floor(hp / 5);
  const second = Math.floor((hp - first * 5) / 3);
  const third = hp - first * 5 - second * 3;
  return first + second + third;
}

주어진 문제는 사냥감의 체력에 딱 맞는 개미의 병력을 구하는 것입니다. 개미는 세 종류가 있으며, 장군개미는 5의 공격력, 병정개미는 3의 공격력, 일개미는 1의 공격력을 가지고 있습니다.

해결을 위해 사용되는 알고리즘은 Greedy Algorithm입니다. Greedy Algorithm은 각 단계에서 가장 최적인 선택을 하는 방식으로 문제를 해결하는 알고리즘입니다.

이 알고리즘을 구체적으로 살펴보겠습니다. 주어진 체력(hp)에 대해 개미의 병력을 구성하기 위해 세 가지 종류의 개미를 사용합니다.

먼저, 장군개미의 수를 구합니다. 장군개미는 5의 공격력을 가지므로, hp를 5로 나눈 몫을 구합니다. 이를 first 변수에 저장합니다. 이 값은 장군개미의 수를 의미합니다.

다음으로, 장군개미로 인해 이미 사용된 체력을 계산합니다. 사용된 체력은 first * 5로 구할 수 있습니다.

남은 체력을 이용해 병정개미의 수를 구합니다. 남은 체력은 hp - (first * 5)로 계산됩니다. 이를 3으로 나눈 몫을 구하고, 이를 second 변수에 저장합니다. 이 값은 병정개미의 수를 의미합니다.

마지막으로, 일개미로 인해 이미 사용된 체력을 계산합니다. 사용된 체력은 second * 3로 구할 수 있습니다.

남은 체력을 이용해 일개미의 수를 구합니다. 남은 체력은 hp - (first * 5) - (second * 3)으로 계산됩니다. 이 값을 third 변수에 저장합니다. 이 값은 일개미의 수를 의미합니다.

최종적으로, 장군개미, 병정개미, 일개미의 수를 합한 값을 반환합니다. 이 값은 사냥감의 체력에 딱 맞는 최소한의 병력입니다.

예를 들어, 주어진 체력이 23이라고 가정해봅시다. 위 알고리즘을 따라 계산해보면 다음과 같습니다:

first = Math.floor(23 / 5) = 4

장군개미 4마리를 구성합니다.
사용된 체력 = first * 5 = 4 * 5 = 20

장군개미에 의해 이미 20의 체력이 사용되었습니다.
second = Math.floor((23 - 20) / 3) = 1

남은 체력에서 장군개미로 인해 사용된 체력을 뺀 값인 3을 병정개미의 공격력인 3으로 나눕니다. 이를 내림하여 병정개미 1마리를 구성합니다.
사용된 체력 = second * 3 = 1 * 3 = 3

병정개미에 의해 이미 3의 체력이 사용되었습니다.
third = 23 - (4 * 5) - (1 * 3) = 23 - 20 - 3 = 0

남은 체력은 없으므로 일개미를 구성하지 않습니다.
최종적으로, 장군개미 4마리와 병정개미 1마리를 합한 값인 5를 반환합니다.

 

 

모스부호(1)

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요. 모스부호는 다음과 같습니다.

morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}
function solution(letter) {
  return letter.split(" ").reduce((prev, curr) => prev + morse[curr], "");
}

주어진 문제는 모스 부호를 해독하여 영어 소문자로 변환하는 것입니다. 주어진 모스 부호를 해석하기 위해 morse라는 객체를 사용하며, 이 객체는 각 모스 부호에 대응하는 알파벳을 저장하고 있습니다. 해결을 위해 사용되는 알고리즘은 다음과 같습니다. 먼저, 주어진 모스 부호에 대한 해석을 위해 morse 객체를 생성합니다. 이 객체는 각 모스 부호를 키(key)로, 해당 모스 부호에 대응하는 영어 소문자를 값(value)로 가지고 있습니다. 주어진 문자열 letter를 공백을 기준으로 분할(split)하여 배열로 변환합니다. 각 요소는 모스 부호를 나타냅니다. 배열의 reduce 함수를 사용하여 모스 부호를 해석하여 영어 소문자로 변환합니다. reduce 함수는 배열의 각 요소에 대해 콜백 함수를 실행하고, 이전 값(prev)과 현재 값(curr)을 활용하여 결과를 누적합니다. 콜백 함수는 이전 값(prev)에 현재 값(curr)에 해당하는 모스 부호에 대응하는 영어 소문자를 더하여 반환합니다. 이렇게 하면 모든 모스 부호에 대한 해석이 완료됩니다. 최종적으로, reduce 함수에서 반환된 문자열을 반환합니다. 이 값은 주어진 모스 부호를 해독하여 얻은 영어 소문자로 이루어진 문자열입니다. 예를 들어, 주어진 모스 부호가 "- .... . .-. ."라고 가정해봅시다. 위 알고리즘을 따라 계산해보면 다음과 같습니다: morse 객체에는 다음과 같이 모스 부호에 대응하는 영어 소문자가 저장되어 있습니다: arduino Copy code morse = { '.-': 'a', '-...': 'b', '-.-.': 'c', '-..': 'd', '.': 'e', '..-.': 'f', '--.': 'g', '....': 'h', '..': 'i', '.---': 'j', '-.-': 'k', '.-..': 'l', '--': 'm', '-.': 'n', '---': 'o', '.--.': 'p', '--.-': 'q', '.-.': 'r', '...': 's', '-': 't', '..-': 'u', '...-': 'v', '.--': 'w', '-..-': 'x', '-.--': 'y', '--..': 'z' } 주어진 모스 부호 "- .... . .-. ."를 공백을 기준으로 분할하면 배열 ["-", "....", ".", ".-.", "."]가 됩니다. reduce 함수를 사용하여 모스 부호를 해석합니다. 초기값(prev)은 빈 문자열("")입니다. reduce 함수의 콜백 함수는 이전 값(prev)에 현재 값(curr)에 해당하는 모스 부호에 대응하는 영어 소문자를 더하여 반환합니다. 따라서, 각 모스 부호에 대응하는 영어 소문자를 찾아 문자열에 추가하면 다음과 같이 변환됩니다: rust Copy code prev + morse[curr] "" + morse["-"] -> "" + "t" -> "t" "t" + morse["...."] -> "t" + "h" -> "th" "th" + morse["."] -> "th" + "e" -> "the" "the" + morse[".-."] -> "the" + "r" -> "ther" "ther" + morse["."] -> "ther" + "e" -> "there" reduce 함수에서 반환된 값 "there"을 반환합니다.