1. 홀수 vs 짝수
목표 : 홀수번째 합과 짝수번째합 중 더 큰것을 반환
//입력
[4, 2, 6, 1, 7, 6]
//출력(4+6+7 = 17)
17
function solution(num_list) {
let odd = 0
let even = 0
for(let i = 0; i<num_list.length; i++){
if(i%2 == 0) odd+=num_list[i]
else even += num_list[i]
}
return Math.max(odd, even)
}
- 홀수와 짝수를 담을 변수를 각각
odd와 even으로 선언하고 값은 0으로 설정한다.
num_list의 길이만큼 반복문을 수행한다.
- 배열의 첫 시작의 인덱스는
0이지만, 홀수번째 이기 때문에, i를 2로 나누었을 때 0이면 홀수로 보고 odd에 num_list[i]를 더해준다.
- 짝수번째의 숫자는
else단에서 처리를 하여 even에 num_list[i]를 더해준다.
Math.max()를 사용하여 더 큰 값을 반환해준다
2. 5명씩
목표 : 다섯명 씩 그룹을 나누었을 때 첫 번째에 있는 사람들을 반환
//입력
["nami", "ahri", "jayce", "garen", "ivern", "vex", "jinx"]
//출력
["nami", "vex"]
function solution(names) {
return names.filter((_, i) => !(i % 5))
}
filter()를 사용하여 인덱스번호를 5로 나누었을 때, 나누어 떨어지는 경우만 true를 반환하기 때문에 결과적으로 filter()의 조건은 5의 배수인 인덱스만 남겨놓고, 배열로 반환한다.
3. 할 일 목록
목표 : boolean 배열에서 false인 인덱스를 이용하여 다른 배열에서 골라 출력
//입력 (todo_list, finished)
["problemsolving", "practiceguitar", "swim", "studygraph"], [true, false, true, false]
//출력
["practiceguitar", "studygraph"]
function solution(todo_list, finished) {
return todo_list.filter((_,i) => !finished[i]);
}
filter()를 사용하여 finished의 인덱스를 순회하면서 false를 true 로 not시킨 인덱스를 todo_list에서 찾아 배열의 형태로 반환한다.
4. n보다 커질 때까지 더하기
목표 : 배열에서 순차적으로 더하면서 n보다 커진 상황의 합을 구하기
//입력(numbers, n)
[34, 5, 71, 29, 100, 34], 123
//출력
139
function solution(numbers, n) {
let sum = 0
for(let i = 0; i<numbers.length; i++){
sum += numbers[i]
if(sum > n) return sum
}
}
- 반환할 합을 저장할
sum을 0으로 선언하고, numvers배열의 길이만큼 반복한다.
sum에 numbers[i]를 더하면서, 더한 결과가 n보다 큰지 확인 후 크다면 sum을 반환한다.
5. 수열과 구간 쿼리 1
목표 : 배열에서 일정 구간에 +1 하기
//입력(arr, queries)
[0, 1, 2, 3, 4] [[0, 1],[1, 2],[2, 3]]
//출력
[1, 3, 4, 4, 4]
function solution(arr, queries) {
for(let [s, e] of queries){
for(let i = s; i<=e; i++){
arr[i] += 1
}
}
return arr
}
queries의 길이만큼 반복하는데, queries의 원소들을 [s, e]로 선언하여 시작할 인덱스 번호인s와 종료할 인덱스 번호인 e를 저장해준다.
- 이중포문으로 안쪽 포문에서는
i가 s부터 e(포함)까지 반복한다
arr[i]에 +1씩 해주고 포문이 모두 끝나면 arr을 반환한다.