1. 조합구하기
ex) const arr = ["*", "+"]
arr 조합은
["*", "+"], ["+", "*"] 이 두 가지 이다.
function generateOperatorCombinations(arr) {
const permutations = [];
const permute = (arr, m = []) => {
if (arr.length === 0) {
permutations.push(m);
} else {
for (let i = 0; i < arr.length; i++) {
const cur = arr.slice();
const next = cur.splice(i, 1);
permute(cur.slice(), [...m, ...next]);
}
}
};
permute(arr);
return permutations;
}
관련 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67257
2. replace 심화
expression = "100-200*300-500+20"
const expressionArr = expression.replace(expressionRegex, '$1,$2,').split(',');
/*
[
'100', '-', '200',
'*', '300', '-',
'500', '+', '20'
]
*/
아래는 대체 문자열에서 사용할 수 있는 특별한 패턴을 표로 정리한 것입니다:
패턴 | 설명 | 예시 |
$$ | "$" 기호를 삽입합니다. | 대체 문자열에 "$$"를 사용하면 결과에 "$" 삽입. |
$& | 일치하는 부분 문자열을 삽입합니다. | 패턴: "apple", 대체 문자열: "[$&]" => "[apple]" |
$' | 일치하는 부분 문자열 뒤의 문자열을 삽입합니다. | 패턴: "apple", 대체 문자열: "[$']" => "[$']" |
`$`` | 일치하는 부분 문자열 앞의 문자열을 삽입합니다. | 패턴: "apple", 대체 문자열: "[$]" => "[$]" |
$n | n번째 캡처 그룹을 삽입합니다 (1부터 시작). | 패턴: "/(\d+)-(\d+)/", 대체 문자열: "[$1] [$2]" => "[첫 번째 캡처 그룹] [두 번째 캡처 그룹]" |
$<Name> | 지정된 이름(Name)을 가진 캡처 그룹을 삽입합니다. | 패턴: "/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/", 대체 문자열: "Year: $<year>, Month: $<month>, Day: $<day>" => "Year: [year에 일치하는 값], Month: [month에 일치하는 값], Day: [day에 일치하는 값]" |
// 1. $$
const test = "123onetwothree";
const testReplace = test.replace(/\d+/g, "$$");
console.log(testReplace); // $onetwothree
// 2. $&
const test = "apples are delicious 123";
const testReplace = test.replace("apples", "[$&]");
console.log(testReplace); // [apples] are delicious 123
// 3. [$']
const test = "apples are delicious 123";
const testReplace = test.replace("apples", "[$']");
console.log(testReplace); // [ are delicious 123] are delicious 123
// 4. [$`]
const test = "1. apples are delicious 123";
const testReplace = test.replace("apples", "[$`]");
console.log(testReplace); // 1. [1. ] are delicious 123
// 5. $1, $2, ...
const test = "1. apples are delicious 123";
const testReplace = test.replace(/(\d+)(\D+)/, "$1hello$2");
console.log(testReplace); // 1hello. apples are delicious 123
3. 동적 속성 이름
const dynamic = 'email';
let user = {
name: 'John',
[dynamic]: 'john@doe.com'
}
console.log(user); // outputs { name: "John", email: "john@doe.com" }
ES6에 추가된 유용한 기능 중 하나로 객체의 key를 동적으로 생성 할 수 있습니다. 이런 방식이 없었던 시절에는 아래와 같은 처리가 불가피했습니다.
const dynamic = 'email';
let user = {
name: 'John'
}
user[dynamic] = 'john@doe.com'
console.log(user); // outputs { name: "John", email: "john@doe.com" }
4. Queue
자바스크립트는 라이브러리로 Heap을 제공하지 않습니다. 따라서 Heap을 사용해야 할 때 가 온다면 아래의 코드를 사용하면 좋습니다.
class Queue {
constructor() {
this._arr = [];
}
push(value) {
this._arr.push(value);
}
pop() {
this._arr.shift();
}
isEmpty() {
return this_arr.length === 0;
}
}
const queue = new Queue();
///////성능 문제로 이슈있을 경우 아래와같은 원형 큐 로 변경합니다.
class node {
constructor(val) {
this.value = val;
this.next = null;
}
setNext(n) {
this.next = n;
}
}
class Queue {
constructor() {
this.head = null;
this.tail = null;
this._size = 0;
}
push(node) {
if (this.head == null) {
this.head = node;
} else {
this.tail.next = node;
}
this._size++;
this.tail = node;
}
pop() {
if (this.head == null) return -1;
let returnNode = this.head;
if (this.head != this.tail) this.head = this.head.next;
else {
this.head = null;
this.tail = null;
}
this._size--;
return returnNode;
}
size() {
return this._size;
}
}
5. 배열에서 중복 개수 세기
정말 많이 사용하는 코드중 하나입니다.
여러가지 방법이 있지만 저는 reduce를 많이 사용합니다.
arr.reduce((acc,cur) => {
acc[cur] = (acc[cur] | 0 ) + 1;
return acc
},{})
'정보' 카테고리의 다른 글
[JEST] Mocking (0) | 2023.11.05 |
---|---|
코드리뷰 잘 활용하기 (1) | 2023.10.23 |
Husky, lint-staged 설치 및 사용법 (0) | 2023.09.19 |
ESLint란 무엇이고 어떻게 사용할까? (0) | 2023.07.30 |
CSV 파일이란? (1) | 2023.01.21 |