학습 정리/📖 C,C++ 10

[C에서 C++로 넘어가기] - 8. map, unordered_map

C++에서 사용가능한 컨테이너인 map에 대해서 소개하겠습니다. 컨테이너가 무엇인지에 대해서는 아래 게시글에 설명이 있으니 참고해 주세요 https://sirius7.tistory.com/91 [C에서 C++로 넘어가기] - 6. vector C++에서는 C언어 보다 배열을 더 편하게 다룰 수 있는 방법이 존재합니다. 메모리 할당 등 여러 측면에서 편하게 사용할 수 있는 vector에 대해 알아보겠습니다. vector란? vector는 시퀀스 컨테이너로, sirius7.tistory.com map이란? map은 #include 헤더를 선언한 후 사용 가능하며, 쌍으로 이루어진 자료구조의 하나입니다. map의 특징을 정리하면 다음과 같습니다. key를 first로, value를 second로 저장 key ..

[C에서 C++로 넘어가기] - 7. 이진 탐색- binary_search(), upper_bound(), lower_bound()

C++에서 이진 탐색을 이용한 3가지 편리한 함수를 소개하겠습니다. 먼저 간단히 소개를 드리자면, binary_search(first, last, value)는 주어진 범위에서 value값이 존재하면 1, 존재하지 않으면 0을 반환하는 함수입니다. lower_bound(first, last, value)는 주어진 범위에서 value값 보다 크거나 같은 첫 번째 원소의 주소를 반환하는 함수입니다. 만약 그러한 원소가 없다면 end값을 리턴합니다. upper_bound(first, last, value)는 주어진 범위에서 처음으로 value값을 초과하는 원소의 주소를 반환하는 함수입니다. 만약 그러한 원소가 없다면 end값을 리턴합니다. 위의 3가지 함수는 헤더파일을 추가한 다음 사용할 수 있습니다. 또한,..

[C에서 C++로 넘어가기] - 6. vector

C++에서는 C언어 보다 배열을 더 편하게 다룰 수 있는 방법이 존재합니다. 메모리 할당 등 여러 측면에서 편하게 사용할 수 있는 vector에 대해 알아보겠습니다. vector란? vector는 시퀀스 컨테이너로, C언어의 배열과 같은 동적 배열입니다. C언어의 배열과 달리, 객체를 삽입하거나 제거할 때 자동으로 자신의 크기를 조정하는 능력이 있습니다. vector의 이해를 위해, 시퀀스 컨테이너의 개념과 크기 조정에 대해 나누어 하나씩 설명해 보겠습니다. 컨테이너(container) 먼저, 시퀀스 컨테이너라는 개념에 대해 간단히 살펴보겠습니다. STL에서 컨테이너(container)는 같은 타입의 여러 객체를 저장하는 일종의 집합이라고 할 수 있습니다. 컨테이너는 아래와 같이 크게 3가지로 분류됩니다..

[C/C++] 카운팅 정렬 (Counting Sort)

카운팅 정렬 (Counting Sort) 카운팅 정렬 (Counting Sort)은 정렬할 수의 범위가 작은 경우 사용하는 정렬으로, 시간 복잡도가 O(n)인 매우 빠른 정렬입니다. 단점은 수의 범위가 커지면 사용하는 메모리도 그만큼 커진다는 단점이 있습니다. (이때문에 수의 범위가 작은 경우에 사용) 작동 원리 카운팅 정렬의 원리는 간단합니다. 정렬할 원소를 하나씩 살펴보고, 그 원소 값에 해당하는 배열에 카운트를 1 늘려주면 됩니다. 카운팅 정렬이 작동하는 방식을 GIF로 만들어 보았습니다. 위의 그림에서는 배열의 크기가 10,000개나 되지만, 실제 입력 값의 최대 크기는 7이므로 그만큼 크기를 줄여도 작동합니다. 반대로, 입력값에 100,000,005 같이 큰 수가 나온다면, 그만큼 배열이 커져야..

[C에서 C++로 넘어가기] - 5. 정렬하기 : sort

C++에서는 쉬운 정렬을 위해 sort함수가 지원됩니다. C언어에서도 stdlib.h 헤더파일을 선언하여 qsort()를 사용할 수 있지만, C++의 sort() 함수는 이와는 조금 다릅니다. sort C++에서 sort()함수는 헤더파일을 추가한 다음 사용할 수 있습니다. 이 sort 정렬 함수는 최악의 경우에도 O(nlogn)의 시간 복잡도를 가지는 intro sort 정렬 알고리즘을 이용합니다. intro sort 알고리즘은 quick 정렬 알고리즘을 기반으로, heap sort와 insertion sort를 혼합해 만든 알고리즘이라고 합니다. quick 정렬의 경우는 최악의 경우 O(n^2) 시간복잡도를 가지므로, 더 빠르게 사용할 수 있다는 장점이 있네요. sort 함수의 사용방법을 알아보겠습니..

[C에서 C++로 넘어가기] - 4. 문자열 입력받기 : String

C++은 C와 비교해서 더 편리한 기능을 많이 지원하는데, 그 중 하나가 바로 문자열입니다. char*, char[] 로 문자열을 입력받는 C와는 달리 C++에서는 문자열을 더 쉽게 다룰 수 있습니다. string string은 C++ STL에서 제공하는 클래스로, 문자열을 다루는 클래스입니다. ( 클래스에 대한 설명은 이전 게시글을 참고해주세요! ) string의 특징을 간단하게 정리하면 다음과 같습니다. 문자열 끝에 null문자(‘\0’) 등이 포함되지 않는다. 문자열의 길이를 동적으로 변경 가능하다. 마치 배열처럼 한 문자씩 다룰 수 있다. 사용을 위해서는 string 헤더파일을 선언해야 한다. ( #include ) , ==, + 등과 같은 연산자들을 사용할 수 있다. 문자열 비교 (, ==) :..

[C에서 C++로 넘어가기] - 3. cin, cout, endl

C언어만 사용하던 입장에서, C++ 코드를 봤을때 가장 먼저 알 수 있던 차이점은 입출력시 printf, scanf 대신 cin, cout을 사용하는 것이었습니다. 이와같이 C++에서 지원하는 입출력에 대해 알아보겠습니다. cout C언어에서는 출력을 위해 printf를 사용했지만, C++에서는 더 쉬운 출력 함수인 cout이 지원됩니다. C에서 printf()를 사용하기 위해 를 include 했던 것처럼, C++에서 cout을 사용하기 위해서는 이라는 헤더파일을 include 해야 합니다. #include using namespace std; int main(void){ cout

[C에서 C++로 넘어가기] - 2. class

앞선 게시글에서 이야기한 것처럼, C++이란 C언어에 Class가 추가된 언어입니다. 이번 게시글에서는 Class가 무엇인지 살펴보겠습니다. class란? 클래스(class)의 정의는 " 특정한 용도를 수행하기 위한 변수와 함수를 모아 둔 틀 " 입니다. 언뜻 보면 클래스라는 게 C언어의 구조체(struct)와 비슷해 보입니다. 자세히 살펴보면, C언어의 구조체(struct) / C++의 구조체(struct) / C++의 클래스(class) 셋은 조금씩 다릅니다. 먼저 C++의 구조체가 C언어의 구조체와 다른 점은 다음과 같습니다. 함수를 구조체 멤버로 사용할 수 있다. typedef를 따로 선언하지 않아도, struct 키워드를 생략할 수 있다. 접근 제어자, 상속, 생성자, 소멸자도 선언가능하다. C..

[C에서 C++로 넘어가기] - 1. C와 C++의 차이, namespace

코딩테스트 준비를 위해 C++을 공부한 내용을 정리하고자 게시글을 작성하게 되었습니다. 대학에서 C언어를 공부한 상태에서 C++을 공부하는 상태이므로 C와 중복되는 개념을 제외하고, C와 C++의 차이점을 위주로 정리하고 있습니다. 목차 (update 23.05.19) [C에서 C++로 넘어가기] - 1. C와 C++의 차이, namespace [C에서 C++로 넘어가기] - 2. class [C에서 C++로 넘어가기] - 3. cin, cout, endl [C에서 C++로 넘어가기] - 4. 문자열 입력받기 : String [C에서 C++로 넘어가기] - 5. 정렬하기 : sort [C에서 C++로 넘어가기] - 6. vector [C에서 C++로 넘어가기] - 7. 이진 탐색- binary_searc..

[C] 유클리드 호제법을 이용해서 최대공약수와 최소공배수 구하기

(연관문제) https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net [소스코드 - 백준 2609 C 풀이] #include // [baekjoon] 2609번 - 최대공약수와 최소공배수 int gcd(int min, int max) {// 최대공약수 구하기 int remainder = 1; while (remainder != 0) { remainder = max % min; max = min; min = remainder; } return max; } int lcm(int min, int max) {// 최소공배수 구..