자료구조를 사용하지 않지만, 수학적 계산을 이용해 구하는 간단하고 다양한 예제들을 정리하려 한다.
양수, 음수에 대한 올림/내림/반올림
https://blockdmask.tistory.com/112
이 분의 글을 참고하였다.
양수, 음수인 경우 사용법은 동일하다.
#include <iostream>
#include <cmath>
int main(){
double n = 1.0124;
cout << fixed;
cout.precision(3);
cout << ceil(n) << endl; // 올림
cout << floor(n) << endl; // 내림
cout << floor(n + 0.5) << endl; // 반올림
cout << round(n) << endl; // 반올림
}
소수 판별하기
1. 제곱근을 이용한 알고리즘
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
2. 에라토스테네스의 체 알고리즘을 이용한 알고리즘
#include <vector>
std::vector<bool> sieveOfEratosthenes(int n) {
std::vector<bool> isPrime(n + 1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
return isPrime;
}
팩토리얼 값 구하기
1. 반복문을 이용한 알고리즘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
}
int result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
}
return result;
}
2. 재귀를 이용한 알고리즘
unsigned long long factorial(unsigned int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
자릿수의 합 구하기
int sumOfDigits(int number) {
int sum = 0;
while (number != 0) {
sum += number % 10;
number /= 10;
}
return sum;
}
숫자를 역순으로 출력하기
123이라는 숫자를 "321"과 같이 출력하는 함수이다.
void reverseNumber(int number) {
if (number < 10) {
cout << number;
return;
}
cout << number % 10;
reverseNumber(number / 10);
}
진법 변환
10진수와 16진수
int hexToDecimal(string hexNumber) {
int decimalNumber = stoi(hexNumber, 0, 16);
return decimalNumber;
}
string decimalToHex(int decimalNumber) {
string hexNumber = to_string(decimalNumber);
return hexNumber;
}
2진수와 10진수
int binaryToDecimal(string binaryNumber) {
int decimalNumber = 0;
int base = 1;
int size = binaryNumber.size();
for (int i = size - 1; i >= 0; i--) {
if (binaryNumber[i] == '1')
decimalNumber += base;
base *= 2;
}
return decimalNumber;
}
string decimalToBinary(int decimalNumber) {
if (decimalNumber == 0)
return "0";
string binaryNumber = "";
while (decimalNumber > 0) {
int remainder = decimalNumber % 2;
binaryNumber = to_string(remainder) + binaryNumber;
decimalNumber /= 2;
}
return binaryNumber;
}
최댓값이 여러 개일때, 모든 최댓값의 위치 구하기
vector<int> arr = {1, 2, 3, 6, 6, 6};
int max = 0;
vector<int> answer;
for(int i = 0; i < arr.size(); i++){
if(arr[i] > max){
max = arr[i];
answer.clear();
answer.push_back(i);
} else if(arr[i] == max)
answer.push_back(i);
}
윤년 계산 함수
bool isLeapYear(int year) {
if (year % 4 != 0) {
// 4로 나누어 떨어지지 않으면 평년
return false;
} else if (year % 100 != 0) {
// 4로 나누어 떨어지고 100으로 나누어 떨어지지 않으면 윤년
return true;
} else if (year % 400 != 0) {
// 4로 나누어 떨어지고 100으로 나누어 떨어지지만 400으로 나누어 떨어지지 않으면 평년
return false;
} else {
// 4로 나누어 떨어지고 100으로 나누어 떨어지고 400으로 나누어 떨어지면 윤년
return true;
}
}
한 줄로 위 함수를 고치면 아래와 같다.
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
'Langauge > C++' 카테고리의 다른 글
[C++] 이분 탐색으로 lower_bound, upper_bound 구현하기 (0) | 2023.06.19 |
---|---|
[C++] 코딩테스트에 자주 나오는 문자열 처리 예제들 (0) | 2023.06.19 |
[C++] 우선순위 큐 (priority_queue) STL 사용법, 구현, 정렬 (0) | 2023.06.19 |
[C++] 비트마스크 (bitmask) 의 구현, 다양한 예제 (0) | 2023.06.19 |
[열혈 C++] 연산자 오버로딩2 정리 및 예제 풀이 (0) | 2021.05.21 |