목록전체 글 (169)
하다보니
html 파일을 한 줄 씩 읽어가며 실행한다. 자바 스크립트 파일을 head 태그 안에 선언하면 스크립트 파일이 클 경우 시간 소요가 많다. 이것은 좋은 방법이 아니다. body 태그 끝에 스크립트 파일을 두는 것은 사용자가 기본적인 html 파일을 빨리 볼 수 있는 것은 장점이지만 만약에 자바 스크립트에 의존적인 웹사이트라면 정상적인 페이지 출력을 하기까지 시간 지연이 있다는 단점이 있다. async async는 boolean 타입의 값으로 선언만으로 true로 설정이 된다. async가 있으면 html 파싱과 함께 병렬로 자바 스크립트 파일을 다운 받는다. 장점은 js fetching이 html을 parsing하는 동안 일어나기 때문에 다운로드 받는 시간을 절약할 수 있다는 것이고 단점은 html이 ..
BOM이란 무엇인가? 웹 서비스 개발은 브라우저와 밀접한 관련이 있다. 모든 서비스는 웹 브라우저를 바탕으로 실행이 된다. 이 브라우저와 관련된 객체들의 집합을 브라우저 객체 모델(BOM:Browser Object Model)이라고 부른다. 이 브라우저 객체 모델(BOM)을 이용해서 Browser와 관련된 기능들을 구성한다. DOM은 이 BOM 중의 하나이다. 브라우저 객체 모델(BOM)의 최상위 객체는 window라는 객체이다. DOM은 이 window 객체의 하위 객체이기도 하다. DOM이란 무엇인가? 문서 객체 모델(The Document Object Model, DOM)은 HTML, XML 문서의 프로그래밍 interface이다. DOM은 Document Object Model의 약자이다. Doc..
스택이란 한 쪽 끝에서만 원소를 넣거나 뺄 수 있는 자료구조이다. LIFO(Last in First out) 자료구조라고 부른다. 참고로 큐나 덱도 스택처럼 특정 워치에서만 원소를 넣거나 뺄 수 있는 제한이 걸려 있다. 그래서 스택, 큐, 덱을 묶어서 Restricted Structure라고 부르기도 한다. 스택의 성질 원소의 추가 O(1) 원소의 제거 O(1) 제일 상단의 원소 확인이 O(1) 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능 - 스택에서는 제일 상단이 아닌 나머지 원소들의 확인/변경 기능이 제공되지 않는다. STL stack에서도 이 기능은 없다. 스택 구현 스택은 배열 혹은 연결 리스트를 이용해서 구현할 수 있다. 둘 중에서 배열을 이용하는게 구현이 더 쉽다. 원소를 ..
#include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int x; int min = 100; int sum = 0; for (int i = 0; i > x; if (x % 2 != 0) { sum += x; if (x < min) { min = x; } } } if (sum == 0)cout
sort 알고리즘은 헤더파일에 속해있다. sort(start,end)을 이용하여 [start,end) 의 범위에 있는 인자를 오름차순으로 정렬해주는 함수이다. quick sort를 기반으로 함수가 구현되어 있어 평균 시간 복잡도는 nlogn이다. 따로 퀵 정렬을 구현할 필요 없이 C++STL에서 제공해주는 sort함수를 이용하면 편리하게 정렬을 할 수 있다. sort(배열의 시작점 주소,마지막 주소+1) compare() 함수를 만들어 sort()의 세번째 인자 값으로 넣으면, 해당 함수의 반환 값에 맞게 정렬이 동작한다. bool compare(int a, int b) { return a > b; // 내림차순 } sort(a, a+10, compare);
연결 리스트란 원소들을 저장할 때 그다음 원소가 있는 위치를 포함시키는 방식으로 저장하는 자료구조이다. 원소들은 이곳저곳에 흩어져있다. 연결 리스트의 성질 1. k번째 원소를 확인/변경하기 위해 O(k)가 필요함 - 배열과 다르게 공간에 원소들이 연속해서 위치하고 있지 않아서 원소를 순서대로 탐색해야 한다. 2. 임의의 위치에 원소를 추가/제거는 O(1) - 이 성질이 배열과 비교했을 때 큰 차이가있는 성질이고, 연결 리스트의 큰 장점이다. 3. 원소들이 메모리 상에 연속해있지 않아 Cache hit rate가 낮지만 할당이 다소 쉬움 연결 리스트의 종류 1. 단일 연결 리스트 - 각 원소가 자신의 다음 원소의 주소를 들고 있는 연결 리스트이다. 2. 이중 연결 리스트 각 원소가 자신의 이전 원소와 다음..
배열은 메모리 상에 원소를 연속하게 배치한 자료구조이다. 원래 C++에서는 배열을 선언한 뒤에는 배열의 길이를 변경하는 것이 불가능하지만, 자료구조로써의 배열에서는 길이를 마음대로 늘이거나 줄일 수 있다고 생각하겠다. 배열의 성질 1. O(1)에 k번째 원소를 확인/변경 가능 - 배열은 메모리 상에 원소를 연속하게 배치한 자료구조라서 k번째 위치를 바로 계산할 수 있다. 2. 추가적으로 소모되는 메모리의 양(overhead)가 거의 없음 3. Cache hit rate가 높음 4. 메모리 상에 연속한 구간을 잡아야 해서 할당에 제약이 걸림 배열의 연산 - 임의의 위치에 있는 원소를 확인하고 변경하는 연산 O(1) - 원소를 끝에 추가하는 연산 O(1) - 마지막 원소를 제거하는 연산 O(1) - 임의의 ..
fill함수는 어떤 연속성을 띈 자료구조(벡터나 배열 같은)의 시작점부터 연속된 범위를 어떤 값이나 객체로 모두 지정하고 싶을 때 사용하는 함수이다. - 기본구조 #include void fill (ForwardIterator first, ForwardIterator last, const T& val); #include : fill함수를 사용하기 위해 필요한 헤더파일 first: 채우고자 하는 자료구조의 시작위치 iterator last: 채우고자 하는 자료구조의 끝위치 iterator이며 last는 포함하지 않는다! val: first부터 last전까지 채우고자 하는 값으로 어떤 객체나 자료형을 넘겨줘도 템플릿 T에 의해서 가능하다.
캐시란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터에 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근이 가능하다. 무어의 법칙(Moore's law)에 의해 최근까지 CPU의 처리 속도가 급격하게 증가했다. 이에 따라 메모리 접근 속도도 함께 늘어나면 좋았겠지만 그러지 못했다. 따라서 메인 메모리에서 데이터를 가져와 CPU에서 아무리 빨리 처리를 해도 다음 연산에 필요한 데이터가 오는 속도가 너무 느려서 CPU의 성능을 모두 내지 못하였다. 이러한 부분을 극복하기 위해 cache(캐시)가 등장했다. 메..
C/C++에서 배열은 선언 당시 크기가 지정되어야 한다. (고정된 크기의 자료구조) 배열은 일반 변수와 같이 자료형(type)을 먼저 선언하고 배열의 이름을 명시해준 후 대괄호를 사용해서 배열의 크기를 지정해준다. 이때 배열의 크기는 고정된 상수(양의 정수)여야 하며 일반 변수를 지정해 줄 수 없다. 배열 요소의 자료형은 int형을 포함, 모든 기본 자료형(char,double등)을 지원한다. 일반적으로 다음과 같이 선언할 수 있다. int arr[5]; 또한 아래와 같이 크기를 명시해주지 않고 배열의 요소를 모두 정의할 수 있다. int arr[]={1,2,3,4,5,6,7}; 이 경우에는 arr 변수의 크기는 개발자가 직접 명시하지 않아도 자동으로 10으로 지정된다. 또한 배열의 크기를 명시적으로 지..