-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
43-tgyuuAn #157
43-tgyuuAn #157
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μκ°λ³΄λ€ μ½λκ° κ°κ²°ν΄μ λλμ΅λλ€
μ²μμ λ¬Έμ λ§ λ΄€μ λλ, μμ νμ λ°μ μκ°μ΄ μλ¬λλ° μλ μ½λλ₯Ό μ½μ΄λ³΄λ μ νμκ°μ κ±Έλ¦°λ€λ μ΄μκ° μμλ€μ .. 'λμ μκ° μ ν -> μ΄λΆνμμ΄μ§ μμκΉ?' μΈμ¬μ΄νΈλ₯Ό μ»μ΄κ°λλ€!
μ°Έκ³ λ§ν¬λ μ μ½μ΄λ³΄μμ΅λλ€ :) μκ³ νμ ¨μ΅λλ€! λ©΄μ λ νμ΄ν μ΄μμ€ πͺ
νμ΄μ¬μ 1μ΄μ 2μ²λ§λ² μ°μ°μ μ λ§ μ€μν μ 보λ κΌ μ»μ΄κ°μΈμ! νλ‘κ·Έλλ¨Έμ€λ λ°λ‘ λͺ μλμ΄μμ§ μλ μ΄μ μ£Όλ‘ 5μ΄, λ°±μ€μ λ°λ‘ λͺ μλμ΄μμ§ μμΌλ©΄ λ¬Έμ μμ μ£Όμ΄μ§ μκ°μ *3λ°°νκ±°μ +2μ΄ν κ°μ λλ€. (1μ΄κ° μ£Όμ΄μ§λ©΄ νμ΄μ¬μΌλ‘λ 5μ΄λ₯Ό μΈ μ μμ΄μ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
λ€λ¦¬ κΈΈμ΄κ° μμ² κΈΈκ³ , μ§λκ° μ μλ μ¬λ μλ λ§μμ
λ°°μ΄μ λ°λ³΅ν΄μ νμΌλ©΄μ νλνλ κ²½μ°λ₯Ό 체ν¬νλ 건
λ§μ΄ μλ κ² κ°μμ μ΄μ§ νμμΌλ‘ νμ΄μΌ νλ λλμ΄μλλ° λ§μλ€μ.
λΉμ·ν λ¬Έμ λ€μ νλ©΄μ μ΄λμ λ λ¬Έμ ν¨ν΄μ΄ μ΅νμ§ κ±° κ°μ΅λλ€.
νκ·λ μ½λλ κ±°μ κ°μλ°
μ΄μ§ νμ μ λ²μ μ‘°μ , μ‘°κ±΄λ¬Έλ§ μ‘°κΈ λ€λ₯΄λ€μ
def solution(stones, k):
left, right = 0, 200_000_000
while left <= right:
mid = (left + right) // 2
length = 0
passed = True
for v in stones:
if v <= mid:
length += 1
if length >= k:
passed = False
break
elif length:
length = 0
if passed:
left = mid + 1
else:
right = mid - 1
return left
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> stones, int k) {
int n = stones.size();
vector<int> tree(n * 2);
for (int i = 0; i < n; i++) {
tree[n + i] = stones[i];
}
for (int i = n - 1; i; i--) {
tree[i] = max(tree[i * 2], tree[i * 2 + 1]);
}
auto range = [&](int begin, int end) {
int res = -1;
begin += n;
end += n;
while (begin != end) {
if (begin % 2) res = max(res, tree[begin++]);
if (end % 2) res = max(res, tree[--end]);
begin /= 2;
end /= 2;
}
return res;
};
int answer = *max_element(stones.begin(), stones.end());
for (int i = 0; i + k <= n; i++) {
answer = min(answer, range(i, i + k));
}
return answer;
} μΈκ·Έλ¨ΌνΈ νΈλ¦¬λ‘λ 무쑰건 νλ¦°λ€ -> ν¬λ¨ΈμΉμΈλ°μ? -> λ€λ₯Έ λ°©λ²μ΄ μ λ μ€λ¦ ν΄μ μΈκ·Έλ¨ΌνΈ νΈλ¦¬λ‘ νμ΄λ³΄μμ΅λλ€ νν μΈκ·Έλ¨ΌνΈ νΈλ¦¬μ νΉμ§ range, queryκ° λͺ¨λ O(log(N)) μ²λ¦¬κ° λλ€ -> νΉμ ꡬκ°μ μ΅λκ°μ log(N)λ§μ ꡬν μ μμ νκ·λ μ½λ λ³΄κ³ λλκΉ λκ° νννλ€μ.. |
π λ¬Έμ λ§ν¬
μ§κ²λ€λ¦¬ 건λκΈ°
βοΈ μμλ μκ°
30λΆ
β¨ μλ μ½λ
μνμΌλ‘ νκ² λ κ²½μ°, μ΅λ$200,000,000 X 200,000$ μ΄λ―λ‘ μ λ λΆκ°λ₯νλ€.
νμ΄μ¬μΌλ‘ ν κ²½μ°, νμ΄μ¬μ 1μ΄μ 2μ²λ§λ²μ μ°μ°μ΄ κ°λ₯νλ°,
νλ‘κ·Έλλ¨Έμ€λ λλΆλΆ 5μ΄κ° μ£Όμ΄μ Έμ 1μ΅λ² κΉμ§ μ°μ°μ΄ κ°λ₯νλ€.
μ΄λ κ² ν°λ¬΄λ μμ΄ λμ μ νμ λ³΄κ³ λ°λ‘ μ΄λΆ νμμ λμλ₯Ό 맑μκ³ ,
μ΄λΆ νμμ
mid
κ°μΌλ‘ μ΄λ€ κ²μ μ μ νλ©΄ μ’μμ§ κ³°κ³°ν μκ°νλ€.λ¬Έμ κ° μ΄λΆ νμμμ νμ νλλΌλ©΄, μ΄λΆ νμ νΉμ νλΌλ©νΈλ¦ μμΉμμ κ°μ₯ μ€μν μμλ
"κ³Όμ° μ£Όμ΄μ§ λ¬Έμ μμ μ΄λ€ κ²μ "μ, μλμ€" λΌλ λ΅λ³μΌλ‘ κ°λΌλΌκ±°λλ κ²" μ΄λ€.
λλ μ΄ λ¬Έμ μμ μ΄λΆ νμμ
mid
κ°μΌλ‘ μ§λκ° μ μλ μ΅λ μ¬λ μλ‘ μ μ νλ€.μ¦, λ§μ½
mid
κ° 5μ΄λ©°stones
μμ -5λ₯Ό λΊ κ°μΌλ‘ μννλ©΄μ 0 μ΄νκ° μλ κ°μ κ°κ²©μ΄k
λ₯Ό λλλ μ λλλλ‘ νλ¨ν μ μλ€.λ§μ½ μ΄
check()
ν¨μμμ λ°λ³΅λ¬Έμ λλ μ€κ°μ Falseλ₯Ό λ°ννμ§ μκ³ Trueλ₯Ό λ°ννλ©΄ 5λͺ μ λͺ¨λ 건λ μ μλ€λ μλ¦¬κ° λλ€.μλλ 건λ μ μλ κ²½μ°,
μλλ 건λ μ μλ κ²½μ°λ€.
μμ μ νλ€κ° ν¬κΈ°ν λ¬Έμ μλλ°,
λ°λ‘ μ΄λΆ νμμμ μΊμΉ νμκ³ μ½λλ λ°λ‘ μ§μ¬μ§λ κ²μ 보λκΉ μ΄λμ λ μ±μ₯μ νκΈ΄ ν κ² κ°λ€.
μ΄λΆ νμμμ μΊμΉνμ¬λ
left
,right
μ κ° μ€μ κ³Ό whileλ¬Έ νμΆ μ‘°κ±΄μ μ€μ νκΈ°κ° κΉλ€λ‘μΈ μκ° μλλ°,μ΄λΆνμ ν·κ°λ¦¬μ§ μκ² κ΅¬ννκΈ°λ₯Ό μ°Έκ³ νμ¬ μ²΄ννλ©΄ μ’μ κ² κ°λ€!
π μλ‘κ² μκ²λ λ΄μ©