프로그래머스 : JavaScript 알고리즘 100일 챌린지 9일차
- 프로그래머스 : https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
- 유트브 참고 : https://www.youtube.com/watch?v=RMmOU2u-_as&list=PLkfUwwo13dlWZxOdbvMhkzhAowaiEjuGS
코딩테스트 입문 Day9
1. 개미 군단 : 개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.
function solution(hp) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
hp | 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;
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 입력된 체력(hp) 값을 처리하여 필요한 아이템의 개수를 계산하여 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 체력을 나타내는 숫자를 인자로 전달해야 합니다.
cnt라는 변수를 0으로 초기화합니다.
arr 배열에 아이템의 값을 순서대로 저장합니다.
for 루프를 사용하여 arr 배열의 각 요소에 대해 반복합니다.
현재 요소를 item 변수에 저장합니다.
체력(hp)이 현재 아이템 값(item)보다 크거나 같은 경우를 확인합니다.
hp를 item으로 나눈 몫을 구하여 cnt에 더합니다. 이는 해당 아이템을 최대한 사용한 개수를 더합니다.
hp에서 사용한 아이템의 총 가치(Math.floor(hp / item) * item)를 차감합니다. 이는 사용한 아이템에 해당하는 체력을 감소시킵니다.
최종적으로 cnt 값을 반환합니다.
예를 들어, solution(17)를 호출하면 반환 값으로 6이 나올 것입니다. 주어진 체력 17을 아이템 [5, 3, 1]로 처리할 때, 5개의 아이템과 1개의 아이템을 사용하면 총 6개의 아이템이 필요합니다.
2. 모스부호(1) : 머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
function solution(letter) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
leeter | 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) {
let currentMorse = '';
let answer = '';
for(let i=0; i<letter.length; i++){
const item = letter[i];
if(item === ' '){
answer += morse[currentMorse];
currentMorse = '';
} else {
currentMorse += item;
}
}
answer += morse[currentMorse];
return answer;
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 입력된 문자열(letter)을 모스 부호로 변환하여 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 문자열을 인자로 전달해야 합니다.
morse 객체에 알파벳에 해당하는 모스 부호를 저장합니다.
currentMorse라는 변수를 빈 문자열로 초기화합니다. 현재 처리 중인 모스 부호를 저장하는 변수입니다.
answer라는 변수를 빈 문자열로 초기화합니다. 변환된 문자열을 저장하는 변수입니다.
for 루프를 사용하여 letter 문자열의 각 문자에 대해 반복합니다.
현재 문자를 item 변수에 저장합니다.
현재 문자가 공백인 경우:
morse 객체에서 currentMorse에 해당하는 알파벳을 찾아 answer에 추가합니다.
currentMorse를 빈 문자열로 초기화하여 새로운 모스 부호를 처리할 준비를 합니다.
그렇지 않은 경우, 즉 문자가 공백이 아닌 경우:
item을 currentMorse에 추가하여 현재 모스 부호를 완성시킵니다.
반복이 끝난 후, morse 객체에서 currentMorse에 해당하는 알파벳을 찾아 answer에 추가합니다. 이는 마지막 모스 부호를 처리하는 단계입니다.
최종적으로 answer 문자열을 반환합니다.
예를 들어, solution('.... . .-.. .-.. --- / .-- --- .-. .-.. -..')를 호출하면 반환 값으로 "hello world"가 나올 것입니다. 입력된 모스 부호를 해당하는 알파벳으로 변환하여 문자열을 구성합니다. 공백은 슬래시(/)로 표현되어 있습니다.
3. 가위 바위 보 : 가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.
function solution(rsp) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
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;
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 입력된 가위바위보 결과(rsp)를 승리자의 결과로 변환하여 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 가위바위보 결과를 나타내는 문자열을 인자로 전달해야 합니다.
win 객체에 각 가위바위보 결과에 대한 승리자의 결과를 저장합니다.
answer라는 변수를 빈 문자열로 초기화합니다. 변환된 승리자의 결과를 저장하는 변수입니다.
for 루프를 사용하여 rsp 문자열의 각 문자에 대해 반복합니다.
현재 문자를 item 변수에 저장합니다.
win 객체에서 item에 해당하는 승리자의 결과를 찾아 answer에 추가합니다.
최종적으로 answer 문자열을 반환합니다.
예를 들어, solution('205')를 호출하면 반환 값으로 "052"가 나올 것입니다. 입력된 가위바위보 결과 205를 승리자의 결과로 변환합니다. 각 숫자에 해당하는 승리자의 결과는 2가 0, 0이 5, 5가 2로 변환됩니다.
4. 구슬을 나누는 경우의 수 : 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
function solution(balls, share) {
var answer = 0;
return answer;
}
길라잡이
- 변수 answer의 데이터를 수정해서 답을 구해보세요.
- 예시
balls | share | result |
3 | 2 | 3 |
5 | 3 | 10 |
답 확인하기
// n! = n * (n-1) * (n-2) * ... * 1
// nCr = n! / ((n-r)! * r!)
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;
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 주어진 공의 개수(balls)와 공을 나눌 개수(share)에 대해 조합을 계산하여 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 공의 개수와 공을 나눌 개수를 나타내는 숫자를 인자로 전달해야 합니다.
변수 answer를 0으로 초기화합니다. 계산 결과를 저장하는 변수입니다.
n 변수에 balls 값을, r 변수에 share 값을 할당합니다.
변수 one을 1로 초기화합니다. 이 변수는 n! (n 팩토리얼)을 저장합니다.
for 루프를 사용하여 i를 n부터 n-r+1까지 1씩 감소시키면서 반복합니다.
각 반복에서 one에 i 값을 곱하여 계산합니다.
변수 three를 1로 초기화합니다. 이 변수는 r! ((n-r) 팩토리얼)을 저장합니다.
for 루프를 사용하여 i를 r부터 1까지 1씩 감소시키면서 반복합니다.
각 반복에서 three에 i 값을 곱하여 계산합니다.
answer에 one을 three로 나눈 몫을 할당합니다. 이는 nCr을 계산한 결과입니다.
최종적으로 answer 값을 반환합니다.
예를 들어, solution(5, 2)를 호출하면 반환 값으로 10이 나올 것입니다. 주어진 공의 개수가 5이고, 이를 2개씩 나눌 때 가능한 조합의 개수는 10개입니다.