세 개의 구분자
문제
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr
이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
- 제한사항
- 1 ≤
myStr
의 길이 ≤ 1,000,000myStr
은 알파벳 소문자로 이루어진 문자열 입니다.
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let myStr = [];
rl.on('line', (line) => {
myStr = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(myStr);
console.log(answer);
});
const solution = myStr => {
let answer = [];
let str = '';
for (let i = 0; i < myStr.length; i++) {
if (!['a', 'b', 'c'].includes(myStr[i])) {
str += myStr[i];
} else {
if (str !== '') {
answer.push(str);
}
str = '';
}
}
if (str !== '') {
answer.push(str);
}
return answer.length === 0 ? ["EMPTY"] : answer;
};
배열의 원소만큼 추가하기
문제
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr
가 매개변수로 주어질 때, arr
의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 100 - 1 ≤
arr
의 원소 ≤ 100
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
rl.on('line', (line) => {
arr = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(arr);
console.log(answer);
});
const solution = arr => {
let answer = [];
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i]; j++) {
answer.push(arr[i]);
}
}
return answer;
};
빈 배열에 추가, 삭제하기
문제
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr
과 boolean 배열 flag
가 매개변수로 주어질 때, flag
를 차례대로 순회하며 flag[i]
가 true라면 X의 뒤에 arr[i]
를 arr[i]
× 2 번 추가하고, flag[i]
가 false라면 X에서 마지막 arr[i]
개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
- 제한사항
- 1 ≤
arr
의 길이 =flag
의 길이 ≤ 100 arr
의 모든 원소는 1 이상 9 이하의 정수입니다.- 현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
let flag = [];
let count = 0;
rl.on('line', (line) => {
if (count === 0) {
arr = line.split(' ').map(Number);
} else {
flag = line.split(' ').map(Number).map(item => item === 1);
}
count++;
if (count > 1) {
rl.close();
}
}).on('close', () => {
const answer = solution(arr, flag);
console.log(answer);
});
const solution = (arr, flag) => {
let answer = [];
for (let i = 0; i < arr.length; i++) {
if (flag[i]) {
for (let j = 0; j < arr[i] * 2; j++) {
answer.push(arr[i]);
}
} else {
answer.splice(answer.length - arr[i], answer.length);
}
}
return answer;
};
배열 만들기 6
문제
0과 1로만 이루어진 정수 배열 arr
가 주어집니다. arr
를 이용해 새로운 배열 stk
을 만드려고 합니다.
i
의 초기값을 0으로 설정하고 i
가 arr
의 길이보다 작으면 다음을 반복합니다.
만약 stk
이 빈 배열이라면 arr[i]
를 stk
에 추가하고 i
에 1을 더합니다.
stk
에 원소가 있고, stk
의 마지막 원소가 arr[i]
와 같으면 stk
의 마지막 원소를 stk
에서 제거하고 i
에 1을 더합니다.
stk
에 원소가 있는데 stk
의 마지막 원소가 arr[i]
와 다르면 stk
의 맨 마지막에 arr[i]
를 추가하고 i
에 1을 더합니다.
위 작업을 마친 후 만들어진 stk
을 return 하는 solution 함수를 완성해 주세요.
단, 만약 빈 배열을 return 해야한다면 [-1]을 return 합니다.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 1,000,000arr
의 원소는 0 또는 1 입니다.
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
rl.on('line', (line) => {
arr = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(arr);
console.log(answer);
});
const solution = arr => {
let answer = [arr[0]];
let number = arr[0];
for (let i = 1; i < arr.length; i++) {
if (answer[answer.length - 1] !== arr[i]) {
answer.push(arr[i]);
} else {
answer.splice(answer.length - 1, answer.length);
}
number = arr[i];
}
return answer.length === 0 ? [-1] : answer;
};
무작위로 K개의 수 뽑기
문제
랜덤으로 서로 다른 k
개의 수를 저장한 배열을 만드려고 합니다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.
이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k
의 배열을 예상해봅시다.
정수 배열 arr
가 주어집니다. 문제에서의 무작위의 수는 arr
에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요.
단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 100,000- 0 ≤
arr
의 원소 ≤ 100,000
- 0 ≤
- 1 ≤
k
≤ 1,000
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = [];
let k = 0;
let count = 0;
rl.on('line', (line) => {
if (count === 0) {
arr = line.split(' ').map(Number);
} else {
k = Number(line);
}
count++;
if (count > 1) {
rl.close();
}
}).on('close', () => {
const answer = solution(arr, k);
console.log(answer);
});
const solution = (arr, k) => {
let answer = [];
let set = [...new Set(arr)];
for (let i = 0; i < k; i++) {
if (set[i] !== undefined) {
answer.push(set[i]);
} else {
answer.push(-1);
}
}
return answer;
};
Ghost