본문 바로가기

반응형

Programming Language

[C++] lower_bound & upper_bound STL에서 제공하는 lower_bound와 upper_bound에 대해서 알아보자. LIS(Longest Increasing Subsequence)를 공부하다가 알게 된 개념이다. 필자 개인적으로는 STL에 대해서 잘 몰랐는데, 처음으로 STL이 매우 유용하다는 것을 깨닫게 해준 함수이다. (이를 계기로 계속 STL을 이용하려고 노력중이다) 우선 lower_bound와 upper_bound는 이진 탐색(Binary Search)을 기반으로 탐색하는 함수이다. 따라서 배열이나 리스트, 벡터 등이 기본적으로 정렬이 되어있어야 하고, 시간복잡도는 O(logn)이다. 기본적으로 이진 탐색은 찾고자 하는 원소가 있는지, 있다면 어디에 위치해 있는지를 찾는다면, lower_bound와 upper_bound는 이진 ..
[C++] STL - sort STL에서 제공하는 sort 함수를 알아보자. 우선 sort 함수를 이용하기 위해서는 헤더 파일을 include 해주어야 한다. sort함수는 퀵정렬을 기반으로 하므로 O(nlogn)의 평균 시간 복잡도를 가진다. sort 함수의 형태는 아래와 같다. 1 2 3 4 5 template void sort(T start, T end); //default 오름차순 template void sort(T start, T end, Compare comp); //compare 함수 정의 가능 위처럼 정렬 기준이 되는 함수 (comp) 를 추가하지 않는다면 기본적으로 '오름차순'으로 정렬해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include using namespace std; ..
[C++] STL - 스택(Stack) & 큐(Queue) 우선 스택(Stack)과 큐(Queue)의 기본 원리는 생략한다. STL에서는 스택과 큐를 템플릿 클래스로 제공하고 있다. [Stack] stack은 기본적으로 LIFO구조이며, STL에서는 default로 deque(덱) 컨테이너를 사용한다. 즉, 실제로 내부적으로는 deque 구조로 구현되어 있지만, stack과 같이 이용할 수 있도록 제공하는 것이다. stack container을 이용하기 위해서는 헤더를 include 시켜주어야 한다. 1. stack container 선언(생성자)은 다음과 같다. stack 이름 만약 내부 컨테이너 구조를 바꾸고 싶다면 다음과 같이 선언하면 된다. stack 이름 1 2 3 ..
[C++] 입출력 ( cin / cout ) C++에서 입출력을 수행하기 위해서는 헤더 파일을 이용한다. C에서의 와 동일하다. 1. 출력 (cout) C++에서 출력을 하기 위해서는 cout 함수를 이용한다. C에서의 printf와 같은 역할을 하는데, printf에서는 출력하는 변수의 자료형 (%d , %f 등)을 표현해주어야 했지만, cout은 출력 자료형을 지정하지 않아도 된다. 호출 예시는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 #include using namespace std; int main(void) { int a = 10; cout
[Python] 데이터 입력 받기 (input) [Python] 데이터 입력 받기 (input) 사용자가 입력한 값을 어떤 변수에 대입하고 싶은 경우에, input 함수를 이용한다. input 함수는 입력 받은 데이터를 반드시 '문자열' 로 입력을 받기 때문에 다른 데이터 타입으로 이용하기 위해서는 입력을 받은 변수의 타입을 바꿔주어야 한다. 예시를 통해서 살펴보자. 위의 코드는 a라는 변수에 내가 입력한 값을 할당하는 과정이다. 첫 번째 줄에 a = input( ) 을 수행하면 그 다음에 입력할 수 있는 두 번째 줄로 넘어가게 된다. 그리고 그 줄에 자신이 입력하고 싶은 문자열을 입력한다. 그러면 a에 입력한 문자열이 할당이 된다. 세 번째 줄에서 a를 출력해보면 입력했던 문자열이 나오는 것을 알 수 있다. 다음 예시로는 input안에 문자열을 넣는..