하늘 속의 라이브러리
C
-
C언어 - 자료형(Data Type)
자료형(Data type)은 컴퓨터에 저장된 데이터를 구분하기 위한 형식으로, 데이터의 종류와 크기에 따라 분류되어 있습니다. 또한 불필요한 메모리 공간 소모를 줄이고 효율적인 코딩을 위하여 같은 형태일지라도 바이트(byte) 단위로 구분되어 있습니다. 만약 할당된 바이트 범위를 벗어난 값을 할당하게 되면, 오버플로우(overflow)가 일어나 다른 값이 저장됩니다. C언어에서는 변수를 선언할 때 아래와 같이 자료형을 같이 지정해주는 방식을 사용합니다. #include int main() { int a = 10; // int 형에 대입연산자 '='를 사용하여 값을 대입 int b = 2147483648; // int 형 범위를 벗어나 오버플로우 발생 // 변수에 값을 저장할 때는 변수가 항상 왼쪽! //..
2023.04.03
-
C언어 - 반복문(while문)
while문은 C언어의 반복문 중 하나로서, for문에 비해 조건이 복잡하거나 조건에 따라 반복해야 하는 횟수가 달라질 때 주로 사용됩니다. 이 글에서는 for문의 기본 문법과 작동 원리에 대해 알아보고, 간략하게 사용법을 보여드리겠습니다. while문의 기본 문법 while문은 아래와 같이 조건식으로만 이루어집니다. 하지만, while문이 루프에 빠지지 않기 위해서는 초기식과 증감식도 작성하는 것이 좋습니다. while문은 조건식의 내용이 참인 경우 중괄호 내의 명령어들을 수행하고 다시 조건식으로 돌아와 판단하며, 이 과정을 조건식이 참이 아닐 때까지 반복합니다. #include int main() { // while(조건식) {} 10) // i가 10을 초과하면 while문 종료 break; pri..
2023.03.21
-
C언어 - 반복문(for문)
for문은 C언어의 반복문 중 하나로서, while문에 비해 조건이 단순하거나 반복해야 하는 횟수가 정해져있을 때 주로 사용됩니다. 이 글에서는 for문의 기본 문법과 작동 원리에 대해 알아보고, 간략하게 사용법을 보여드리겠습니다. for문의 기본 문법 for문은 아래와 같이 초기식, 증감식, 조건식으로 구성됩니다. 경우에 따라 식을 생략할 수도 있지만, 의도치 않은 문제가 발생할 수도 있습니다. #include int main() { // for(초기식; 조건식; 증감식) {}
2023.03.13
-
C언어 - 기본 입출력
프로그래밍 언어를 익힐 때 보통 특정 값을 입력받고 그대로 출력하는 것을 가장 먼저 접하게 됩니다. 대부분의 언어에서 입출력을 구현할 수 있어야 가장 기초적인 프로그램을 만들 수 있기 때문입니다. 이 글에서는 C언어의 기본 입출력 함수인 scanf 함수와 printf 함수에 대해 알아보고, 간략하게 사용법을 보여드리겠습니다. 입출력 함수를 불러오기 위한 준비 C언어에서는 다양한 헤더 파일들에 함수들이 담겨있는데, 입출력 함수는 stdio.h라는 헤더 파일에 포함되어 있습니다. stdio는 Standard Input Output의 약어로서, 표준 입출력에 관한 함수들이 담겨 있습니다. 따라서 입출력 함수를 사용하기 위해서는 아래와 같이 헤더 파일을 명시해주어야 합니다. #include // standard..
2022.12.29
C++ STL
-
C++ STL multiset
멀티셋(multiset)은 연관 컨테이너에 포함되며, 기본적으로 set과 거의 동일하지만 키(key)의 중복을 허용한다는 차이점이 있습니다. multiset 컨테이너를 사용하기 위해서는 set과 동일하게 헤더를 포함해야 하고, 선언할 때는 컨테이너에 들어갈 원소의 타입을 명시해주어야 합니다. 사용자의 편의에 따라서 정렬 방식을 선언할 때 정할 수도 있습니다. #include std::multiset ms1; std::multiset ms2; -std::multiset s; 와 int key; 로 선언되어 있다고 가정합니다- 1) 삽입과 삭제 ms.insert(key); -> multiset에 원소 key를 삽입합니다. 원소는 정렬 방식에 따라 자동적으로 정렬되어 저장되며, key가 중복되어도 순차적으로 ..
2023.04.02
-
C++ STL priority_queue
우선순위 큐(priority queue)란 선입선출식(FIFO, First In First Out)으로 작동하는 일반적인 큐(queue)와는 다르게, 우선순위가 높은 원소 순으로 나가게 됩니다. (자세한 원리는 자료구조의 힙을 참조하시면 이해하기 쉽습니다.) C++에서 우선순위 큐 컨테이너는 헤더 안에 있기 때문에 큐와 마찬가지로 헤더를 포함해야 합니다. 우선순위 큐를 선언할 때에는 기본적으로 컨테이너에 들어갈 원소의 타입을 명시해야 하며, 우선순위 큐의 컨테이너와 비교변수도 명시할 수 있습니다. (명시하지 않을 경우 기본적으로 내림차순으로 정렬됩니다.) char나 string 타입의 경우 기본적으로 아스키코드값에 따라 정렬되며, 아래에서 소개할 비교변수 생성을 통하여 임의로 정렬할 수 있습니다. #in..
2023.03.27
-
C++ STL list
C++에서의 list(리스트)는 시퀀스 컨테이너 중 하나로서, 노드를 기반으로 한 이중 연결 리스트(doubly linked list)로 구현되어 있습니다. 리스트는 원소들의 삽입과 삭제가 용이하며(시간복잡도가 O(1)입니다.), 따라서 vector에 비해 원소를 수정하거나 삭제하는 경우가 많을 때 주로 사용됩니다. 리스트는 특성 상 임의적 접근이 불가능하며, STL의 sort함수도 사용할 수 없는 대신, 자체적으로 정렬을 지원하는 멤버함수들을 가지고 있습니다. list 컨테이너를 사용하기 위해서는 아래와 같이 헤더를 포함해야 하고, 선언할 때는 컨테이너에 들어갈 원소의 타입을 명시해주어야 합니다. #include std::list l; // namespace std 사용 시 std 생략가능 기존에 사용..
2023.03.23
-
C++ STL queue
C++에서의 queue(큐)는 시퀀스 컨테이너 중 하나로서, 선입선출(FIFO, First In First Out) 구조를 가집니다. 따라서 원소가 들어온 순서대로 순차적으로 나가게 됩니다. queue 컨테이너를 사용하기 위해서는 아래와 같이 헤더를 포함해야 하고, 선언할 때는 컨테이너에 들어갈 원소의 타입을 명시해주어야 합니다. #include std::queue q; // namespace std 사용 시 std 생략가능 -std::queue q; 와 int element; 로 선언되어 있다고 가정합니다- 1) 삽입과 삭제 q.push(element); -> queue에 원소 element를 추가합니다. q.pop(); -> queue의 가장 앞에 있는 원소를 제거합니다. 2) 원소 참조 q.fron..
2023.02.21
-
C++ STL stack
C++에서의 stack(스택)은 시퀀스 컨테이너 중 하나로서, 후입선출(LIFO, Last In First Out) 구조를 가집니다. 따라서 가장 먼저 들어온 원소가 마지막으로 나가고, 마지막으로 들어온 원소가 가장 먼저 나가게 됩니다. stack 컨테이너를 사용하기 위해서는 아래와 같이 헤더를 포함해야 하고, 선언할 때는 컨테이너에 들어갈 원소의 타입을 명시해주어야 합니다. #include std::stack s; // namespace std 사용 시 std 생략가능 -std::stack s; 와 int element; 로 선언되어 있다고 가정합니다- 1) 삽입과 삭제 s.push(element); -> stack에 원소 element를 추가합니다. s.pop(); -> stack의 가장 상단에 있는..
2023.01.24
이산수학
-
이산수학 - 순열과 조합
/*아직 미완성된 글이므로 부족한 점이 많을 수 있습니다.*/ 순열$(Permutation)$이란? -서로 다른 원소의 집합에서의 순열이란 원소들의 순서적인 배열을 의미합니다. -집합의 원소 일부를 이용하여 순서를 고려하여 배열을 만들 수 있는데, 이 때 $r$개의 원소를 나열하는 것을 $r-$순열이라고 합니다. -$n$개의 서로 다른 원소로 이루어진 집합에서의 $r-$순열은 $_{n}\textrm{P}_{r}$ 또는 $P(n, r)$과 같이 나타내며, 순열의 개수는 $P(n, r) = n(n - 1)(n-2)$ ... $(n - r + 1) = \frac{n!}{(n - r)!}$입니다. -KBO리그에서 포스트시즌에 진출할 5팀의 순위를 배치할 수 있는 방법은 모두 몇 가지인가? 풀이: 2022년 KB..
2022.12.09
-
이산수학 - 계수
계수란? -이산수학에서 계수란 특정 성질을 갖는 사물의 수를 세는 것을 말합니다. 계수를 다룰 때에는 아래와 같이 기본적인 원리들을 적용할 수 있습니다. -곱셈 법칙은 어떤 작업을 수행할 때, 작업을 연속된 두 가지 방법 A와 B로 나눌 수 있다고 가정합니다. 방법 A의 수가 $n_{1}$개, 방법 B의 수가 $n_{2}$개 존재할 때, 전체 과정을 수행하는 경우의 수는 $n_{1} \times n_{2}$개가 존재합니다. -곱셈 법칙은 하나의 작업이 여러 개의 독립적인 작업들로 구성되어 있을 때 적용할 수 있습니다. -원소가 $m$개인 집합 $M$으로부터 원소가 $n$개인 집합 $N$으로의 함수는 몇 개인가? 풀이: 함수는 정의역에 있는 원소 각각에 대해서 공역에 있는 원소 중 하나를 선택하는 것이다...
2022.12.08
-
이산수학 - 그래프 이론 기본
그래프란? -그래프는 정점과 정점들을 잇는 모서리들의 집합이며, 보통 정점은 원으로, 모서리는 선이나 화살표로 표현합니다. -그래프 $G$가 존재할 때, 정점의 집합(개수)를 $V$(vertext), 모서리의 집합(개수)를 $E$(edge)로 나타내고 $G = (V,E)$와 같이 표기합니다. 그래프의 종류 비방향 그래프 -정점 사이를 연결하는 모서리에 방향성이 존재하지 않는 그래프이다. 방향 그래프 (Directed Graph) 완전 그래프 (Complete Graph) -서로 다른 정점들의 각 쌍 사이에 정확히 하나만의 모서리만을 가지는 그래프이다. 정점 $n$개를 가지는 완전 그래프에 대해 $K_{n}$ 으로 표기한다. 사이클 (Cycle) -사이클 $C_{n}$은 $n$개의 꼭지점들 $v_{1}, ..
2022.12.07