헷갈리는 부분 정리

강원지·2023년 4월 28일
0

코테

완전 탐색 : 모든 경우의 수를 다 계산. 대부분 DFS/BFS 알고리즘.
시뮬레이션 : 문제에서 제시하는 논리나 동작 과정을 코드로 구현.

까먹지 말자!

이차원 배열 초기화

Array.from

유사배열을 얕은 복사를 통해 배열로 만들어주는 메서드

사용방법

1. 
Array.from('Tei');
//["T", "e", "i"]

2.
Array.from([1, 2, 3], x => x + x);
//[2, 4, 6]

이차원 배열 0으로 채우기

let answer=Array.from(Array(col), () => Array(row).fill(0))
//모든 요소가 0인 col x row의 배열이 만들어짐

Array를 Map으로 나타내기

Arr->map 코드

const order=arr.reduce((map,obj,i)=>{
  map.set(obj,i)
  return map
},new Map())

map->Arr

  1. 스프레드 문법
  2. Object->이터레이터 메서드(keys(), values(), entries())
  3. Array.from

두 배열의 비교

배열의 변수에는 참조값이 저장되어 있기 때문에 그 내용이 같아도 다르다고 나온다. JSON.stringify()로 변환 뒤 두 값을 비교하면 된다.

객체의 복사

Object.assign() 메서드(얕은 복사)는 출처 객체들의 모든 열거 가능한 자체 속성(두 번째 인자)을 복사해 대상 객체(첫 번째 인자)에 붙여넣는다. 그 후 대상 객체를 반환합니다.

let arr=Object.assign([], tobuy);
//[ banana: 2, apple: 0, rice: 1, pork: 2, pot: 1 ]

자르기

배열 자르기

arr=[0,1,2,3,4]

splice(start, length,[추가할 요소])
: length만큼 삭제한 부분을 반환, 원본 변형. 원본에는 삭제한 부분에 요소 추가

   new=splice(1,2) //원하는 부분 반환 [1,2] 원본은 [0,3,4]

slice(start,end)
: start, end를 복사해 새로운 배열을 만들어 반환, 원본 유지

	new=slice(idx,idx+2) //new는 원하는 부분 [1,2], 원본유지

문자열 자르기

substr()
: start index부터 length 길이만큼 string을 잘라내어 반환

string.substr(start, length)

substring()
: 잘라내고 싶은 문자열의 start index와 last index를 전달

string.substring(start, end)

slice()
: substring과 유사하나 음수 인덱스가 적용됨(substring은 음수를 0 취급)

string.slice(start,end)

split(쪼갤 단위 조건)
: 조건대로 쪼갠 뒤 그 배열을 반환

이진수 변환

십진수->이진수
dec.toString(2)
이진수->십진수
parseInt(bin,2)

parseInt

parseInt("-3")=>정수 -3 반환

정규식

정규식 메서드

  1. ("문자열").match(/정규표현식/플래그)
    "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환. g 플래그 없이는 첫 번째 매칭만 반환.
  2. ("문자열").replace(/정규표현식/, "대체문자열")
    "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
  3. ("문자열").split(정규표현식)
    "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환
  4. (정규표현식).test("문자열")
    "문자열"이 "정규표현식"과 매칭 결과를 boolean으로 반환
  5. (정규표현식).exec("문자열")
    match메서드와 유사(단, 무조건 첫번째 매칭 결과만 반환)

정규식 기호

. : 모든 문자열
\d : 숫자
\d : 숫자를 제외한 모든 것
\s : space

| : or
[ ] : or 처리 묶음. /abc/=>'abc'를 포함, /[abc]/=>a 또는 b 또는 c를 포함.
[^ ] : 괄호 내 문자 제외
^문자열 : 문자열로 시작
문자열$ : 문자열로 끝남

? : 없거나 최대 한 개 [ab?]=>(blank), ab
* : 없거나 있거나
+ : 최소 한 개 이상
{ n } : n개 반복
{ n, } : n개 이상
{ n,m } : n개 이상 m개 이하

정규식 예제

웹사이트 주소 형식

const text = `http://dogumaster.com http://google_com https://google.com 010-1111-2222 02-333-7777 curryyou@aaa.com`;
const reg = /https?:\/\/[a-zA-Z\-\.\_]+/g;
// /^https?로 정규식을 만들면 text 문자열의 시작 부분만 검사하게 됨
console.log(text.match(reg));

map과 set 객체

set

: 중복되지 않는 값들의 집합

const set=new Set([1,2,3,1,3]);

메서드 : add, has, delete, clear, size

순회 : Set.prototype.forEach메서드를 사용

set 객체는 이터러블이기 때문에 for ..of문으로 순회할 수 있고, 스프레드 문법과, 배열 디스트럭처링의 대상이 될 수도 있다.

map

: 키와 값의 쌍으로 이루어진 컬렉션

const map1 = new Map([['key1', 'value1'], ['key2', 'value2']]);

메서드 : size, set, get, has, delete, clear, 이터레이터 객체 반환 메서드(keys, values, entries)

요소 순회 : Map.prototype.forEach메서드, for ..of문, 스프레드문법, 배열 디스트럭처링

https://velog.io/@dolarge/Java-Script-Set-과-Map#set

for...of

for...of로 순회할 수 있는 대상은 Array, String, Map, Set,DOM컬렉션, arguments이다.
위 이터러블은 스프레드문법을 사용할 수 있다.

tips

시간과 관련된 문제는 분으로 변경해야 계산이 편하다.

요소를 찾을 때 직접 순회하지 않고 indexOf, search, 정규식을 이용하자

0개의 댓글