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

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

---

## [문자 개수 세기](https://school.programmers.co.kr/learn/courses/30/lessons/181902)

### 문제
알파벳 대소문자로만 이루어진 문자열 `my_string`이 주어질 때, `my_string`에서 'A'의 개수, `my_string`에서 'B'의 개수,..., `my_string`에서 'Z'의 개수, `my_string`에서 'a'의 개수, `my_string`에서 'b'의 개수,..., `my_string`에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `my_string`의 길이 ≤ 1,000

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = '';

rl.on('line', (line) => {
  input = line;
  rl.close();
}).on('close', () => {
  const answer = solution(input);
  console.log(answer);
});

const solution = my_string => {
  let alphabetArray = Array.from({ length: 52 }, () => 0);
  const startCapitals = 'A'.codePointAt();
  const endCapitals = 'Z'.codePointAt();
  const startSmalls = 'a'.codePointAt();
  const endSmalls = 'z'.codePointAt();

  const array = my_string.split('');
  array.map(item => {
    if (item.codePointAt() >= startCapitals && item.codePointAt() <= endCapitals) {
      alphabetArray[item.codePointAt() - startCapitals] += 1;
    } else if (item.codePointAt() >= startSmalls && item.codePointAt() <= endSmalls) {
      alphabetArray[item.codePointAt() - startSmalls + 26] += 1;
    }
  });

  return alphabetArray;
};
```

## [배열 만들기 1](https://school.programmers.co.kr/learn/courses/30/lessons/181901)

### 문제
정수 `n`과 `k`가 주어졌을 때, 1 이상 `n`이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

- 제한사항
	- 1 ≤ `n` ≤ 1,000,000
	- 1 ≤ `k` ≤ min(1,000, n)

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = '';

rl.on('line', (line) => {
  input = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(input[0], input[1]);
  console.log(answer);
});

const solution = (n, k) => {
  let array = [];
  for (let i = k; i <= n; i += k) {
    array.push(i);
  }

  return array;
};
```

## [글자 지우기](https://school.programmers.co.kr/learn/courses/30/lessons/181900)

### 문제
문자열 `my_string`과 정수 배열 `indices`가 주어질 때, `my_string`에서 `indices`의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `indices`의 길이 < `my_string`의 길이 ≤ 100
	- `my_string`은 영소문자로만 이루어져 있습니다
	- 0 ≤ `indices`의 원소 < `my_string`의 길이
	- `indices`의 원소는 모두 서로 다릅니다.

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let my_string = '';
let n = 0;
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    my_string = line;
  } else {
    n = line.split(' ').map(Number);
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(my_string, n);
  console.log(answer);
});

const solution = (my_string, indices) => {
  let answer = [...my_string];
  let sortedIndices = indices.sort((a, b) => a - b);
  console.log(sortedIndices);
  for (let index in sortedIndices) {
    answer.splice(sortedIndices[index] - index, 1);
  }

  return answer.join('');
};
```

## [카운트 다운](https://school.programmers.co.kr/learn/courses/30/lessons/181899)

### 문제
정수 `start_num`와 `end_num`가 주어질 때, `start_num`에서 `end_num`까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

- 제한사항
	- 0 ≤ `end_num` ≤ `start_num` ≤ 50

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = '';

rl.on('line', (line) => {
  input = line.split(' ').map(Number);
  rl.close();
}).on('close', () => {
  const answer = solution(input[0], input[1]);
  console.log(answer);
});

const solution = (start, end_num) => {
  let array = [];
  for (let i = start; i >=end_num; i--) {
    array.push(i);
  }

  return array;
};
```

## [가까운 1 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/181898)

### 문제
정수 배열 `arr`가 주어집니다. 이때 `arr`의 원소는 1 또는 0입니다. 정수 `idx`가 주어졌을 때, `idx`보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.

단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.

- 제한사항
	- 3 ≤ `arr`의 길이 ≤ 100'000
		- `arr`의 원소는 전부 1 또는 0입니다.


### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let idx = '';
let arr = [];
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    arr = line.split(' ').map(Number);
  } else {
    idx = Number(line);
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(idx, arr);
  console.log(answer);
});

const solution = (arr, idx) => {
  return arr.indexOf(1, idx);
};
```
