본문 바로가기

Language

(105)
[Javascript] 함수 표현식, 화살표 함수(arrow function) 함수 선언문 vs 함수 표현식 함수 선언문 : 어디서든 호출 가능 실행 전 초기화 단계에서 코드의 모든 함수 선언문을 찾아서 생성해놓는 호이스팅(hoisting) 때문이다. sayHello(); function sayHello(){ console.log('Hello'); } 함수 표현식 : 코드에 도달하면 생성 let sayHello = function(){ console.log('Hello'); } sayHello(); 화살표 함수(arrow function) 화살표 함수로 함수를 보다 간결하게 작성할 수 있다. let add = function(num1, num2) { return num1 + num2; } 위 함수를 화살표 함수로 바꾸면 let add = (num1, num2) => { return..
[Javascript] var, let, const의 차이 - 호이스팅, TDZ, scope var과 let의 차이점 var은 한 번 선언된 변수를 다시 선언할 수 있다. var name = 'Mike'; console.log(name); // Mike var name = 'Jane'; console.log(name); // Jane let은 한 번 선언된 변수를 다시 선언할 수 없다. let name = 'Mike'; console.log(name); // Mike let name = 'Jane'; // error! console.log(name); var는 선언하기 전에 사용할 수 있다. var로 선언된 모든 변수들은 코드가 최상위로 끌어올려진 것처럼 동작하기 때문이다. 이를 호이스팅(hoisting)이라고 한다. 선언은 호이스팅되지만 할당은 호이스팅 되지 않기 때문에 undefined가 출..
[C++] STL - 정렬 알고리즘 함수 (sort, stable_sort, binary_search) 정렬 알고리즘 함수는 컨테이너의 지정된 범위의 요소들이 정렬되도록 컨테이너를 변경하는 함수이다. 모든 정렬 알고리즘 함수는 올바른 정렬을 위해 임의 접근 반복자를 사용한다. 따라서 임의 접근이 가능한 컨테이너만이 사용할 수 있다. sort() #include // < 를 이용한 비교 (1) template void sort(RandomIt first, RandomIt last); // 비교 함수 (comp) 를 이용한 비교 (2) template void sort(RandomIt first, RandomIt last, Compare comp); first부터 last 전까지의 원소들을 오름차순으로 정렬한다. first와 last는 임의 접근 반복자여야 한다. 따라서 list의 경우 sort 함수로 정렬할..
[C++] STL - 변경 알고리즘 함수 (copy, swap, transform, next_permutation) 변경 알고리즘 함수는 컨테이너를 변경하지 않으며, 컨테이너의 지정된 범위에서 요소의 값만을 변경할 수 있는 함수이다. STL에서 제공하는 대표적인 변경 알고리즘 함수에는 copy(), swap(), transform()이 있다. copy() #include template OutputIt copy(InputIt first, InputIt last, OutputIt d_first); first부터 last 전까지의 모든 원소들을 d_first부터 시작하는 곳에 복사한다. swap(), swap_range() #include template void swap (T& a, T& b) swap의 경우 해당 변수에 있는 값들을 서로 바꿔주는 역할을 한다. #include template< class Forward..
[C++] STL - 읽기 알고리즘 함수 (find, for_each) STL의 목적은 일반적인 알고리즘에 대한 효율적인 구현을 제공하는 것이다. 따라서 STL은 이러한 알고리즘을 STL 알고리즘 함수나 STL 컨테이너의 멤버 함수를 사용하여 구현하고 있다. STL 알고리즘은 기능별로 다음과 같이 구분할 수 있다. 읽기 알고리즘 (algorithm 헤더 파일) 변경 알고리즘 (algorithm 헤더 파일) 정렬 알고리즘 (algorithm 헤더 파일) 수치 알고리즘 (numeric 헤더 파일) 이 글에서는 읽기 알고리즘 함수에 대해 알아보자. 읽기 알고리즘 함수는 컨테이너를 변경하지 않으며, 컨테이너의 지정된 범위에서 특정 데이터를 읽기만 하는 함수이다. STL에서 제공하는 대표적인 읽기 알고리즘 함수에는 find(), for_each()가 있다. find() #includ..
[C++] STL - pair, tuple pair은 두 객체를 하나의 객체로 취급할 수 있게 묶어주어 데이터 쌍 역할을 한다. #include 헤더 파일에 존재하는 STL이지만 algorithm, vector과 같은 헤더파일에서 이미 include 하고 있기 때문에 따로 utility를 include 하지 않아도 사용 가능하다. 변수 선언 값을 할당하는 방법은 다음 3가지 중 선택 pair p1; p1.first = 10; p1.second = 'c'; pair p2; p2 = make_pair(40, 30); pair p3; p3 = {1, "sample"}; pair 값 참조 pair에 저장된 데이터를 불러오려면 순서대로 .first와 .second를 사용한다. tuple은 pair의 확장 버전이라고 생각하면 된다. 2개 이상의 값을 하나로..
[C++] cout, cin 실행 속도 높이기 (시간 초과 해결법) printf, scanf를 사용했을 때 A/C를 받았지만 cout, cin을 사용했을 때 시간초과가 나는 경우가 있다. 이는 cout, cin이 printf, scanf보다 실행 속도가 느리기 때문에 발생한다. 평소에는 시간 차이가 별로 없지만 입력이나 출력이 몇 십만 정도로 많아지면 시간이 크게 차이나게 된다. cout과 cin의 속도를 빠르게 하기 위해서는 아래 코드를 추가해 주면 된다. ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false); ios::sync_with_stdio는 cpp의 iostream을 c의 stdio와 동기화시켜주는 역할을 한다. iostream, stdio의 버퍼를 모두 사..
[C++] STL - 컨테이너 어댑터(container adapter) [stack, queue] stack 스택 컨테이너는 vector 클래스를 기반으로 한다. 스택의 메모리 구조는 LIFO(Last In First Out)를 따르는 자료구조이다. DFS(Depth First Search, 깊이 우선 탐색)나 특별한 알고리즘이 필요한 상황이 아니라 문제 상황을 구현하는 데 LIFO의 구조를 가지고 있다고 판단되는 문제를 풀 때 사용된다. #include stack 스택명; 스택의 멤버함수를 확인하면 다음과 같다. s.size() : s의 원소의 개수를 반환(메모리 용량이 아님) s.empty() : s가 비어있는지 확인, 비어있으면 true를 반환한다. s.top() : s의 제일 위에 위치한(제일 나중에 저장된) 원소를 반환 s.push(x) : s에 x값을 저장 s.pop() : s의 제일 위에..