overist
hack insight
overist
전체 방문자
오늘
어제
  • 전체보기 (32)
    • Tech (2)
      • 알고리즘 (5)
      • ETC (4)
      • 블로그 생성 일지 (4)
    • Insight (14)
      • 인생 로그 (1)
      • 인생 쉽게 사는 법 (7)
      • 지나가는 생각 (4)
      • 미분류 (1)
    • 취미 (1)
      • 클라이밍 (1)

블로그 메뉴

  • 홈

공지사항

  • 블로그 이전 완료

인기 글

태그

  • 컴퓨터 공부
  • 허무주의
  • SSL
  • 실존주의
  • 공부법
  • 초인
  • cloudflare
  • 컴퓨터 공학 공부
  • 트러블슈팅
  • network
  • 정보보안 공부
  • 니체

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
overist

hack insight

Tech/알고리즘

알고리즘 치트시트 (1) - JS 자주 쓰이는 문법들

2022. 12. 21. 09:33

순회

map, forEach

  • Index, Row 사용하는 순회
  • Array전용 메소드
    • 다른 반복과 달리 continue/break 못씀
    • event loop를 통해 새로운 콜백을 넣으며 돌아가므로 Promise, async 동기 코드를 쓸 수 없음
// foreach : for(var i; i<nums.length; i++)를 선언하지 않아도 인덱스 활용 가능.
const nums=[1, 2, 3];
nums.forEach((x, index) => { if(index == 0) return; else num[index]*=num[index] });
console.log(nums); //[1, 4, 9]

// map : foreach와 같지만 return된 요소들을 배열로 반환해줌
const nums=[1,2,3];
const doubleNums = nums.map(x => x * 2);
console.log(doubleNums); //[2, 4, 6]

// 두 반복문은 row(약한복사)를 호출하여 call by reference 가능함
const nums=[1, 2, 3];
nums.forEach((n, index, row) => { row[0] = 0; });
console.log(nums); //[0, 2, 3]

 

for...in

  • 모든 객체에 대해 key 반환 순회, iterate 범용 반복문
  • key를 활용하는 Object에 어울림
  • 다른 반복문과 달리 insertion 순서를 신경쓰지 않기 때문에 반복 도중 순서에 의해 누락되지 않는다.
// Object
const obj1 = {1:'a', 2:'b'}
for (let key in obj1) {
    console.log(key, "=>", obj1[key])
}

// String, Array
for (var i in "asd"){
	console.log(i) // 인덱스 0,1,2 반환
}
for (var i in ["a", "b", "c"]){
	console.log(i) // 인덱스 0,1,2 반환
}

 

for...of

  • Value 반환 순회
  • Array를 Promise, async 동기코드 작성시 주로 활용
  • insertion을 기록하는 String, Array, Map, DOM컬렉션 등 모든 컬렉션이 쓰는 순회, insertion이 없는 Object는 못씀.
const str = "asd"
for (let c of str) {
    console.log(c, "=>", str[c]) // "a", "b", "c";
}

const str = ["a", "b", "c"]
for (let c of str) {
	if (c == "a") continue;
    console.log(c, "=>", str[c]) // "a", "c";
}

 

문자 처리 관련

/* 타입 변환 */
let n = 1234;
let arr = [...n.toString()]; // ['1','2','3','4']
let arr2= [..."1234"]; // ['1','2','3','4']

var result = arr.join(); // "1,2,3,4"
var result = arr.join(''); // "1234"
var result = Number(arr.join('')); // 1234

var word = "asdf asdf".split(' '); // ["asdf", "asdf"]
var word = {..."asdf asdf".split(' ')}; // {0: 'asdf', 1: 'asdf'}

/* 한 글자씩 순회 */
let word = "asdf asdf"
for (const c of word){...}

/* 아스키 */
"a".charCodeAt() // 97
String.fromCharCode('97') // 'a'

/* String 전용 정렬 우선순위 */
let a = "acd"
let b = "bcd"
a.localeCompare(b) // -1 (a가 b보다 우선순위에 있음)
b.localeCompare(a) // 1 (b가 a보다 후순위에 있음

/* 문자 삭제와 탐색 */
"...bcb.asd...".split(".").filter(v=>v!="").join(".");
"FIND_N_COUNT".split("N").length -1;

 

수 처리 관련

/* Math함수 */
Math.abs(n) // 절대값
Math.floor(a/b) // 몫
Math.sqrt(n) // 제곱근 (소수 판별시 활용)
Math.max(a,b) // 큰 값
Math.min(a,b) // 작은 값

/* 진법 변환 */
Number("31").toString(2) // "11111"
Number("31").toString(16) // "1f"
parseInt("11111",2) // 31

/* 비구조화 할당 */
var a = 7;
var b = 2;
[q,m] = [Math.floor(a/b), a%b]; // q=3, m=1

 

배열 처리 메소드

new Set(array)

  • 중복 제거 배열
// set 객체는 iterable, unique한 배열
const duplicated = [1, 2, 3, 1, 2, 3];
const deduplicated = [...new Set(duplicated)];

 

slice, splice

  • slice는 파이썬 슬라이스와 동일
  • splice는 원본을 간섭, slice + split + concat
let arr = [0,1,2,3,4];
arr.slice(-1)[0]; // [4]
arr = arr.slice(0,-2); // [0,1,2]

arr = [0,1,2,3,4];
arr.splice(-2,2,'a'); // return [3,4]
console.log(arr); // [0,1,2,'a']

 

Object - Array - Map 자료형 변환과 value 기준 정렬

  • Map : 삽입 순서를 기억하는 object
// array and object
var obj = {1:1, 2:2, 3:3};
var arr = Object.entries(obj); // [['1',1], ['2',2], ['3',3]]
var obj = Object.fromEntries(arr) // {1:1, 2:2, 3:3}

// array and map
let rate = [0.75, 0.5, 0.7]
let map = new Map();
rate.forEach((v,i) => map.set(i+1, v)); // {1=>0.75, 2=>0.5, 3=>0.7}

// sort with insertion number
var map_to_arr = [...map]; // [[1, 0.75], [2, 0.5], [3, 0.7]]
map_to_arr.sort((a,b) => b-a); // [[1, 0.75], [3, 0.7], [2, 0.5]]

 

filter

  • 순회하며 true 반복된 요소 반환
const sourceArr = [0,1,2,3];
const evenArr = sourceArr.filter((element, index, row) => {
    if (index % 2 == 0) return true;
}); // [0, 2]

 

reduce

  • temp 변수 하나 두고 반복하는 반복문을 편리하게 쓰기 위한 메소드.
    • 배열을 순회하며 합산하는 행위
    • 배열을 다른타입으로 변환하는 행위
    • 콜백함수 다음 initialValue를 입력하여 타입과 초기값을 선언
/* counting */
const sum = [1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator + currentValue;
}); // sum = 10

const sum = [1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator + currentValue;
}, 10); // sum = 20


/* counting with value, 배열타입은 타입초기화 필수 */
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
    (accumulator, currentValue) => accumulator + currentValue.x
    , 0
);

/* array to dict, 배열타입은 타입초기화 필수 */
var dict = ['a','b','c'].reduce(
    (accumulator, currentValue) => {accumulator[currentValue] = 0; return accumulator}
    , {}
) // {'a':0, 'b':0, 'c':0}

 

 

 

 

 

저작자표시 (새창열림)
    'Tech/알고리즘' 카테고리의 다른 글
    • 구현 센스 예제
    • DFS (Depth First Search)
    • BFS (Breadth First Search)
    • 알고리즘 작성 능력의 3단계 (배경지식, 문제해결력, 구현력)
    overist
    overist
    갓생살이를 위한 블로그

    티스토리툴바