전체 글

CS/자료구조 & 알고리즘

배열과 연결리스트

배열이란? 배열은 연속적인(인접한) 메모리 공간에 저장된, 같은 타입의 데이터들의 모임이다. 가장 기초적인 자료구조. 배열의 연산들 접근 연산 : 항상 O(1) 배열의 접근 연산은 index를 이용하고 이는 random access로, 빠른 속도를 보여준다. 탐색 연산(선형 탐색이라고 가정할 때 배열의 길이에 비례한다. O(n) ) # 선형 탐색 def lenear_search(arr, n, key): for i in range(n): # found if (arr[i] == key): return i # If the key is not found return -1 삽입 연산 : 맨 끝자리에 대한 삽입은 해당 자리를 찾아서 넣기만 하면 끝이다. 즉 접근 연산과 할당 연산 두개이기 때문에 O(1) 이다. 그..

CS/자료구조 & 알고리즘

알고리즘 시간 복잡도 분석

알고리즘을 평가하는 두 가지 주요 기준은 시간과 공간이다. 이 두 요소는 서로 상충하는 경우가 많다. 메모리를 아끼려면 속도를 희생하고, 속도를 높이려면 메모리를 희생하는 식. 통상 더 중요시되는 기준은 시간이다. 프로그래밍 대회를 나가거나 알고리즘을 발명할게 아니라면 대부분 코딩 테스트를 보는 입장에서, 시간 제한을 지키는 것이 문제를 해결하는 것 다음으로 중요한 태스크다.시간 복잡도란?시간 복잡도(time complexity)란 가장 널리 사용되는 알고리즘의 수행 시간 기준으로, 알고리즘이 실행되는 동안 수행하는 기본적인 연산의 수를 입력의 크기에 대한 함수로 표현한 것입니다. 알고리즘의 속도를 비교하는 가장 직관적인 방법은 실제 실행시간 측정이다. 그러나, 이는 알고리즘의 속도를 일반적으로 논하는 ..

CS/자료구조 & 알고리즘

문제 해결 알고리즘!

파인만 알고리즘. 칠판에 문제를 적는다. 골똘히 생각한다. 칠판에 답안을 적는다. 구종만 선생님께서 제시하신 문제해결과정. 문제를 읽고 이해하기백준 알고리즘을 풀면서 정말 많이 느낀 점이다. 입력과 출력 예시가 부족하다고 할 수도 있겠지만, 애초에 ‘문제’를 꼼꼼히 읽었다면 문제를 오해하는 일은 일어나지 않을 것이다.변수의 값, 시간 등 제약조건을 이해하기 위해선 알고리즘 시간복잡도, 공간복잡도 분석과 언어의 값 범위에 대한 이해가 선행되어야 한다.문제에서 나오는 개념이나, 지문에서 묻는 전반적인 요구조건과 제약조건을 일단 이해하자. 문제의 재정의와 추상화…자신이 다루기 쉬운 개념을 이용해서, 문제를 자신의 언어로 풀어 쓰는 것입니다. 이 과정은 문제가 요구하는 바를 직관적으로 이해하기 위해 꼭 필요합니..

language

c언어. 구조체

구조체란구조체(structure)란, 각각 다른 type의 요소들로 구성될 수 있는 데이터이다. 배열과 달리 각 원소들은 이름을 갖고 이름을 통해 접근할 수 있다..굳이 따지자면 파이썬의 dictionary와 비슷하다고 할 수 있다. (실제로 C언어의 struct를 dictionary로 변환하는 파이썬 모듈이 있다고 한다…) 그래서 구조체가 뭔데?결국 struct 은 하나의 데이터 타입이고, int 란 키워드가 데이터타입으로써 여러 곳에 쓰이듯이 struct 키워드도 다양하게 쓰인다. (구조체의 이름을 tag라고 부르는데, 그냥 이름이라고 부르겠다)struct Car { char brand[50]; char model[50]; int year; }; struct Point { int x; int y; }..

language

c언어. 포인터와 주솟값

사람들이 C언어는 무진장 어렵다고 했다. 나도 파이썬과 JS 같은 스크립트 언어만 쓰다가 C언어를 접하는 것이었기에 처음에 겁부터 먹고 책을 폈다. 그런데, 생각보다 다른 언어들과 비슷한 점이 많았다. for, while, if, switch-case, 여러 연산자, 함수와 인자 등. 물론 내부적으로 돌아가는 과정은 상이하겠지만 (최소한 컴파일러 혹은 인터프리터 간의 차이는 있을듯) 일단 확실한건, C언어가 태어난 중심적인 배경은 대부분의 현대적인 언어들과 같다는 것이다. 기본적으로 명령형 언어이다.그러나 확실한 차이점이 있고, 그건 포인터라고 생각한다. (c++도 포인터를 쓴다)주솟값결국 포인터는 메모리 주소값을 저장하는 변수다. 주소값을 이해하는게 곧 포인터를 이해하는거라고 생각한다. 주솟값은 해당 ..

language

JS 스코프와 scope chain

scopescope는 식별자에 대한 유효범위이다. Context vs ScopeThe first important thing to clear up is that context and scope are not the same.Every function invocation has both a scope and a context associated with it. Fundamentally, scope is function-based while context is object-based**. In other words, scope pertains to the variable access of a function when it is invoked and is unique to each invocation. Con..

language

JS 실행 컨텍스트와 콜 스택

엔진은 너의 코드를 어떻게 읽는가?in what order you think the browser will evaluate that code?의사 표현은 내가 어떻게 하느냐 따라 결과가 달라진다. 내 위주로 전달하는 말과 상대방이 이해할 수 있을까 고민한 뒤 전달하는 말은, 처음 품었던 의도는 같을지언정 그 결과가 천차만별이다.자바스크립트는 코드를 이해하는 나름의 원칙이 있다. 코드를 실행하기 전에 무언가를 생성한다는 것. 그게 뭘까?Execution ContextExecution Context 는 자바스크립트의 핵심 개념으로,코드를 실행하기 위해 필요한 환경환경 정보들을 모아놓은 객체동적 언어javascript는 어떤 execution context가 활성화되는 시점에 선언된 변수들을 위로 끌어올리고(..

CS/자료구조 & 알고리즘

추상 자료형과 알고리즘, 의사 코드

추상 자료형? 학교에서 자료구조 & 알고리즘 수업을 들으면서 추상 자료형(Abstract Data Type, ADT)이라는 개념을 알게 됐다. 언어에서 제공하는 원시 타입(primary type)들로는 해결이 어려운 문제들이 있다. 그럴 땐 기존의 원시 데이터 타입을 응용해서 새로운 자료 구조를 만들어야 하는데, 자료 구조를 만드는 방법은 상황마다, 언어마다 다양하다. 추상 자료형은 어떤 자료형을 값과 연산들의 집합으로 정의한 것이다. 구체적인 언어나 명령어가 아닌 한 단계 추상적으로 구현 방법을 설명한다. 구현에 의존하지 않는다. 즉, 추상 자료형은 how(구체적인 구현 방법)가 아닌 what(집합과 연산들의 목록)을 추상적으로 명시해놓은 것이다. 음식 레시피와 같다. 내가 어떤 환경(어떤 프라이팬을 ..

zorbathegeek
쓰기 전에 생각하자