코딩테스트 기본 숙지 (JS)
작성일 : 2024.11.01
코테 대비 요점 정리
입력값
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const input = fs.readFileSync('input.txt', 'utf8').trim().split(' ').map(Number);
정렬
- 오름차순 정렬
arrA.sort((a, b) => a - b);
- 내림차순 정렬
arrA.sort((a, b) => b - a);
문자열
- 대문자 변환
str.toUpperCase();
- 소문자 변환
str.toLowerCase();
- 숫자->문자열 변환
str.toString(2); //2진수
str.toString(16); //16진수
str.toString(); //10진수 -> 문자열
- 배열 -> 문자열
arr.join(); // -> '1,2,3,4'
arr.join(""); // -> '1234'
arr.join(":"); // -> '1:2:3:4'
- replace : 문자열 대치
s.replace("{{", "");
숫자
- 10진수 -> 2진수
.toString(2)
- 내림, 올림, 반올림
Math.floor(num); //내림
Math.ceil(num); // 올림
Math.round(num); // 반올림
- 루트/제곱
Math.sqrt(num);
Math.pow(num, 2);
- 최대공약수
function gcd(a, b) {
if (b === 0) {
return a;
}
// b를 a로 보내고 a % b를 나눈 나머지를 매개변수 b로 넣어서 재귀함수로써 호출
return gcd(b, a % b);
}
- 최댓값 / 최솟값
Math.max(num1, num2, ...);
Math.min(num1, num2, ...);
- 고정소수점
a.toFixed(2);
배열
- slice -> 시작 인덱스, 종료 인덱스 / 직접 변경X
result = arr.slice(0, 1);
- splice -> 시작 인덱스, 제거 갯수, 삽입 요소 목록
arr.splice(1, 2, 20, 30);
arr.splice(1, 2);
arr.splice(1);
- indexOf : 인덱스 반환
arr.indexOf(2);
arr.indexOf(1, 2); //2번째부터 검색
- concat : 이어붙이기
elements.concat(elements);
- filter : 조건에 맞는 요소 거르기
words.filter((word) => word.length > 6);
- includes : 요소 여부 확인
cache.includes(cities[i]);
- shift : 앞의 요소 추출 / unshift : 앞에 붙이기
arr.shift();
arr.unshift("a");
- some : 조건에 맞는 요소 있는지 확인 / every : 모든 요소가 조건에 맞는지 확인
[5, 10, 15].some((item) => item > 10);
[5, 10, 15].every((item) => item > 10);
- at : 인덱스에 있는 요소 가져오기
stack.at(-1);
- reduce 사용 예시
const sum = numbers.reduce((acc, num) => acc + num, 0); // 다만 성능면에서 많이 저하됨
Set
- Set 객체는 중복되지 않은 유일한 값들의 집합
- 선언 / 확인 / 추가 / 변경 / 삭제
// 선언
const set1 = new Set([1, 2, 3, 4, 4]); // { 1, 2, 3, 4 }
const set2 = new Set("hello"); // { 'h', 'e', 'l', 'o' }
// 갯수
console.log(set1.size);
// 요소 존재 여부 확인
set.has(2);
// 추가
set.add(1);
// 삭제
set.delete(2);
// 일괄 삭제
set.clear();
//순회
for (const value of set) {
console.log(value);
}
Map
- 선언 / 확인 / 추가 / 변경 / 삭제
// 선언
const map1 = new Map([
["key1", "value1"],
["key2", "value2"],
]);
// 요소 갯수
console.log(map1.size);
// 추가
map.set("key1", "value1");
// 조회
map.get("key1");
// 삭제
map.delete("key1");
// 일괄 삭제
map.clear();
// 요소 순회
for (const entry of map) {
console.log(entry);
}
for (const key of map.keys()) {
console.log(key);
}
for (const value of map.values()) {
console.log(value);
}
for (const entry of map.entries()) {
console.log(entry);
}
정규식
- 정규식 사용 함수
console.log(/S/.exec("RegExp Study Start"));
// 결과값 : ["S", index:7, input:"RegExp Study Start"]
console.log(/S/.test("RegExp Study"));
// 결과값 : true
console.log("RegExp Study".match(/Study/));
// 결과값 : ["Study", index:7, input:"RegExp Study"]
console.log("RegExp Study".search(/Study/));
// 결과값 : 6
const reg = /[!@#$%^&*(){}~+=1-9\s]/;
const reg2 = /[^a-zA-Z]/;
reg2.test(letter);
node.match(/[A-Za-z]{2}/);
// 1. 기본 패턴
/\d/ // 숫자 하나
/[0-9]/ // 숫자 하나 (위와 동일)
/[a-z]/ // 소문자 하나
/[A-Z]/ // 대문자 하나
/[가-힣]/ // 한글 문자 하나
// 2. 자주 쓰는 수량자
/\d+/ // 숫자 1개 이상
/\d*/ // 숫자 0개 이상
/\d?/ // 숫자 0개 또는 1개
/\d{4}/ // 숫자 정확히 4개
/\d{2,4}/ // 숫자 2개에서 4개
// 3. 경계
/^문자열/ // 문자열로 시작
/문자열$/ // 문자열로 끝남
/^문자열$/ // 정확히 이 문자열만
// 4. 자주 쓰는 조합
/^\d{4}$/ // 4자리 숫자만
/^[A-Z][a-z]*$/ // 대문자로 시작하는 영어단어
/[^0-9]/ // 숫자가 아닌 문자