전체 글
Read/Write 스핀락 구현과 fairness에 대한 이야기
Read/Write 스핀락 구현과 fairness에 대한 이야기
2022.02.20class CSpinLockLatch { friend class CReadLockKey; friend class CWriteLockKey; public: constexpr static long WRITE_LOCK_MASK = 0x80000000; constexpr static long READ_LOCK_MASK = 0X7FFFFFFF; private: volatile long m_Flag = 0; public: CSpinLockLatch() {} virtual ~CSpinLockLatch() {} }; class CReadLockKey { private: volatile long* m_pLatchFlag = nullptr; public: CReadLockKey(CSpinLockLatch* Latch) {..
[BOJ] 2609 최대공약수와 최소공배수
[BOJ] 2609 최대공약수와 최소공배수
2022.02.07최대공약수는 유클리드 호제법을 이용해서 구한다. 최소공배수는 양쪽이 자신이 가진 약수중 상대가 가지지 않은 약수만을 남긴다음, 최대공약수와 모두 곱한 값이다. 예를 들어, X가 A * C 이고, Y가 B * C 이며, A와 B는 서로소라고 하자. X * Y 는 A * B * C * C 이다. #include int GetGCD(int A, int B) { int Bigger = A > B ? A : B; int Smaller = A > B ? B : A; int Remainder = Bigger % Smaller; if (0 == Remainder) return Smaller; return GetGCD(Smaller, Remainder); } int main() { std::cin.tie(0); std:..
[BOJ] 1037 약수 - 정수론
[BOJ] 1037 약수 - 정수론
2022.02.07어떠한 수의 가장 큰 약수와 가장 작은 약수를 곱한값 이다. 어떠한 수 N이 A * B * C 일때, 약수는 다음과 같다. 1과 N을 제외한 약수는 다음과 같다. A, B, C, A * B, A * C, B * C 가장 작은 약수가 A라고 하자. 그러면 가장 큰 약수는 당연히 가장 작은 약수를 제외한 것을 모두 곱한 B * C이다. 문제에서 모든 약수를 준다. 따라서, 배열을 정렬 한 다음 가장 큰 수와 가장 작은 수를 곱해주면 된다. #include #include #include int N; int main() { std::cin.tie(0); std::cout.tie(0); std::cin.sync_with_stdio(false); std::cout.sync_with_stdio(false); std..
[BOJ] 5086 배수와 약수
[BOJ] 5086 배수와 약수
2022.02.07약수도, 배수도 아니라면 서로소이다. #include int main() { std::cin.tie(0); std::cout.tie(0); std::cin.sync_with_stdio(false); std::cout.sync_with_stdio(false); int A = 0; int B = 0; for (;;) { std::cin >> A; std::cin >> B; if (0 == A || 0 == B) break; if (0 == B % A) { std::cout
[BOJ] 13305 주유소 - 그리디 알고리즘.
[BOJ] 13305 주유소 - 그리디 알고리즘.
2022.02.07매우 간단한 문제이다. 배열을 순회하며 도시를 지날때마다 요금을 정산하는 식으로 한다. 우선 바로 이전 도시에서 해당 도시까지 달린 요금을 정산한다. 물론 저장된 최저기름값으로 한다. 이러면 기름값이 가장 싼 도시에서 미리 주유한것과 같다. 해당 도시의 기름값이 더 싸다면 최저기름값을 업데이트하고, 다음도시로 향하면 된다. #include int NumOfCity = 0; unsigned long long GasPrice[100001] = { 0 , }; unsigned long long DistanceToNextCity[100001] = { 0 , }; int main() { std::cin.sync_with_stdio(false); std::cout.sync_with_stdio(false); std:..