function solution(array, n) {
let count = 0
for(i = 0; i < array.length; i++){
if(array[i] === n){
count += 1
}
}
return count
}
console.log(solution([1,1,2,3,4,5], 1))
console.log(solution([0,2,3,4], 1))
array 에 n 이 몇개 있는지 구하는 코드이다. 변수 count를 0으로 할당해놓고 반복문을 사용해 array.length 미만으로 반복을 돌게한다.
이때 반복문 안에 조건문을 쓰는데 만약 array[i]번째가 n 과 같다면 count 에 1을 더하게 하여 array 내에 n이 있을때마다 카운트가 올라가게 했다.
function solution(array, n) {
var answer = 0;
let Array = array.filter((item) => item === n)
answer = Array.length
return answer;
}
filter 함수를 사용했는데 filter 함수는 주어진 배열의 값들을 오름차순으로 접근해 callbackfn을 통해 true를 반환하는 요소를 기준으로 신규 배열을 만들어 반환한다. 즉, array 배열의 요소가 item으로 들어오게 되고 n과 비교하여 같은 값만 item으로 다시 콜백해주는 원리이다.
function solution(numbers) {
let output = 0
for(i = 0; i < numbers.length; i++){
output += numbers[i]
}
return output/numbers.length
}
console.log(solution([1,2,3,4,5,6,7,8,9,10]))
console.log(solution([89,90,91,92,93,94,95,96,97,98,99]))
배열 내의 정수를 모두 더해서 배열의 길이만큼 나누면 평균을 낼 수 있다.
변수 output 에 0을 할당하고, for 반복문의 조건을 위와 같이 구성해 배열의 마지막 인덱스 요소까지 접근할 수 있게 한다.
미리 만들어놓은 변수 output에 numbers[i] 을 계속 더하게 하면 반복문이 끝났을 때 output 에는 배열 요소의 총합이 할당되어있게 된다
평균을 구하는 것이 목적이므로 총합인 output을 배열 요소의 길이 numbers.length로 나누면 평균이 나오게 된다.
function solution(numbers) {
var answer = numbers.reduce((a,b) => a+b, 0) / numbers.length;
return answer;
}
reduce 함수를 써서 배열 내 요소의 총합을 구한 코드이다. reduce 함수를 살펴보면 아래와 같다
arr.reduce(callback(accumulator, currentValue, index, array), initialValue)
arr
- 순회하고자 하는 배열
accumulator
- 누적되는 값
- callback 함수의 반환값을 누적
- initialValue를 설정한 경우 callback의 최초 호출시 initialValue로 값으로 초기화
- initialValue가 없을 경우 arr의 0번째 인덱스 값으로 초기화
currentValue
- 현재 배열의 요소
index(생략 가능)
- 현재 배열 요소의 index
array(생략 가능)
- reduce 함수를 호출한 배열
initialValue(생략 가능)
- callback의 최초 호출시 accumulator 초기값
위 코드에서는 a 가 accumulator 역할을 하므로 callback 함수의 반환값을 누적한다. b는 currentValue, 현재 배열 요소의 인덱스를 의미한다. 쉽게 배열 내의 모든 요소를 더하는 코드라고 외워도 좋다.
function solution(num_list) {
let 짝수 = []
let 홀수 = []
for(let num of num_list){
if(num % 2 === 0){
짝수.push(num)
}else{
홀수.push(num)
}
}
let result = [짝수.length, 홀수.length]
return result;
}
console.log(solution([1,2,3,4,5]))
매개변수로 받은 배열의 요소 중 짝수와 홀수의 개수를 담은 배열을 리턴하는 코드이다.
먼저 변수 짝수와 홀수를 각각 빈 배열로 할당을 해놓고(변수 이름은 웬만하면 영어로 하는게 좋다) for of 반복문을 이용해 num_list 내의 요소들을 하나씩 꺼내어 변수 num으로 할당한다. 하나씩 꺼내서 if 조건문의 조건인 num % 2 ===0(짝수 홀수를 판별하기 위한 조건)을 통과하면서 짝수는 변수 짝수 배열에 할당, 홀수는 변수 홀수 배열에 할당된다.
문제는 num_list 내 요소의 짝수, 홀수 개수를 구하는 것이였으므로 배열로 할당된 짝수, 홀수를 length 메소드를 활용해 리턴을 하면 된다
function solution(num_list) {
return [
num_list.filter((num) => num % 2 === 0).length,
num_list.filter((num) => num % 2 === 1).length,
];
}
이와 같이 filter 함수를 사용해서 해결할 수도 있다. fliter 함수는 주어진 배열의 값들을 오름차순으로 접근해 callbackfn을 통해 true를 반환하는 요소를 기준으로 신규 배열을 만들어 반환한다.
function solution(numbers, num1, num2) {
var number = []
for(let i = num1; i <= num2; i++) {
number.push(numbers[i])
}
return number
}
console.log(solution([1,2,3,4,5],1,3))
console.log(solution([1,3,5],1,2))
num1에 들어오는 값의 인덱스부터 num2에 들어오는 값의 인덱스까지의 배열을 리턴해야 하므로 for문을 사용해 반복을 도는 초기값을 num1로 할당, 반복 횟수는 num2에 해당하는 인덱스까지 돌아야하므로 num2 이하로 조건을 달고 반복문을 돌 때마다 빈 배열로 할당한 변수 number에 numbers의 i번째 인덱스가 할당되게 한다.
function solution(numbers, num1, num2) {
return numbers.slice(num1, num2 + 1);
}
이와 같은 코드로도 작성할 수 있는데 ,여기서 주의할 점은 첫번째 인자로 넘어온 시작 인덱스가 가리키는 값은 포함하지만, 두번째 인자로 넘어온 종료 인덱스가 가리키는 값은 포함하지 않는다는 것이다. 따라서 종료 인덱스가 가리키는 값을 포함시키기 위해 +1을 해준 것이다.
function solution(strlist) {
var answer = [];
for(i = 0; i < strlist.length; i++){
answer.push(strlist[i].length)
}
return answer;
}
console.log(solution(['we','are','the','world!']))
console.log(solution(['i','love','programmers.']))
변수 answer에 빈 배열을 할당해놓고 for 반복문의 조건에 배열의 마지막 인덱스까지 모두 돌 수 있도록 i < strlist.length 와 같이 설정해놓는다. 반복문이 돌 때마다 빈 배열을 할당해놓은 변수 answer에 push 함수를 사용하여 strlist의 i 번째 인덱스의 length가 할당되도록 한다.
function solution(strlist) {
return strlist.map((el) => el.length)
}
map 함수는 어떤 배열에 있는 모든 요소들의 값을 변경해서 만든 새로운 배열을 써야 할 때 사용한다.
function solution(num_list) {
let answer = [];
for(let i = 0; i < num_list.length; i++) {
answer[i] = num_list[num_list.length - i - 1]
}
return answer;
}
console.log(solution([1,2,3,4,5]))
console.log(solution([1,1,1,1,1,2]))
console.log(solution([1,0,1,1,1,3,5]))
num_list 의 [num_list.length - i - 1] 번째 인덱스를 빈 배열인 answer의 i 번째 인덱스에 할당하면 배열의 순서가 순차적으로 뒤바뀌게 된다.
첫번째 console 예시
answer[0] = num_list[4]
answer[1] = num_list[3]
answer[2] = num_list[2]
answer[3] = num_list[1]
answer[4] = num_list[0]
function solution(num_list) {
return num_list.reverse()
}
리버스 함수를 사용해 간단하게 배열을 뒤집는 방법도 있다
function solution(numbers) {
var answer = 0;
var array = [];
for(i = 0; i < numbers.length - 1; i++) {
for(j = i+1; j < numbers.length; j++) {
array.push(numbers[i] * numbers[j])
}
}
for(i = 0; i < array.length; i++) {
if(answer < array[i]) {
answer = array[i]
}
}
return answer;
}
console.log(solution([1,2,3,4,5]))
console.log(solution([0,31,24,10,1,9]))
이중 반복문을 사용하여 i = 0 일때 j 가 4번 반복하여 numbers[0] 일때 numbers[1] , numbers[2], numbers[3], numbers[4] 를 순차적으로 곱하여 반복문이 한사이클 돌게되고 빈배열인 array에 들어가게 된다. 다음 순서는 마찬가지로 numbers[1] 일때 numbers[2] , numbers[3], numbers[4]를 순차적으로 곱하게 되고 또 array에 들어가게 된다. 이렇게 모든 요소들을 한번씩 곱해서 array에 넣어 준 후 아래에 있는 for문이 돌면서 answer와 array[i] 를 비교하면서 answer보다 array[i]가 더 클 때 array[i]값을 answer에 재할당해주면서 반복문이 끝날때 answer에는 array 배열 내에 있는 가장 큰 수가 할당되게 된다.
이때 j = i + 1 는 이유는 같은 요소가 곱해지지 않기 위하여 즉, 겹쳐지지 않게 하기 위함이다.
function solution(numbers) {
numbers.sort((a,b)=>b-a);
return numbers[0]*numbers[1];
}
이와 같은 코드로도 실행이 가능하다. sort( ) 함수를 사용하여 내림차순으로 정렬 후 인덱스 0번째와 인덱스 1번째에 있는 요소들을 곱했는데 numbers.sort((a,b) => b-a) 는
numbers.sort(function(a,b)){ return b - a } 와 같다(화살표 함수를 풀어 쓴 것)
반대로 오름차순은 numbers.sort((a,b) => a-b) 로 구할 수 있다.
댓글