
C++ 의 reference는 1. 이미 존재하는 변수의 2. 메모리 주소를 저장한다.(포인터처럼) 이미 존재하는 대상의 주소를 그 녀석의 다른 이름으로 사용되는 것인데, 도입된 이유는 할당이 일어나는 상황에서(함수의 인자로 넘겨지는 경우도 포함하여) 메모리 문제와 관련 있다. C/C++ 에서는 할당의 기본이 Call-by-Value 이다. 쉽게 말해 원본이 아닌 카피본을 쓴다는 뜻이다. 어떤 타입을 aType 이라 하자. (int, double 처럼 제공되는 타입이든 사용자 정의든 상관없다.) aType x=a; 위의 평범한 할당문은 a 라고 이름 붙은 메모리의 내용을 x 라고 이름 붙은 메모리로 복사한다. 이후 메모리 a,x 에는 같은 정보가 기록되어 있을 뿐 서로 영향을 주지 않는다. a 를 변경하..

python3에는 이미 %-formatting 과 str.format( )이 있었다. 그런데 둘 모두 스트링 끝에 치환해야할 값을 따로 열거하는 방식(C-style)이다보니, 치환해야할 값이 많아지면 가독성이 떨어지고 매칭할 개수를 실수할 여지가 많았다. 치환해야할 자리에 바로 변수를 입력하는 방식이 적용된 것이 f-string 이다. 1. 형식 스트링 앞에 'f' 또는 'F'를 붙이고 치환되어야 할 자리를 {variable_name} 으로 하면 된다. 조금 더 게을러져 보자. 위의 예에서 name 값 앞에 '이름 : ' 을 붙이는 것도 귀찮다면 { } 안에서 변수명 뒤에 '='를 사용하면 변수명을 문자로 출력하고 값도 출력해주는 기특한 짓을 한다. 2. 제한 (1) f-string 의 치환 영역 { }..

1. Header Set header 에는 'set' 과 'multiset', Map header 에는 'map' 과 'multimap' 이 정의되어 있다. 4개의 컨테이너를 동시에 다루는 이유는 (1) 모두 균형잡힌 이진트리(Red-Black Tree)로 구현되었으며 (2) method 가 거의 동일하기 때문이다. 모든 method 를 다루지는 않는다. 많이 쓰이는 method 들을 '생성->순회 or 탐색 -> 제거 -> 정리' 순서로 정리해 보자. 2. Construction (1) insert method 를 이용하여 하나씩 삽입하는 것이 직관적인 방식일 것이다. int arr[]={6, -5, 3, 11, -1}; set s1; map m1; for(int i=0;i

container 들의 모든 멤버들을 한꺼번에 열거하는 것은 경험상 별 도움이 안된다. 많은 요소들을 가진 저장소를 어떻게 이용할 것인가에 집중해보자. ⚙️ 모든 컨테이너에 공통되는 것부터 1-1. 저장소이니 얼마나 많이 저장하고 있는가를 알고 싶다. -> container.size( ) 1-2. 혹시 비어있나? -> container.empty( ); 1. vector 와 deque vector와 deque 모두 순차 접근을 기본으로 한다. 순차 접근 컨테이너를 둘로 만든 이유는 다음과 같다. vector는 대충 배열을 이용한다고 생각하면 되는데, 알다시피 배열은 앞 부분의 원소를 추가하는데 비용이 많이 든다. 그래서 선두에 추가, 삭제가 잦은 상황에 더 효율적으로 대응하기 위한 container가 d..

가장 중요한 함수를 가장 늦게 다루게 되었다. 잠시 옆길로 새서 '함수'라는 용어에 대해 생각해 본다. 프로그래밍 언어의 '함수(函數)' 는 수학의 '유리수'와 더불어, 이공계 용어를 번역하면서 발생한 대표적인 오역의 사례이다. 영어 사전을 보면 function 은 '기능(동작)'의 뜻이 먼저 등장하고 다음으로 수학 용어로서의 '함수'가 등장한다. 그런데 수학의 함수는 (1) 정의역의 원소인 입력값이 반드시 주어지고 (2) 그에 대응되는 공역의 원소인 유일한 결과값이 반드시 있어야 한다. 그에 반해 프로그래밍 언어의 함수는 위의 조건 중 어떤 것도 충족시킬 이유가 없다. 그럼에도 최초에 C 언어에서 'function'을 번역한 사람이 이공계 전공자였을 테니, 아마도 '기능(동작)'으로 번역되는 편이 자연..

1. JSON 이란? JSON 은 JavaScript Object Notation 의 약어이고 Object Literal 을 스트링으로 표현한 것이다. 따옴표로 둘러싸인 JSON 의 표현과 일반적인 Object Literal 과의 차이점을 알아 보자. 1. 속성명은 반드시 큰 따옴표를 사용해야한다. (must be double-quoted) 2. 함수는 값으로 인정되지 않는다. 또한 값으로 사용된 스트링도 큰 따옴표만 허용된다. 주의하자. 다른 곳에서는 작은 따옴표와 큰 따옴표를 구별하지 않는 JavaScript 특성상 자주 실수를 하곤 했다. 현재는 아예 모든 스트링은 큰 따옴표를 사용하고 있다. 간단한 예를 하나 보자. const test='{ "name" : "mathtrauma", "age" : ..

1. 속성 존재 확인 객체는 여러 가지 정보를 모아둔 container 역할을 기본으로 한다. 따라서 내부에 어떤 정보가 있는지 확인할 수 있어야 한다. let obj = { id : 'trauma', test(){ console.log('Hi!'); } }; 1. 객체에 속성이 정의되지 않았다면 undefined 일 것이다. 이를 이용해서 특정 속성이 객체에 존재하는지 확인할 수 있다. 2. 우아하게 ' in ' 연산자를 이용해서 같은 일을 할 수 있다. obj.id !== undefined //true 'id' in obj; // true obj.address !== undefined //false 'address' in obj; //false 2. Object.hasOwnProperty( ) 'ha..

JavaScript에는 7 가지 자료형(data type) 이 있고 Object 를 제외한 6 가지는 primitive type 임을 언급했었다. 현재 얼렁뚱땅 6 가지 primitive 는 살펴보았고 Object 의 일종이지만 독립적으로 Array 도 다루었다. 이제 Object 에 대해서 기초적인 내용들을 정리해 보자. 1. 생성 앞서 다른 모든 타입처럼 constructor 를 이용한 생성과 literal 생성이 있다. 다음의 두 코드는 모두 빈 Object 를 생성한다. let obj = new Object(); let obj = { }; 사실 문법 공부할 때를 제외하면 constructor 로 생성해 본 적이 없고, 권장되지도 않는 듯하다. 이 글의 제목에서 알 수 있듯이 여기서는 Object ..
- Total
- Today
- Yesterday
- javascript array
- BOJ
- Vim
- RUBY
- math font
- persistent segment tree
- stack
- 정수론
- fenwick tree
- 세그먼트 트리
- JavaScript
- map
- max flow
- number theory
- script
- Dijkstra
- bash
- segment tree
- Shell Programming
- nearest common ancestor
- python3
- shell
- bash script
- Reference
- 백준
- 다익스트라
- lazy propagation
- Aho-Corasick
- C++ big number
- dynamic programming
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |