자바스크립트 17

Multiple Pointers - countUniqueValues(고유값세기 - 다중포인터)

문제 Implement a function called countUniqueValues, which accepts a sorted array, and counts the unique values in the array. There can be negative numbers in the array, but it will always be sorted. 정렬이 되어있는 배열에서 고유의 값들의 갯수를 세는 함수를 실행하라. 배열에는 음수가 있을 수 있으나 항상 정렬이 되어있다. Examples: countUniqueValues([1,1,1,1,1,2]) // 2 countUniqueValues([1,2,3,4,4,4,7,7,12,12,13]) // 7 countUniqueValues([]) // 0 count..

Frequency Counter - validAnagram(빈도수 세기 - 애너그램)

문제 Given two strings, write a function to determine if the second string is an anagram of the first. An anagram is a word, phrase, or name formed by rearranging the letters of another, such as cinema, formed from iceman. 두 개의 문자열이 주어지고, 두번째 문자열이 첫번째 문자열의 애너그램인지 결정하는 함수를 만들어라. 애너그램은 iceman에서 만들어진 cinema처럼 문자을 재배열한 단어 혹은 구문입니다. Examples: validAnagram('', '') // true validAnagram('aaz', 'zza') // f..

빅오(Big O) 표기법이란?

빅오 표기법 시간복잡도 : 컴퓨터가 계산하는 횟수 공간복잡도 : 변수가 차지하는 공간 빅오표기법을 활용한 여러 알고리즘을 공부해야하는 이유 -> 목적 : 결과만 같으면 되는가? 아니, 같은 문제에 대해 1시간이 걸릴수도 있고 30분이 걸릴 수도 있다. 이 점에 집중한다. 빅오를 이해하면 비효율적인 코드를 찾는 데 도움이 된다. 좋은 코드는 빨라야하고, 메모리 사용이 적어야하고, 읽기 좋아야한다. 1. 속도는 (시간복잡성) -> 기기 사양에 따라 다를 수있다. 같은 머신이어도 다른 시간이 걸릴 수 있다. 코드 시간만 측정하는 건 좋지 않다. -> 컴퓨터가 해야하는 연산의 갯수가 중요하다? 2n 이든 5n+2든 정확한 숫자와는 사실 상관이 없다. 전체적인 추세가 중요하다. 2. 메모리 사용은? (공간복잡성)..

만들 때마다 고민하게 되는 함수 이름 🤧

데이터의 기본적인 처리기능인 CRUD(Create, Read, Update, Delete)기준으로 만들어봤다! 정답은 없고, 그냥 개인적으로 고민될 때 참고하면 좋을 것 같아서 작성했다. 1. 보여주기 - 읽기 showName() displayName() renderName() paintName() readName() 2. 입력하기 - 생성 createName() registerName() addName() 3. 수정하기 - 갱신 updateName() modifyName() changeName() editName() 4. 삭제하기 - 삭제 deleteName() removeName() destroyName() 5. 단순 확인용 findName() checkName() isName()

var, let, const 제대로 알기

var는 함수 레벨 스코프(Function-level scope) 함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다. let과 const는 블록 레벨 스코프(Block-level scope) 모든 코드 블록(함수, if 문, for 문, while 문, try/catch 문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다. 1. var 아래와 같이 블록 내에 선언해도 foo는 전역변수여서 값이 재할당된다. var foo = 123; // 전역 변수 console.log(foo)..

함수 선언문과 함수 표현식 차이

함수 선언문 (Function Declaration) 어디서든 함수에 접근 가능(스크립트 실행 준비단계에서 전역에 선언된 함수 선언문을 찾아 해당 함수를 생성하기 때문) 그래서 코드 구성이 더 자유로움 sum(2, 3); function sum(a, b) { return a + b; } 엄격 모드에서 함수가 선언된 코드 블록 안에서만 유효 let age = 16; if (age < 18) { welcome(); // \ (실행) // | function welcome() { // | alert("안녕!"); // | 함수 선언문은 함수가 선언된 블록 내 } // | 어디에서든 유효합니다 // | welcome(); // / (실행) } else { function welcome() { alert("안녕하..

콜백 함수 쉽게 이해하기

함수의 인수로 함수를 전달하고, 이 인수로 전달한 함수를 "나중에 호출(called back)" 하는 것 말로 풀면 이해가 안 될 수 있으니, 예시를 보도록 하자. function quest(question, yes, no) { if (confirm(question)) yes()동의 else no();//미동의 } function showAgree() { alert( "동의하셨습니다." ); } function showDisagree() { alert( "미동의 버튼을 누르셨습니다." ); } // 사용법: 함수 showOk와 showCancel가 ask 함수의 인수로 전달됨 quest("동의하십니까?", showAgree, showDisagree); 함수 quest의 인수로, 함수 showAgree와 ..

null 병합 연산자 '??'와 '||' 의 차이

* 2021.05.20 스펙에 추가된 지 얼마되지 않아 폴리필이 필요함! ' || '는 첫번째 truthy 값을 리턴한다. a가 참이면 a 리턴, 아니면 b 리턴한다. null || '1'// '1' undefined || '1'// '1' '1' || null// '1' 0 || '1'// '1' ' ?? '는 첫번재 정의된(defined) 값을 리턴한다. a가 null이나 undefined 이면 b리턴, 아니면 a 리턴 null ?? '1'// '1' undefined ?? '1'// '1' '1' ?? null// '1' 0 ?? '1'// 0 // 0은 falsy하기때문에 '1'이 리턴될 것 같지만, null도 undefined 도 아니기 때문에 0을 리턴한다. '??' 는 truthy/falsy..

자주 헷갈리는 null과 undefined 비교 연산자로 알아보기

1. 문자열끼리 비교 (유니코드) - 문자열 중에서 앞에서 부터 순서대로 비교하게된다.(사전순) - 소문자의 유니코드 값이 기본적으로 크다. alert( 'Z' > 'A' ); // true, 'Z'가 'A'보다 유니코드 값이 큼 alert( 'Glow' > 'Glee' ); // true, 'o'는 'e'보다 유니코드 값이 큼 alert( 'Bee' > 'Be' ); // true, 'e'는 빈 값 보다 유니코드 값이 큼 2. 다른 형을 가진 값 간의 비교 - 비교하려는 값의 자료형이 다르면, 값 들을 숫자형으로 바꿔 비교하게된다. alert( '2' > 1 ); // true, 문자열 '2'가 숫자 2로 변환된 후 비교가 진행됩니다. alert( '01' == 1 ); // true, 문자열 '01'..

자바스크립트 레퍼런스 타입(참조타입) 이해하기

Object와 Array의 경우 레퍼런스 타입이어서 아래와 같이 값이 복사되는 것 같지만 그렇지 않다. // 변수 person과 person의 value는 각각 저장됨. const person = { name: 'Max' } const secondPerson = person; // 값을 그대로 복사하는 것 같지만, secondPerson이 person의 value를 가르키게 됨(포인터 값) person.name= 'Ginny'; console.log(secondPerson); // { name : 'Ginny' } // secondPerson는 동일하게 person의 value의 값을 가르키고 있으므로 영향을 받아 위와 같이 찍힘 별도의 person과 별개의 secondPerson을 만들기 위해서는 아래..