본문 바로가기

전체 글

(116)
자료구조 - 큐(Queue), 배열로 큐 만들기 큐는 스택과 마찬가지로 데이터를 일시적으로 쌓아 놓은 자료구조입니다. 하지만 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출(FIFO: First In First Out) 인 점이 스택과 다릅니다. 큐 란? 큐(Queue)는 스택과 마찬가지로 데이터를 일시적으로 쌓아 두기 위한 자료구조입니다. 가장 먼저 꺼내는 선입선출 구조로 되어 있습니다. 생활에서 볼 수 있는 큐의 예는 은행 창구에서 차례를 기다리는 대기열이나 마트에서 계산을 기다리는 대기열을 들 수 있습니다. 스택과 마찬기로 큐는 배열을 사용하여 구현할 수 있습니다. 처음이 끝과 연결되었다고 보는 자료구조입니다. 여기서 논리적으로 어떤 요소가 첫 번째 요소이고 어떤 요소가 마지막 요소인지 식별하기 위한 변수가 프런트(front) 와 리어(rea..
[자바스크립트/javascript] 클라이언트 탐지, 기능탐지, 퀵스 탐지 브라우저 제조사들이 공통 인터페이스를 구현하기 위해 노력하긴 하지만 브라우저마다 기능과 단점이 있을 수 밖에 없습니다. 여러 플랫폼에서 동작하는 브라우저는 종종 플랫폼별로, 심지어는 기술적으로 같은 버전인데도 서로 다른 문제를 갖고 있습니다. 이러한 차이 때문에 웹 개발자들은 모든 브라우저에서 공통인 최소한의 기능만 이용하여 디자인하거나 다양한 클라이언트 탐지 방법을 통해 제한점을 우회하여 개발합니다. 클라이언트 탐지는 웹 개발에서 가장 고민이 많은 주제입니다. 모든 브라우저가 공통 기능을 지원한다면 이 주제는 논란거리가 대부분 사라질 겁니다. 브라우저 사이의 차이와 혼란스러운 점이 너무 많아서 클라이언트 탐지는 보험처럼 만약을 대비한 수단일 수도 있지만 개발 전략에서 빼놓을 수 없는 중요 파트입니다. ..
자료구조 - 스택(Stack) , 배열로 스택만들어 보기 스택은 데이터를 일시적으로 저장하기 위한 자료구조로, 가장 나중에 넣은 데이터를 가장 먼저 꺼냅니다. 스택이란? 스택(stack)은 데이터를 일시적으로 저장하기 위해 사용하는 자료구조, 데이터의 입력과 출력 순서는 후입선출(LIFO, Last In First Out) 입니다. (가장 나중에 넣은 데이터를 가장 먼저 꺼냅니다.) 스택에 데이터를 넣는 작업을 푸시(push)라 하고 ,스택에 데이터를 꺼내는 작업을 팝(pop)이라고 합니다. 푸시와 팝을 하는 위치를 꼭대기(top)라 하고, 스택의 가장 아랫부분을 바닥(bottom)이라고 합니다. 스택만들기 스택을 구현하는 프로그램을 만들어 보겠습니다. 스택 본체용 배열: stk 푸시된 데이터를 저장하는 스택 본체의 배열입니다. 인덱스 0인 요소가 스택의 바닥..
자료구조 - 이진 검색(binary search), 시간 복잡도(time complexity), 공간 복잡도(space complexity) 이진 검색법에 대해 알아보겠습니다. 이 알고리즘을 적용하는 전제 조건은 데이터가 키 값으로 이미 정렬(sort)되어 있다는 것입니다. 이진 검색은 선형 검색보다 좀 더 빠르게 검색 할 수 있다는 장점이 있습니다. 이진검색 이진 검색(binary search)은 요소가 오름차순 또는 내림차순으로 정렬된 배열에서 검색하는 알고리즘입니다. 오름차순에서 어떤 수 x를 검색하는 과정을 생각해보 겠습니다. 먼저 배열의 중앙에 위치한 요소부터 검색을 시작합니다. 검색하려는 값이 중앙요소보다 큰 경우 검색 범위 중앙에 위치에서 값을 확인하여 일치하는 값을 찾는 검색입니다. 이진 검색은 검색을 반복할 때마다 검색 범위가 절반이 되므로 검색에 필요한 비교 횟수의 평균값은 log n 입니다. 검색에 실패한 경우는 [ log..
자료구조 - 선형 검색(linear search), 순차 검색(sequential search) 선형 검색 요소가 직선 모양으로 늘어선 배열에서의 검색은 원한는 키 값을 갖는 요소를 만날 때까지 맨 앞에서 부터 순서대로 요소를 검색하면 되는데, 이것이 선형 검색(linear search) 또는 순차 검색(sequential search)이라는 알고리즘입니다. 요솟수가 7개 이고 [ 6, 4, 3, 2, 1, 3, 0 ] 으로 되어 있고 검색을 2로 할 때입니다. import java.util.Scanner; public class SeqSearch { static int seqSearch(int[] a, int n, int key) { int i = 0; while(true) { if ( i == n ) return -1; if ( a[i] == key ) return i; i++; } } publ..
[자바스크립트/javascript] 브라우저 객체 모델 - location, navigator, screen, history 객체 location 객체 location은 BOM에서 가장 유용한 객체 중 하나입니다. location 객체는 현재 창에 불러온 문서 정보와 함께 일반적인 내비게이션 기능을 제공합니다. location 객체는 window의 프로퍼티인 동시에 document의 프로퍼티 입니다. window.location과 document.location은 같은 객체를 가리킵니다. location는 현재 문서에 대한 정보를 갖고 있으며 URL을 파싱해서 몇 가지 조각으로 분리해 각각을 프로퍼티로 저장합니다. 프로퍼티 이름 예 제 설 명 hash "#contents" # 기호 다음에 문자가 오는 형태의 URL 해시, URL에 해시가 없다면 빈 문자열 입니다. host "localhost:8080" 서버 이름과 포트번호입니다. ..
[자바스크립트/javascript] 브라우저 객체 모델, 전역스코프(window), 시스템대화상자(alert, prompt, confirm) 브라우저 객체 모델(BOM)은 정말로 웹에서 사용하는 자바스크립트의 핵심입니다. BOM은 웹 페이지 콘텐츠와 무관하게 브라우저 기능을 노출하는 객체입니다. 제대로 된 명세가 없는 기간이 너무나 길었기에 브라우저 제조사들은 자신들이 원하는대로 확장했고, 이는 많은 문제가 발생하였습니다.브라우저 사이의 공통점이 사실상의 표준이 되고 브라우저 개발 목적은 거의 상호작용성에 치중하게 되었습니다. 이제 HTML5 명세에서 BOM의 주요 부분을 다루며 W3C는 브라우저에서 동작하는 자바스크립트에서 가장 기본적인 부분 중 하나에 대해 표준화 방법을 찾고 있습니다. Window 객체 BOM의 핵심에는 브라우저의 인스턴스인 window 객체가 있습니다.window 객체는 브라우저 창의 자바스크립트 인터페이스 구실을 하고..
[자바스크립트/javascript] 함수 표현식, 클로저 함수 표현식은 자바스크립트에서 가장 강력하면서도 혼란스러운 부분 중 하나입니다. 함수를 선언하는 방법은 함수 선언과 함수 표현식 두가지입니다. 첫 번쨰 방법인 함수 선언은 다음과 같이 function 키워드 다음에 함수 이름을 쓰는 형태입니다. function functionName(arg0, arg1, arg2) { // 함수 본문 } 파이어폭스와 사파리, 크롬, 오페라는 모두 함수에 비표준 프로퍼티인 name을 지원합니다. 이 값은 function 키워드 다음에 쓴 함수 이름과 항상 일치합니다. function functionName(arg0, arg1, arg2) { // 함수 본문 } console.log(functionName.name); // "functionName" 함수 선언에서 가장 뚜렷..