[Programmers] Lv2. λ μ μ¬μ΄μ μ μ μ | C++
2023. 7. 3. 20:53γCoding Test/Programmers
πλ¬Έμ 보λ¬κ°κΈ°
π¨π»νμ΄ κ³Όμ
μμ μνμ’μ° λμΉμ΄λ―λ‘, 4κ°μ μ¬λΆλ©΄ μ€ νλμ μν μ λ€ κ°μλ§ κ΅¬ν΄μ 4λ°° ν, κ²ΉμΉλ μ κ°μλ€λ§ λΉΌμ£Όλ©΄ λκ² λ€κ³ μκ°νμμ΅λλ€. μ λ 2μ¬λΆλ©΄μ μ ννμ¬ μ§ννμμ΅λλ€.
μλ κ³Όμ μ μ 2μ¬λΆλ©΄ λ΄μ μ λ€ κ°μλ₯Ό ꡬνλ€λ κ°μ νμ μ§νν κ³Όμ λ€μ λλ€.
- μ°λ¦¬λ μ μ λΆλΆλ§ νν΄μΌ νλ―λ‘, ν° μμ yκ°μ λ΄λ¦Ό, μμ μμ yκ°μ μ¬λ¦Ό μ²λ¦¬λ₯Ό ν΄μΌ ν©λλ€.
- [a, b] ꡬκ°μ μμ°μ κ°μλ₯Ό ꡬνλ 곡μμ b - a + 1μ λλ€. (a ≤ b)
- ν° μμ r1, μμ μμ r2λΌκ³ νλ©΄, r1.x \( \leq \) r2.xμΈ κ²½μ°μλ νμ y = 0μ μ μ΄ μκΉλλ€.
- r1.x - r2.x + 1μ΄ κ³§, -x λ°©ν₯μμμ y = 0 μ κ°μκ° λ©λλ€.
- μ΄κ²μ -x λ°©ν₯, x λ°©ν₯, -y λ°©ν₯, y λ°©ν₯ λͺ¨λ κ°κ² μ μ©λλ―λ‘ κ²ΉμΉλ μ μ μ΄ κ°μλ (r1.x - r2.x + 1) * 4μ λλ€.
- ν΄λΉ κ°μλ₯Ό λμ€μ λν΄μ£Όλ©΄ λ©λλ€.
- r1.x > r2.xμΈ κ²½μ°μλ x < 0μΌ λκΉμ§ κ²ΉμΉλ μ μ΄ λ°μνμ§ μμ΅λλ€.
- x < 0μΌ λκΉμ§ μ 2μ¬λΆλ©΄ λ΄μ μ κ°μλ₯Ό λ€ κ΅¬νλ€λ©΄, ν΄λΉ μ κ°μλ₯Ό 4λ°°ν ν, κ²ΉμΉλ μ μ κ°μλ₯Ό λν΄μ£Όλ©΄ λ΅μ΄ λ©λλ€.
βοΈμμ€ μ½λ λ° κ²°κ³Ό
#include <cmath>
#include <algorithm>
using namespace std;
long long GetYValue(long long x, long long r, bool onCeil) {
double y = sqrt(r * r - x * x);
return onCeil ? ceil(y) : floor(y);
}
long long solution(int r1, int r2) {
if (r1 < r2) // r1μ΄ λ ν° μμ΄λΌκ³ κ°μ
swap(r1, r2);
long long answer = 0;
long long overlapPoints = (r1 - r2 + 1) * 4;
// 2μ¬λΆλ©΄ λ΄(x, yμΆ μ μΈ) μ κ°μ ꡬνκΈ°
for (int x = -r1 + 1; x < 0; x++) {
long long r1Y = GetYValue(x, r1, false);
// x <= -r2μΈ κ²½μ°μλ y = 0 μ μ μ μΈμν€λλ‘ 1λ‘ μ€μ
long long r2Y = (x > -r2) ? GetYValue(x, r2, true) : 1;
long long upperPointCount = r1Y - r2Y + 1;
answer += upperPointCount;
}
return answer * 4 + overlapPoints;
}
728x90
λ°μν
'Coding Test > Programmers' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Programmers] Lv2. νΌμμ νλ ν±νν | C++ (0) | 2023.07.05 |
---|---|
[Programmers] Lv2. μ«μ λΈλ‘ | C++ (0) | 2023.07.04 |
[Programmers] Lv2. μ°λ°μμ΄ μ μ λΆ | C++ (0) | 2023.07.01 |
[Programmers] Lv2. λνμ€ κ²μ | C++ (0) | 2023.07.01 |
[Programmers] Lv2. ν μ΄λΈ ν΄μ ν¨μ | C++ (0) | 2023.07.01 |