# 프로그래머스/Javascript : 기초 문제 14일차

- Author: @laetipark
- Published: 2024-03-19
- Updated: 2024-03-26
- Source: http://blex.me/@laetipark/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4javascript-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EC%A0%9C-14%EC%9D%BC%EC%B0%A8
- Tags: 프로그래머스, 코딩테스트, 기초문제

---

## [홀수 vs 짝수](https://school.programmers.co.kr/learn/courses/30/lessons/181887)

### 문제
정수 리스트 `num_list`가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할 때, 홀수 번째 원소들의 합과 짝수 번째 원소들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다.

- 제한사항
	- 5 ≤ `num_list`의 길이 ≤ 50
	- 9 ≤ `num_list`의 원소 ≤ 9


### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let num_list = [];

rl.on('line', (line) => {
  num_list = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(num_list);
  console.log(answer);
});

const solution = num_list => {
  let odd = 0;
  let even = 0;

  for (let i = 0; i < num_list.length; i++) {
    if (i % 2 === 0) {
      even += num_list[i];
    } else {
      odd += num_list[i];
    }
  }

  return even > odd ? even : odd;
};
```

## [5명씩](https://school.programmers.co.kr/learn/courses/30/lessons/181886)

### 문제
최대 5명씩 탑승가능한 놀이기구를 타기 위해 줄을 서있는 사람들의 이름이 담긴 문자열 리스트 `names`가 주어질 때, 앞에서 부터 5명씩 묶은 그룹의 가장 앞에 서있는 사람들의 이름을 담은 리스트를 return하도록 solution 함수를 완성해주세요. 마지막 그룹이 5명이 되지 않더라도 가장 앞에 있는 사람의 이름을 포함합니다.

- 제한사항
	- 5 ≤ `names`의 길이 ≤ 30
	- 1 ≤ `names`의 원소의 길이 ≤ 10
	- `names`의 원소는 영어 알파벳 소문자로만 이루어져 있습니다.


### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let names = [];

rl.on('line', (line) => {
  names = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(names);
  console.log(answer);
});

const solution = names => {
  let answer = [];
  for (let i = 0; i < names.length; i += 5) {
    answer.push(names[i]);
  }
  return answer;
};
```

## [할 일 목록](https://school.programmers.co.kr/learn/courses/30/lessons/181885)

### 문제
오늘 해야 할 일이 담긴 문자열 배열 `todo_list`와 각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 `finished`가 매개변수로 주어질 때, `todo_list`에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `todo_list`의 길이 1 ≤ 100
	- 2 ≤ `todo_list`의 원소의 길이 ≤ 20
		- `todo_list`의 원소는 영소문자로만 이루어져 있습니다.
		- `todo_list`의 원소는 모두 서로 다릅니다.
	- `finished[i]`는 true 또는 false이고 true는 `todo_list[i]`를 마쳤음을, false는 아직 마치지 못했음을 나타냅니다.
	- 아직 마치지 못한 일이 적어도 하나 있습니다.


### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let todo_list = [];
let finished = [];
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    todo_list = line.split(' ');
  } else {
    finished = line.split(' ').map(Number).map(item => item === 1);
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(todo_list, finished);
  console.log(answer);
});

const solution = (todo_list, finished) => {
  let answer = [];
  for (let i = 0; i < todo_list.length; i++) {
    if (!finished[i]) {
      answer.push(todo_list[i]);
    }
  }
  return answer;
};
```

## [n보다 커질 때까지 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/181884)

### 문제
정수 배열 `numbers`와 정수 `n`이 매개변수로 주어집니다. `numbers`의 원소를 앞에서부터 하나씩 더하다가 그 합이 `n`보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `numbers`의 길이 ≤ 100
	- 1 ≤ `numbers`의 원소 ≤ 100
	- 0 ≤ n < `numbers`의 모든 원소의 합


### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let todo_list = [];
let finished = [];
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    todo_list = line.split(' ');
  } else {
    finished = line.split(' ').map(Number).map(item => item === 1);
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(todo_list, finished);
  console.log(answer);
});

const solution = (todo_list, finished) => {
  let answer = [];
  for (let i = 0; i < todo_list.length; i++) {
    if (!finished[i]) {
      answer.push(todo_list[i]);
    }
  }
  return answer;
};
```

## [수열과 구간 쿼리 1](https://school.programmers.co.kr/learn/courses/30/lessons/181883)

### 문제
정수 배열 `numbers`와 정수 `n`이 매개변수로 주어집니다. `numbers`의 원소를 앞에서부터 하나씩 더하다가 그 합이 `n`보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `arr`의 길이 ≤ 1,000
		- 0 ≤ `arr`의 원소 ≤ 1,000,000
	- 1 ≤ `queries`의 길이 ≤ 1,000
		- 0 ≤ `s `≤ `e` < `arr`의 길이


### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = '';
let queries = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    input = line.split(' ').map(Number);
  } else {
    queries = line.split(' ');
    queries = queries.map(item => {
      return item.split(',').map(Number);
    });
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(input, queries);
  console.log(answer);
});

const solution = (arr, queries) => {
  let answer = arr;
  for (let i = 0; i < queries.length; i++) {
    for (let j = queries[i][0]; j <= queries[i][1]; j++) {
      answer[j] += 1;
    }
  }

  return answer;
};
```
