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

- Author: @laetipark
- Published: 2024-04-11
- Updated: 2024-04-11
- 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-21%EC%9D%BC%EC%B0%A8
- Tags: 프로그래머스, 코딩테스트, 기초문제

---

## [배열의 길이를 2의 거듭제곱으로 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/181857)

### 문제
정수 배열 `arr`이 매개변수로 주어집니다. `arr`의 길이가 2의 정수 거듭제곱이 되도록 `arr` 뒤에 정수 0을 추가하려고 합니다. `arr`에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `arr`의 길이 ≤ 1,000
	- 1 ≤ `arr`의 원소 ≤ 1,000

### 소스 코드
```javascript
const solution = arr => {
  let length = arr.length;
  let answer = arr;
  let count = 0;

  while (true) {
    length = Math.round(length / 2);

    if (length === 1) {
      break;
    }
    count++;
  }

  if (2 ** count < arr.length) {
    for (let i = arr.length; i < 2 ** (count + 1); i++) {
      answer.push(0);
    }
  }

  return answer;
};
```

## [배열 비교하기](https://school.programmers.co.kr/learn/courses/30/lessons/181856)

### 문제
이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 `arr1`과 `arr2`가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 `arr2`가 크다면 -1, `arr1`이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `arr1`의 길이 ≤ 100
	- 1 ≤ `arr2`의 길이 ≤ 100
	- 1 ≤ `arr1`의 원소 ≤ 100
	- 1 ≤ `arr2`의 원소 ≤ 100
- 문제에서 정의한 배열의 대소관계가 일반적인 프로그래밍 언어에서 정의된 배열의 대소관계와 다를 수 있는 점에 유의해주세요.

### 소스 코드
```javascript
const solution = (arr1, arr2) => {
  if (arr1.length > arr2.length) {
    return 1;
  } else if (arr1.length < arr2.length) {
    return -1;
  } else {
    const arr1Sum = arr1.reduce((acc, cur) => acc + cur, 0);
    const arr2Sum = arr2.reduce((acc, cur) => acc + cur, 0);
    if (arr1Sum > arr2Sum) {
      return 1;
    } else if (arr1Sum < arr2Sum) {
      return -1;
    } else {
      return 0;
    }
  }
};
```

## [문자열 묶기](https://school.programmers.co.kr/learn/courses/30/lessons/181855)

### 문제
문자열 배열 `strArr`이 주어집니다. `strArr`의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.

- 제한사항
	- 1 ≤ `strArr`의 길이 ≤ 100,000
		- 1 ≤ `strArr`의 원소의 길이 ≤ 30
		- `strArr`의 원소들은 알파벳 소문자로 이루어진 문자열입니다.

### 소스 코드
```javascript
const solution = (strArr) => {
  const arr = {};
  strArr.map(str => {
    if (!arr[str.length]) {
      arr[str.length] = [];
    }
    arr[str.length].push(str);
  });
  return Math.max(...Object.values(arr).map(arr => arr.length));
};
```

## [열의 길이에 따라 다른 연산하기](https://school.programmers.co.kr/learn/courses/30/lessons/181854)

### 문제
정수 배열 `arr`과 정수 `n`이 매개변수로 주어집니다. `arr`의 길이가 홀수라면 `arr`의 모든 짝수 인덱스 위치에 `n`을 더한 배열을, `arr`의 길이가 짝수라면 `arr`의 모든 홀수 인덱스 위치에 `n`을 더한 배열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `arr`의 길이 ≤ 1,000
	- 1 ≤ `arr`의 원소 ≤ 1,000
	 -1 ≤ `n` ≤ 1,000

### 소스 코드
```javascript
const solution = (arr, n) => {
  if (arr.length % 2 === 0) {
    return arr.map((item, index) => index % 2 === 0 ? item : item + n);
  } else {
    return arr.map((item, index) => index % 2 === 1 ? item : item + n);
  }
};
```

## [뒤에서 5등까지](https://school.programmers.co.kr/learn/courses/30/lessons/181853)

### 문제
정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

- 제한사항
	- 6 ≤ `num_list`의 길이 ≤ 30
	- 1 ≤ `num_list`의 원소 ≤ 100

### 소스 코드
```javascript
const solution = (numList) => {
  return numList.sort((a, b) => a - b)
    .filter((num, index) => index < 5);
};
```
