문제 1. 개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.
function solution(hp) {
let antCount = 0;
// 장군개미, 병정개미, 일개미 중 최대한 많은 개미로 체력을 감소시킴
while (hp > 0) {
if (hp >= 5) {
antCount += Math.floor(hp / 5); // 장군개미의 개수를 추가
hp = hp % 5; // 남은 체력 계산
} else if (hp >= 3) {
antCount += Math.floor(hp / 3); // 병정개미의 개수를 추가
hp = hp % 3;
} else {
antCount += hp; // 일개미의 개수를 추가
hp = 0;
}
}
return antCount;
}
solution 함수는 hp라는 매개변수를 입력으로 받습니다.
이는 체력을 나타내는 값입니다.
antCount 변수는 사용한 개미의 총 개수를 담을 변수입니다.
초기 값으로 0을 설정합니다.
while 반복문을 사용하여 체력(hp)이 0보다 클 때까지 반복합니다.
체력(hp)이 5 이상인 경우, 장군개미를 사용하여 체력을 감소시킵니다.
hp를 5로 나눈 몫을 antCount에 추가합니다. 이는 장군개미의 개수를 의미합니다.
남은 체력을 계산하기 위해 hp를 5로 나눈 나머지를 할당합니다.
체력(hp)이 3 이상인 경우, 병정개미를 사용하여 체력을 감소시킵니다.
hp를 3으로 나눈 몫을 antCount에 추가합니다. 이는 병정개미의 개수를 의미합니다.
남은 체력을 계산하기 위해 hp를 3으로 나눈 나머지를 할당합니다.
체력(hp)이 3 미만인 경우, 일개미를 사용하여 체력을 감소시킵니다.
hp 값을 antCount에 추가합니다. 이는 일개미의 개수를 의미합니다.
체력(hp)를 0으로 설정하여 루프를 종료합니다.
반복문을 통해 체력이 0이 될 때까지 위의 과정을 수행합니다.
마지막으로 사용한 개미의 총 개수인 antCount 값을 반환합니다.
문제 2. 머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
function solution(letter) {
const 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'
};
const words = letter.split(' ');
let result = '';
for (let i = 0; i < words.length; i++) {
const word = words[i];
const translatedWord = morse[word];
result += translatedWord;
}
return result;
}
solution 함수는 letter라는 매개변수를 입력으로 받습니다. 이는 모스 부호 문자열을 의미합니다.
morse 객체는 몰스 부호와 해당하는 알파벳을 매핑한 객체입니다.
words 변수는 입력된 몰스 부호 문자열을 공백을 기준으로 나눈 배열입니다.
result 변수는 변환된 알파벳을 저장할 문자열로 초기값은 빈 문자열입니다.
for 반복문을 사용하여 words 배열을 순회합니다.
각각의 몰스 부호(word)를 가져와서 morse 객체에서 해당하는 알파벳을 찾습니다.
찾은 알파벳을 translatedWord 변수에 할당합니다.
result에 translatedWord를 추가합니다.
모든 몰스 부호에 대해 위의 과정을 반복합니다.
반복문이 종료되면 변환된 알파벳이 저장된 result를 반환합니다.
문제 3. 가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.
function solution(rsp) {
let answer = '';
for(let i of rsp) {
if(i == 0){
answer += '5'
} else if (i == 2) {
answer += '0'
} else if(i == 5) {
answer +='2'
}
}
return answer;
}
문제 4. 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
function solution(balls, share) {
let allBalls = Array.from({ length: balls }, (_, index) => index + 1).reduce(
(a, b) => {
return a * b;
},
1
);
let ballMinusShare = Array.from(
{ length: balls - share },
(_, index) => index + 1
).reduce((a, b) => {
return a * b;
}, 1);
let allShare = Array.from({ length: share }, (_, index) => index + 1).reduce(
(a, b) => {
return a * b;
},
1
);
return Math.round(allBalls / (ballMinusShare * allShare));
}
먼저, allBalls 변수는 1부터 balls까지의 수를 곱한 값을 계산하여 저장한다.
이는 주어진 구슬들 중 어떤 구슬이 선택되어야 하는지 고려하지 않고, 모든 구슬의 경우의 수를 나타낸다.
다음으로, ballMinusShare 변수는 balls - share까지의 수를 곱한 값을 계산하여 저장한다.
이는 주어진 구슬들 중 나누어 주지 않아도 되는 구슬들의 경우의 수를 나타낸다.
즉, 친구들에게 나누어 주어야 하는 구슬의 개수를 제외한 나머지 구슬의 경우의 수이다.
마지막으로, allShare 변수는 1부터 share까지의 수를 곱한 값을 계산하여 저장한다.
이는 친구들에게 나누어 주어야 하는 구슬의 개수에 대한 경우의 수를 나타낸다.
allBalls을 ballMinusShare와 allShare의 곱으로 나누어서 가능한 모든 경우의 수를 구한다.
이 값은 소수점 이하를 버린 결과로 반환된다.
소수점 이하의 값은 나누어 떨어지지 않는 경우에 발생할 수 있으므로, Math.round 함수를 사용하여 반올림 처리를 한다.