“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
코딩테스트 입문
구슬을 나누는 경우의 수
문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 1 ≤ balls ≤ 30
- 1 ≤ share ≤ 30
- 구슬을 고르는 순서는 고려하지 않습니다.
- share ≤ balls
입출력 예
balls | share | result |
3 | 2 | 3 |
5 | 3 | 10 |
입출력 예 설명
- 서로 다른 구슬 3개 중 2개를 고르는 경우의 수는 3입니다.
- 서로 다른 구슬 5개 중 3개를 고르는 경우의 수는 10입니다.
출력
function solution(balls, share) {
if (balls<share){
return 0;
}
let numerator = 1;
let denominator = 1;
for(let i=0; i<share; i++){
numerator *= balls -i;
denominator *= share - i;
}
return numerator / denominator;
}
if문을 사용해 balls 가 share 보다 작은 경우, 조합을 할 수 없는 경우 바로 0을 반환합니다.
numerator변수와 denominator 변수를 1로 초기화 하고 이 변수들은 분자와 분모를 나타내는 역할을 합니다.
for반복문을 사용해 share개수만큼 반복하면서 분자와 분모를 계산합니다.
numerator는 balls 부터 시작해 하나씩 줄여가며 곱셈을 수행하고, denominator는 share 부터 시작해 하나씩 줄여가며 곱셈을 수행합니다.
배열 원소의 길이
문제 설명
문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ strlist 원소의 길이 ≤ 100
- strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.
입출력 예
strlist | result |
["We", "are", "the", "world!"] | [2,3,3,6] |
["I", "Love", "Programmers."] | [1,4,12] |
입출력 예 설명
- ["We", "are", "the", "world!"]의 각 원소의 길이인 [2, 3, 3, 6]을 return합니다.
- ["I", "Love", "Programmers."]의 각 원소의 길이인 [1, 4, 12]을 return합니다.
출력
function solution(strlist) {
var lengths = [];
for(var i =0; i<strlist.length; i++){
lengths.push(strlist[i].length);
}
return lengths;
}
solution 함수는 문자열 배열 strlist 를 매개변수로 받습니다.
lengths라는 빈 배열을 생성해 각 문자열의 길이를 저장합니다.
for문을 사용해 strlist의 각 원소에 접근합니다.
i변수를 0부터 시작해 strlist 의 길이보다 작을 때 까지 반복,
strlist[i]는 strlist 배열의 i번째 원소를 의미합니다. 여기서는 각 문자열에 접근하기 위해 사용됩니다.
strlist[i].length 는 strlist 배열의 i번째 원소인 문자열의 길이를 나타냅니다. 이 길이 값을 lengths 배열에 추가하고
lengths.push()메서드를 사용해 lengths 배열에 strlist[i].length를 추가합니다.
반복문이 모두 실행되면 lengths배열이 완성됩니다.