본문 바로가기
프로그래머스 코딩 테스트

프로그래머스 : JavaScript 알고리즘 100일 챌린지 39일차

by dongjin6539 2023. 6. 23.
728x90
반응형

프로그래머스 : JavaScript 알고리즘 100일 챌린지 39일차

 

코딩 기초 트레이닝 Day39

 

 

1. 홀수 vs 짝수 : 정수 리스트 num_list가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할 때, 홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다.

function solution(num_list) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
num_list result
[4, 2, 6, 1, 7, 6] 17
[-1, 2, 5, 6, 3] 8

 

답 확인하기
function solution(num_list) {
  let sum_odd = 0;
  let sum_even = 0;

  for (let i = 0; i < num_list.length; i++) {
    if (i % 2 === 0) {
      sum_odd += num_list[i];
    } else {
      sum_even += num_list[i];
    }
  }

  if (sum_odd > sum_even) {
    return sum_odd;
  } else {
    return sum_even;
  }
}

 

해설 확인하기

주어진 num_list 배열에서 인덱스가 짝수인 요소들과 홀수인 요소들을 각각 더하여 더 큰 합을 반환하는 함수입니다. 아래는 코드의 동작을 단계별로 해석한 설명입니다:

sum_odd와 sum_even 변수를 0으로 초기화합니다. 이 변수들은 각각 인덱스가 짝수인 요소들의 합과 홀수인 요소들의 합을 저장할 것입니다.

for 루프를 사용하여 num_list 배열의 요소들을 반복합니다. 루프 변수 i는 0부터 배열의 길이보다 작을 때까지 1씩 증가합니다.

if (i % 2 === 0) 조건문을 사용하여 i가 짝수인지 확인합니다. i를 2로 나눈 나머지가 0이면 i는 짝수입니다.

만약 i가 짝수라면, sum_odd 변수에 num_list[i] 값을 더합니다. num_list[i]는 배열의 i 인덱스에 해당하는 요소입니다.

만약 i가 홀수라면, sum_even 변수에 num_list[i] 값을 더합니다.

for 루프가 종료되면 sum_odd와 sum_even에는 각각 짝수 인덱스 요소들의 합과 홀수 인덱스 요소들의 합이 저장되어 있습니다.

if (sum_odd > sum_even) 조건문을 사용하여 sum_odd가 sum_even보다 큰지 확인합니다.

만약 sum_odd가 sum_even보다 크다면, sum_odd 값을 반환합니다. 그렇지 않으면 sum_even 값을 반환합니다.

이 함수는 배열을 입력으로 받아 짝수 인덱스 요소들과 홀수 인덱스 요소들의 합 중에서 더 큰 값을 반환합니다.

 

2. 5명씩 : 최대 5명씩 탑승가능한 놀이기구를 타기 위해 줄을 서있는 사람들의 이름이 담긴 문자열 리스트 names가 주어질 때, 앞에서 부터 5명씩 묶은 그룹의 가장 앞에 서있는 사람들의 이름을 담은 리스트를 return하도록 solution 함수를 완성해주세요. 마지막 그룹이 5명이 되지 않더라도 가장 앞에 있는 사람의 이름을 포함합니다.

function solution(names) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
names result
["nami", "ahri", "jayce", "garen", "ivern", "vex", "jinx"] ["nami", "vex"]

 

답 확인하기
function solution(n) {

  const res = [];

  while (n.length !== 0) { 
    res.push(n.splice(0, 5)[0]);
  }

  return res;
}

 

해설 확인하기

주어진 n이라는 배열을 5개씩 나누어 첫 번째 요소를 추출하여 새로운 배열에 추가하는 함수입니다. 코드의 동작을 단계별로 해석한 설명은 아래와 같습니다:

res라는 빈 배열을 생성합니다. 이 배열은 결과를 저장하기 위해 사용됩니다.

while 루프를 사용하여 n.length가 0이 아닐 때까지 반복합니다. n.length는 n 배열의 길이를 나타냅니다. 즉, 배열이 비어있지 않을 때까지 반복합니다.

n.splice(0, 5)를 사용하여 n 배열의 첫 번째부터 다섯 번째 요소를 추출합니다. 이렇게 추출한 요소들은 n 배열에서 제거됩니다. 추출한 요소들은 배열로 반환됩니다.

res.push(n.splice(0, 5)[0])를 사용하여 추출한 요소들 중 첫 번째 요소를 res 배열에 추가합니다. splice(0, 5)[0]는 추출한 요소들 중 첫 번째 요소를 반환합니다.

while 루프가 종료되면, n 배열이 비어있게 됩니다. 이때 res 배열에는 추출한 첫 번째 요소들이 순서대로 저장되어 있습니다.

res 배열을 반환합니다.

이 함수는 입력으로 받은 배열 n을 5개씩 나누어 첫 번째 요소들을 추출하여 새로운 배열에 저장하고, 그 배열을 반환합니다.

 

3. 할 일 목록 : 오늘 해야 할 일이 담긴 문자열 배열 todo_list와 각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 finished가 매개변수로 주어질 때, todo_list에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

function solution(todo_list, finished) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
todo_list finished result
["problemsolving", "practicequitar", "swim", "studygraph"] [true, false, true, false] ["practicegquiar", "studygraph"]

 

답 확인하기
function solution(todo_list, finished) {
  const answer = [];
  for (let i = 0; i < todo_list.length; i++) {
    if (finished[i] === false) {
      answer.push(todo_list[i]);
    }
  }
  return answer;
}

 

해설 확인하기

todo_list 배열과 finished 배열을 받아서 finished 배열의 값이 false인 경우에 해당하는 todo_list의 요소들을 추출하여 answer 배열에 추가하고, answer 배열을 반환하는 함수입니다. 아래는 코드의 동작을 단계별로 해석한 설명입니다:

answer라는 빈 배열을 생성합니다. 이 배열은 결과를 저장하기 위해 사용됩니다.

for 루프를 사용하여 todo_list 배열의 요소들을 반복합니다. 루프 변수 i는 0부터 배열의 길이보다 작을 때까지 1씩 증가합니다.

if (finished[i] === false) 조건문을 사용하여 finished 배열의 i 인덱스에 해당하는 값이 false인지 확인합니다.

만약 finished[i] 값이 false라면, todo_list[i] 값을 answer 배열에 추가합니다. todo_list[i]는 배열의 i 인덱스에 해당하는 요소입니다.

for 루프가 종료되면, answer 배열에는 finished 배열의 값이 false인 경우에 해당하는 todo_list의 요소들이 저장되어 있습니다.

answer 배열을 반환합니다.

이 함수는 todo_list 배열과 finished 배열을 받아서 finished 배열의 값이 false인 경우에 해당하는 todo_list의 요소들을 추출하여 새로운 배열에 저장하고, 그 배열을 반환합니다.

 

4. n보다 커질 때까지 더하기 : 정수 배열 numbers와 정수 n이 매개변수로 주어집니다. numbers의 원소를 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.

function solution(numbers, n) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
numbers n result
[34, 5, 71, 29, 100, 34] 123 139
[58, 44, 27, 10, 100] 139 239

 

답 확인하기
function solution(numbers, n) {
  let answer = 0;

  for (let i = 0; i < numbers.length; i++) {
    answer += numbers[i];
    if (answer > n) {
      break;
    }
  }

  return answer;
}

 

해설 확인하기

주어진 numbers 배열의 요소들을 순차적으로 더해가면서 더한 값이 n보다 커지는 시점에서의 누적 합을 반환하는 함수입니다. 아래는 코드의 동작을 단계별로 해석한 설명입니다:

answer라는 변수를 0으로 초기화합니다. 이 변수는 누적 합을 저장하기 위해 사용됩니다.

for 루프를 사용하여 numbers 배열의 요소들을 반복합니다. 루프 변수 i는 0부터 배열의 길이보다 작을 때까지 1씩 증가합니다.

answer += numbers[i]를 사용하여 numbers 배열의 i 인덱스에 해당하는 요소를 answer에 더합니다. 이렇게 더한 값은 answer 변수에 누적됩니다.

if (answer > n) 조건문을 사용하여 answer 값이 n보다 큰지 확인합니다.

만약 answer 값이 n보다 크다면, 루프를 중단하고 더 이상의 요소들을 더하지 않습니다. 이를 위해 break 문을 사용합니다.

for 루프가 종료되면, answer 변수에는 누적된 합이 저장되어 있습니다.

answer 값을 반환합니다.

이 함수는 numbers 배열의 요소들을 순차적으로 더해가면서 더한 값이 n보다 커지는 시점에서의 누적 합을 반환합니다.

 

5. 수열과 구간 쿼리1 : 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.  query마다 순서대로 s  i  e인 모든 i에 대해 arr[i]에 1을 더합니다. 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

function solution(arr, queries) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
arr queries result
[0, 1, 2, 3, 4] [[0, 1], [1, 2], [2, 3]] [1, 3, 4, 4, 4]

 

답 확인하기
function solution(arr, queries) {
    return queries.reduce((acc, cur) => {
        const [from, to] = cur
        for(let i = from ; i <= to ; i ++) {
            acc[i]+=1
        }
        return acc
    }, arr)
}

 

해설 확인하기

배열 arr과 쿼리들의 배열 queries를 받아서, 각 쿼리에 따라 arr의 요소들을 수정한 후 결과 배열을 반환하는 함수입니다. 아래는 코드의 동작을 단계별로 해석한 설명입니다:

queries.reduce((acc, cur) => {...}, arr)를 사용하여 queries 배열을 순회하면서 각 쿼리에 대한 연산을 수행합니다. reduce 함수는 누적 값 acc와 현재 요소 cur을 인자로 받아 콜백 함수를 실행하며, 최종 결과를 반환합니다. arr은 초기값으로 사용됩니다.

const [from, to] = cur를 사용하여 현재 쿼리 cur의 첫 번째 요소를 from에 할당하고, 두 번째 요소를 to에 할당합니다. cur은 [from, to] 형태의 배열입니다.

for(let i = from ; i <= to ; i++)를 사용하여 from부터 to까지 반복합니다.

반복문 안에서 acc[i] += 1을 수행합니다. 이는 arr의 i 인덱스에 해당하는 요소를 1 증가시킵니다. acc는 누적 배열로, 요소의 값을 수정하며 계속 누적됩니다.

return acc를 사용하여 콜백 함수에서 수정된 acc를 반환합니다.

arr 배열을 반환합니다. reduce 함수를 통해 수정된 arr 배열이 최종적으로 반환됩니다.

이 함수는 arr 배열과 queries 배열을 받아서, 각 쿼리에 따라 arr의 요소들을 수정한 후 최종 결과 배열을 반환합니다.

728x90
반응형