Programing/C++ 6

[C++] lower_bound, upper_bound에 대하여(배열에서 key 위치 찾기)

정렬되어 있는 배열에서 이진 탐색으로 원하는 key의 인덱스를 반환해 주는 함수들이다lower_bound: 원하는 val 값과 같거나 큰 값(이상)이 최초로 등장하는 인덱스를 반환한다upper_bound: 원하는 val 값보다 큰 값(초과)이 최초로 등장하는 인덱스를 반환한다 lower_bound와 upper_bound의 코드는 아래와 같다사실상 다른 건 다 동일하고 if문에서 이하인지 초과인지를 체크하는 부분만 다르다// lower_boundtemplate ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val){ ForwardIterator it; iterator_traits::differenc..

Programing/C++ 2025.02.21

[C++] Unique 함수에 대하여 (배열 내 중복 요소 제거하는 방법)

주의할 점.중복 요소를 제거할 배열이 정렬된 상태여야 한다v.erase(unique(v.begin(), v.end()), v.end());코드부터 보자면 위와 같이 작성해 주면 중복된 요소가 제거된 상태가 된다 erase 함수는 첫번째 인자로 들어간 위치부터 두번째 인자로 들어간 인자까지의 요소를 제거한다unique 함수는 중복되는 요소를 없애는 함수이다 unique 함수의 코드를 알아보자template ForwardIterator unique (ForwardIterator first, ForwardIterator last){ if (first==last) return last; ForwardIterator result = first; while (++first != last) { if ..

Programing/C++ 2025.02.21

[C++] 최대공약수(GCD), 최소공배수(LCM) 구하기

우선 두 수의 최소공배수(LCM)는 두 수의 곱을 최대공약수로 나눠주면 구할 수 있다따라서 최대공약수(GCD)를 구하는 것이 중요하다 a와 b의(단, a > b)최대 공약수는 a % b(mod), 즉 나머지가 0이 될 때까지 아래와 같이 반복하여 구할 수 있다1. a % b = r, 나머지의 값을 구한다2. b를 나머지(r)로 나눈 값의 나머지(r')를 구한다3. r을 r'로 나눈 값의 나머지(r'')를 구한다... 1. 재귀함수로 구현int gcd(int a, int b){ if (a % b == 0) return b; return gcd(b, a % b);} 2. 반복문으로 구현int gcd(int a, int b){ int r = a % b; while(r) ..

Programing/C++ 2025.01.27

[C++] priority_queue

힙으로 구현된 큐로, 기본적으로 내림차순으로 정렬된다(top이 가장 큰 값) #include #include using namespace std;int main(){ // 내림차순 정렬 priority_queue q; // or priority_queue, less> q2; // 오름차순 정렬 priority_queue, greater> q; q.top() // 가장 위에 위치한 값을 리턴 q.pop() // 가장 위에 위치한 값을 삭제 q.empty() // 큐가 비있는지를 리턴(bool) q.push(a) // 큐에 원소를 푸시} #include #include using namespace std;struct comp{ bool..

Programing/C++ 2025.01.23

[C++] 반올림, 올림, 내림, 소숫점 n번째 자리에서 반올림 (round, ceil, floor, fixed, precision)

내림, 올림, 반올림#include float a = 3.141592;cout 헤더 파일 cmath 안에 있는 세 가지 함수이다* round는 소숫점 아래 첫번째 자리에서 반올림한다 float a = 3.141592;cout round 함수는 C++11부터 지원하기 때문에, 위와 같은 방법으로도 반올림을 구현할 수 있다 소숫점 n번째 자리에서 반올림float a = 3.141592;cout.precision(3);cout precision 함수는 n번째 자리까지 출력한다(소숫점 무시)cout  소숫점이 고정되고 나면 precision 함수로 n번째 자리까지 출력하도록 지정하면 소숫점 아래 n번째 자리까지 출력한다 precision 함수를 사용하면 전부 자동으로 반올림이 된다

Programing/C++ 2025.01.22

[C++] 입력이 더 이상 안 들어올 때까지 입력 받기(cin.eof, getline)

EOF란 end of file의 약자이다입력이 끝나는 여부를 판단하기 위해서는 cin.eof()를 사용할 수 있는데,파일의 끝까지 읽은 뒤 다음 파일을 읽으려고 할 때 파일이 끝나 읽을 데이터가 없을 때 eof가 된다(true 반환)* 입력 파일을 따로 생성해서 읽지 않는 경우, ctrl + z 키를 이용해 eof 상태를 전송해 줄 수 있다string str;while(!cin.eof()){ getline(cin, str); // Or cin >> str;}위와 같은 방법으로 입력이 끝날 때까지 while문을 돌며 입력을 받도록 할 수 있다 혹은 아래와 같이 더 간결하게 변경할 수 있다string str;while (cin >> str){ cout * 당연하게도, cin >> a >..

Programing/C++ 2025.01.22