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

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

---

## [간단한 논리 연산](https://school.programmers.co.kr/learn/courses/30/lessons/181917)

### 문제
boolean 변수 `x1`, `x2`, `x3`, `x4`가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.

(`x1` ∨ `x2`) ∧ (`x3` ∨ `x4`)


### 소스 코드
```javascript
const solution = (x1, x2, x3, x4) => {
  const operation1 = (x1 || x2);
  const operation2 = (x3 || x4);
  return operation1 && operation2;
};
```

## [주사위 게임 3](https://school.programmers.co.kr/learn/courses/30/lessons/181916)

### 문제
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.

네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 `a`, `b`, `c`, `d`로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- a, b, c, d는 1 이상 6 이하의 정수입니다.

(`x1` ∨ `x2`) ∧ (`x3` ∨ `x4`)


### 소스 코드
```javascript
const solution = (a, b, c, d) => {
  let obj = {};

  [a, b, c, d].forEach(num => {
    obj[num] = (obj[num] || 0) + 1;
  });
  let entries = Object.entries(obj);
  entries.sort((a, b) => b[1] - a[1]);
  let sortedKeys = entries.map(entry => entry[0]);

  if (obj[sortedKeys[0]] === 4) {
    return Number(sortedKeys[0]) * 1111;
  } else if (obj[sortedKeys[0]] === 3) {
    return (10 * Number(sortedKeys[0]) + Number(sortedKeys[1])) ** 2;
  } else if (obj[sortedKeys[0]] === 2 && sortedKeys.length === 2) {
    return (Number(sortedKeys[0]) + Number(sortedKeys[1])) * Math.abs(Number(sortedKeys[0]) - Number(sortedKeys[1]));
  } else if (obj[sortedKeys[0]] === 2 && sortedKeys.length === 3) {
    return Number(sortedKeys[1]) * Number(sortedKeys[2]);
  } else {
    return Number(sortedKeys.sort((a, b) => a - b)[0]);
  }
};
```

- `obj` 변수에 각 숫자 개수를 세어준 다음 `sortedKeys`로 `value`개수가 많은 순서대로 `key`를 정렬해 주었다. 그리고 나온 숫자에 따라 계산식을 적용하였다.

## [글자 이어 붙여 문자열 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/181915)

### 문제
문자열 `my_string`과 정수 배열 `index_list`가 매개변수로 주어집니다. `my_string`의 `index_list`의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `my_string`의 길이 ≤ 1,000
	- `my_string`의 원소는 영소문자로 이루어져 있습니다.
	- 1 ≤ `index_list`의 길이 ≤ 1,000
	- 0 ≤ `ndex_list`의 원소 < `my_string`의 길이


### 소스 코드
```javascript
const solution = (my_string, index_list) => {
  let answer = '';
  const string = my_string.split('');
  for (const item of index_list) {
    answer += string[item];
  }

  return answer;
};
```

## [9로 나눈 나머지](https://school.programmers.co.kr/learn/courses/30/lessons/181914)

### 문제
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 `number`로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.

- 제한사항
	- 1 ≤ `number`의 길이 ≤ 100,000
	- `number`의 원소는 숫자로만 이루어져 있습니다.
	- `number`는 정수 0이 아니라면 숫자 '0'으로 시작하지 않습니다.


### 소스 코드
```javascript
const solution = number => {
  const array = number.split('').map(Number);
  let sum = 0
  array.map(item => sum += item);

  return Number(sum) % 9;
};
```

## [문자열 여러 번 뒤집기](https://school.programmers.co.kr/learn/courses/30/lessons/181913)

### 문제
문자열 `my_string`과 이차원 정수 배열 `queries`가 매개변수로 주어집니다. `queries`의 원소는 [s, e] 형태로, `my_string`의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. `my_string`에 `queries`의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.

(`x1` ∨ `x2`) ∧ (`x3` ∨ `x4`)


### 소스 코드
```javascript
const solution = (my_string, queries) => {
  const array = my_string.split('');
  queries.map(item => {
    for (let i = 0; i < (item[1] - item[0]) / 2; i++){
      const temp = array[item[1] - i];
      array[item[1] - i] = array[item[0] + i];
      array[item[0] + i] = temp;
    }
  });

  return array.join('');
};
```
