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

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

---

## [x 사이의 개수](https://school.programmers.co.kr/learn/courses/30/lessons/181867)

### 문제
문자열 `myString`이 주어집니다. `myString`을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

- 제한사항
	- 1 ≤ `myString`의 길이 ≤ 100,000
		- `myString`은 알파벳 소문자로 이루어진 문자열입니다.

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let myString = '';

rl.on('line', (line) => {
  myString = line;
  rl.close();
}).on('close', () => {
  const answer = solution(myString);
  console.log(answer);
});

const solution = myString => {
  let answer = [];
  let count = 0;

  for (let i = 0; i < myString.length; i++) {
    if (myString[i] !== 'x') {
      count++;
    } else {
      answer.push(count);
      count = 0;
    }
  }
  answer.push(count);

  return answer;
};
```

## [문자열 잘라서 정렬하기](https://school.programmers.co.kr/learn/courses/30/lessons/181866)

### 문제
문자열 `myString`이 주어집니다. `myString`을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

- 제한사항
	- 1 ≤ `myString`의 길이 ≤ 100,000
		- `myString`은 알파벳 소문자로 이루어진 문자열입니다.

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let myString = '';

rl.on('line', (line) => {
  myString = line;
  rl.close();
}).on('close', () => {
  const answer = solution(myString);
  console.log(answer);
});

const solution = myString => {
  let answer = [];
  let str = '';

  for (let i = 0; i < myString.length; i++) {
    if (myString[i] !== 'x') {
      str += myString[i];
    } else {
      if (str !== '') {
        answer.push(str);
        str = '';
      }
    }
  }
  if (str !== '') {
    answer.push(str);
  }

  return answer.sort();
};
```

## [간단한 식 계산하기](https://school.programmers.co.kr/learn/courses/30/lessons/181865)

### 문제
문자열 `binomial`이 매개변수로 주어집니다. `binomial`은 "`a` `op` `b`" 형태의 이항식이고 `a`와 `b`는 음이 아닌 정수, `op`는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 0 ≤ `a`, `b` ≤ 40,000
	- 0을 제외하고 `a`, `b`는 0으로 시작하지 않습니다.

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let binomial = '';

rl.on('line', (line) => {
  binomial = line;
  rl.close();
}).on('close', () => {
  const answer = solution(binomial);
  console.log(answer);
});

const solution = binomial => {
  const calcString = binomial.split(' ');
  if (calcString[1] === '+') {
    return parseInt(calcString[0]) + parseInt(calcString[2]);
  } else if (calcString[1] === '-') {
    return parseInt(calcString[0]) - parseInt(calcString[2]);
  } else if (calcString[1] === '*') {
    return parseInt(calcString[0]) * parseInt(calcString[2]);
  } else if (calcString[1] === '/')
    return parseInt(calcString[0]) / parseInt(calcString[2]);
};
```

## [문자열 바꿔서 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/181864)

### 문제
문자 "A"와 "B"로 이루어진 문자열 `myString`과 `pat`가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

- 제한사항
	- 1 ≤ `myString`의 길이 ≤ 100
	- 1 ≤ `pat`의 길이 ≤ 10
		- `myString`과 `pat`는 문자 "A"와 "B"로만 이루어진 문자열입니다.
		

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let myString = '';
let pat = '';
let count = 0;

rl.on('line', (line) => {
  if (count === 0) {
    myString = line;
  } else {
    pat = line;
  }
  count++;
  if (count > 1) {
    rl.close();
  }
}).on('close', () => {
  const answer = solution(myString, pat);
  console.log(answer);
});

const solution = (myString, pat) => {
  const reverseString = myString.split('').map((char) => char === 'A' ? 'B' : 'A').join('');
  for (let i = 0; i <= reverseString.length - pat.length; i++) {
    if (pat === reverseString.substring(i, i + pat.length)) {
      return 1;
    }
  }

  return 0;
};
```

## [rny_string](https://school.programmers.co.kr/learn/courses/30/lessons/181863)

### 문제
'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 `rny_string`이 주어질 때, `rny_string`의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

- 제한사항
	- 1 ≤ `rny_string`의 길이 ≤ 100
	- `rny_string`은 영소문자로만 이루어져 있습니다.

### 소스 코드
```javascript
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let rnyString = '';

rl.on('line', (line) => {
  rnyString = line;
  rl.close();
}).on('close', () => {
  const answer = solution(rnyString);
  console.log(answer);
});

const solution = rnyString => {
  return rnyString.split('').map(str => str === 'm' ? 'rn' : str).join('');
};
```
