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

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

---

## [문자열의 앞의 n글자](https://school.programmers.co.kr/learn/courses/30/lessons/181907)

### 문제
문자열 `my_string`과 정수 `n`이 매개변수로 주어질 때, `my_string`의 앞의 `n`글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- `my_string`은 숫자와 알파벳으로 이루어져 있습니다.
	- 1 ≤ `my_string`의 길이 ≤ 1,000
	- 1 ≤ n ≤ `my_string`의 길이

### 소스 코드
```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;
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(my_string, Number(n));
  console.log(answer);
});

const solution = (my_string, n) => {
  return my_string.slice(0, n);
};
```

## [접두사인지 확인하기](https://school.programmers.co.kr/learn/courses/30/lessons/181906)

### 문제
어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다.
문자열 `my_string`과 `is_prefix`가 주어질 때, `is_prefix`가 `my_string`의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `my_string`의 길이 ≤ 100
	- 1 ≤ `is_prefix`의 길이 ≤ 100
	- `my_string`과 `is_prefix`는 영소문자로만 이루어져 있습니다.

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let my_string = '';
let is_prefix = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    my_string = line;
  } else {
    is_prefix = line;
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(my_string, is_prefix);
  console.log(answer);
});

const solution = (my_string, is_prefix) => {
  const prefix = my_string.slice(0, is_prefix.length);
  return is_prefix.length <= my_string.length && prefix.includes(is_prefix) ? 1 : 0;
};
```

## [문자열 뒤집기](https://school.programmers.co.kr/learn/courses/30/lessons/181905)

### 문제
문자열 `my_string`과 정수`s`, `e`가 매개변수로 주어질 때, `my_string`에서 인덱스 `s`부터 인덱스 `e`까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- `my_string`은 숫자와 알파벳으로만 이루어져 있습니다.
	- 1 ≤ `my_string`의 길이 ≤ 1,000
	- 0 ≤ `s` ≤ `e` < `my_string`의 길이

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let my_string = '';
let input = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    my_string = line;
  } else {
    input = line.split(' ').map(Number);
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(my_string, input[0], input[1]);
  console.log(answer);
});

const solution = (my_string, s, e) => {
  const prefix = my_string.slice(0, s);
  const interval = my_string.slice(s, e + 1);
  let reverse = '';
  for (let i = e - s; i >= 0; i--) {
    reverse += interval[i];
  }
  const suffix = my_string.slice(e + 1);

  return prefix + reverse + suffix;
};
```

## [세로 읽기](https://school.programmers.co.kr/learn/courses/30/lessons/181904)

### 문제
문자열 `my_string`과 두 정수 `m`, `c`가 주어집니다. `my_string`을 한 줄에 `m` 글자씩 가로로 적었을 때 왼쪽부터 세로로 `c`번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- `my_string`은 영소문자로 이루어져 있습니다.
	- 1 ≤ `m` ≤ `my_string`의 길이 ≤ 1,000
	- `m`은 `my_string` 길이의 약수로만 주어집니다.
	- 1 ≤ `c` ≤ `m`

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let my_string = '';
let input = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    my_string = line;
  } else {
    input = line.split(' ').map(Number);
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(my_string, input[0], input[1]);
  console.log(answer);
});

const solution = (my_string, m, c) => {
  const array = [];
  let answer = '';
  for (let i = 0; i < my_string.length; i += m) {
    array.push(my_string.slice(i, i + m));
  }

  for (let i = 0; i < array.length; i++) {
    answer += (array[i])[c - 1];
  }

  return answer;
};
```

## [qr code](https://school.programmers.co.kr/learn/courses/30/lessons/181903)

### 문제
두 정수 `q`, `r`과 문자열 `code`가 주어질 때, `code`의 각 인덱스를 `q`로 나누었을 때 나머지가 `r`인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 0 ≤ `r`< `q` ≤ 20
	- `r` < `code`의 길이 ≤ 1,000
	- `code`는 영소문자로만 이루어져 있습니다.

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let code = '';
let input = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    input = line.split(' ').map(Number);
  } else {
    code = line;
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(input[0], input[1], code);
  console.log(answer);
});

const solution = (q, r, code) => {
  let answer = '';
  for (let i = r; i < code.length; i += q) {
    answer += code[i];
  }

  return answer;
};
```
