문제1 개미 군단
개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.
제한사항
- hp는 자연수입니다.
- 0 ≤ hp ≤ 1000
입출력 예
num1 | result |
23 | 5 |
24 | 6 |
999 | 201 |
function solution(hp) {
let cnt = 0;
let arr = [5, 3, 1];
for(let i=0; i<arr.length; i++){
let item = arr[i];
if(hp >= item){
cnt += Math.floor(hp / item);
hp -= Math.floor(hp / item) * item
}
}
return cnt;
}
개미 종류의 공격력은 장군개미(5), 병정개미(3), 일개미(1)입니다
개미의 수를 세는 cnt 변수를 선언하고 0으로 초기화합니다.
공격력을 나타내는 배열 arr을 [5, 3, 1]로 초기화합니다. 이 배열은 장군개미, 병정개미, 일개미의 공격력을 순서대로 나타냅니다
배열 arr을 반복하면서 각 공격력 item을 가져옵니다
현재 사냥감의 체력 hp가 item보다 크거나 같은지 확인합니다. 만약 그렇다면, 해당 공격력으로 공격할 수 있는 개미의 수를 계산하여 cnt에 더합니다
hp에서 해당 공격력으로 공격할 수 있는 개미의 수를 곱한 값을 빼줍니다. 이는 이미 해당 개미들로 공격에 사용한 체력을 차감하는 것을 의미합니다
반복문이 종료되면 cnt를 반환합니다
문제2 모스부호
머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 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' }
제한사항
- 1 ≤ letter의 길이 ≤ 1,000
- return값은 소문자입니다.
- letter의 모스부호는 공백으로 나누어져 있습니다.
- letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.
- 해독할 수 없는 편지는 주어지지 않습니다.
- 편지의 시작과 끝에는 공백이 없습니다.
입출력 예
letter | result |
".... . .-.. .-.. ---" | "hello" |
".--. -.-- - .... --- -." | "python" |
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'
}
function solution(letter) {
var answer = '';
const splittedLetter = letter.split(' ');
for(let i=0; i<splittedLetter.length; i++){
answer += morse[splittedLetter[i]];
}
return answer;
}
빈 문자열 answer를 초기화합니다. 이 변수는 변환된 모스 부호를 저장하는 역할을 합니다
입력된 문자열 letter를 공백을 기준으로 분리하여 배열 splittedLetter에 저장합니다.
splittedLetter 배열을 반복하면서 각 단어를 모스 부호로 변환하여 answer에 추가합니다. 변환은 morse 객체를 사용하여 수행됩니다
반복이 완료된 후에 answer를 반환합니다
문제3 가위바위보
가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.
제한사항
- 0 < rsp의 길이 ≤ 100
- rsp와 길이가 같은 문자열을 return 합니다.
- rsp는 숫자 0, 2, 5로 이루어져 있습니다.
입출력 예
rsp | result |
"2" | "0" |
"205" | "052" |
const win = {
"2": "0",
"0": "5",
"5": "2",
}
function solution(rsp) {
var answer = '';
for(let i=0; i<rsp.length; i++){
const item = rsp[i];
answer += win[item];
}
return answer;
}
빈 문자열 answer를 초기화합니다. 이 변수는 이기는 경우를 저장하는 역할을 합니다
입력된 문자열 rsp를 반복하면서 각 문자 item을 가져옵니다
win 객체를 사용하여 현재 문자 item에 대응하는 이기는 경우의 문자를 가져와서 answer에 추가합니다
반복이 완료된 후에 answer를 반환합니다
문제4 구슬을 나누는 경우의 순
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 1 ≤ balls ≤ 30
- 1 ≤ share ≤ 30
- 구슬을 고르는 순서는 고려하지 않습니다.
- share ≤ balls
입출력 예
balls | share | result |
3 | 2 | 3 |
5 | 3 | 10 |
function solution(balls, share) {
var answer = 0;
const n = balls;
const r = share;
let one = 1;
for(let i = n; i >= n-r+1; i--) {
one *= i;
}
let three = 1;
for(let i = r; i >= 1; i--) {
three *= i;
}
answer = Math.floor(one / three)
return answer;
}
결과값을 저장할 변수 answer를 0으로 초기화합니다
주어진 구슬의 개수를 balls 변수에 저장하고, 선택할 구슬의 개수를 share 변수에 저장합니다
조합 계산을 위해 팩토리얼 값을 계산하기 위한 변수 one과 three를 각각 1로 초기화합니다
n부터 n-r+1까지의 숫자를 차례로 one에 곱하여 팩토리얼 값을 계산합니다
r부터 1까지의 숫자를 차례로 three에 곱하여 팩토리얼 값을 계산합니다
one을 three로 나눈 몫을 계산하여 answer에 저장합니다
answer를 반환합니다