01) λ¬Έμ
KOI μ¬λ₯ν°μλ N λ§λ¦¬μ λλ¬Όλ€μ΄ κ°κ° νΉμ ν μμΉμ μ΄κ³ μλ€. μ¬λ₯ν°μ μ¨ μ¬λ₯κΎΌμ μΌμ§μ μμ μμΉν M κ°μ μ¬λ(μ΄μ μλ μ₯μ)μμλ§ μ¬κ²©μ΄ κ°λ₯νλ€. νΈμμ, μΌμ§μ μ x-μΆμ΄λΌ κ°μ νκ³ , μ¬λμ μμΉ x1, x2, ..., xMμ x-μ’ν κ°μ΄λΌκ³ νμ. κ° λλ¬Όμ΄ μ¬λ μμΉλ (a1, b1), (a2, b2), ..., (aN, bN)κ³Ό κ°μ΄ x,y-μ’ν κ°μΌλ‘ νμνμ. λλ¬Όμ μμΉλ₯Ό λνλ΄λ λͺ¨λ μ’ν κ°μ μμ μ μμ΄λ€.
μ¬λ₯κΎΌμ΄ κ°μ§κ³ μλ μ΄μ μ¬μ κ±°λ¦¬κ° Lμ΄λΌκ³ νλ©΄, μ¬λ₯κΎΌμ ν μ¬λμμ κ±°λ¦¬κ° L λ³΄λ€ μκ±°λ κ°μ μμΉμ λλ¬Όλ€μ μ‘μ μ μλ€κ³ νλ€. λ¨, μ¬λμ μμΉ xiμ λλ¬Όμ μμΉ (aj, bj) κ°μ 거리λ |xi-aj| + bjλ‘ κ³μ°νλ€.
μλ₯Ό λ€μ΄, μλμ κ·Έλ¦Όκ³Ό κ°μ μ¬λ₯ν°λ₯Ό μκ°ν΄ 보μ. (μ¬λλ μμ μ¬κ°νμΌλ‘, λλ¬Όμ μμΉλ μμ μμΌλ‘ νμλμ΄ μλ€.) μ¬μ 거리 Lμ΄ 4λΌκ³ νλ©΄, μ μ μΌλ‘ νμλ μμμ μΌμͺ½μμ μΈ λ²μ§Έ μ¬λμμ μ¬λ₯μ΄ κ°λ₯ν μμμ΄λ€.
μ¬λμ μμΉμ λλ¬Όλ€μ μμΉκ° μ£Όμ΄μ‘μ λ, μ‘μ μ μλ λλ¬Όμ μλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ /μΆλ ₯
μ λ ₯μ 첫 μ€μλ μ¬λμ μ M (1 β€ M β€ 100,000), λλ¬Όμ μ N (1 β€ N β€ 100,000), μ¬μ 거리 L (1 β€ L β€ 1,000,000,000)μ΄ λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. λ λ²μ§Έ μ€μλ μ¬λμ μμΉλ₯Ό λνλ΄λ Mκ°μ x-μ’ν κ°μ΄ λΉμΉΈμ μ¬μ΄μ λκ³ μμ μ μλ‘ μ£Όμ΄μ§λ€. μ΄ν Nκ°μ κ° μ€μλ κ° λλ¬Όμ μ¬λ μμΉλ₯Ό λνλ΄λ μ’ν κ°μ΄ x-μ’ν κ°, y-μ’ν κ°μ μμλ‘ λΉμΉΈμ μ¬μ΄μ λκ³ μμ μ μλ‘ μ£Όμ΄μ§λ€. μ¬λμ μμΉκ° κ²ΉμΉλ κ²½μ°λ μμΌλ©°, λλ¬Όλ€μ μμΉκ° κ²ΉμΉλ κ²½μ°λ μλ€. λͺ¨λ μ’ν κ°μ 1,000,000,000λ³΄λ€ μκ±°λ κ°μ μμ μ μμ΄λ€.
μΆλ ₯μ λ¨ ν μ€μ΄λ©°, μ‘μ μ μλ λλ¬Όμ μλ₯Ό μμκ° μλ μ μλ‘ μΆλ ₯νλ€.
4 8 4
6 1 4 9
7 2
3 3
4 5
5 1
2 2
1 4
8 4
9 4
# output is 6
μλΈνμ€ν¬
λ²νΈ | λ°°μ | μ ν |
---|---|---|
1 | 9 | M β€ 10, N β€ 10, X β€ 10 |
2 | 14 | M β€ 20, N β€ 20, X β€ 20 |
3 | 18 | M β€ 100, N β€ 100 |
4 | 19 | M β€ 2,000, N β€ 2,000 |
5 | 40 | μΆκ°μ μΈ μ μ½ μ‘°κ±΄μ μλ€. |
02) νμ΄
κ° μ¬λμ λν΄ μ¬μ 거리 μμ λλ¬Όμ μλ₯Ό κ°κ° ꡬν λ€μ μ€λ³΅μ μ κ±°ν΄μ£Όλ μ κ·Όμ λ¨Όμ λ μ¬λ Έλλ°, μ€λ³΅ μ κ±° κ³Όμ μ ꡬνλ°©λ²μ΄ μ μκ°λμ§ μμλ€. κ·Έλμ κ° μ μ μ μ₯μμ μ¬λμ μ¬μ 거리 μμ ν¬ν¨λλμ§μ μ¬λΆλ₯Ό 체ν¬ν λ€μ, μ΄λ€ ν μ¬λμ μ¬μ 거리μλ ν¬ν¨λμ§ μλλ€λ©΄ μ μΈν μ μΌλ‘ μΉ΄μ΄ν ν΄μ£Όλλ‘ νλ€.
M, N, L # κ°κ° μ¬λμ κ°μ, λλ¬Ό(μ )μ κ°μ, μ¬μ 거리
m = list[int 0 .. M-1] # μ¬λμ μ’ν λ°°μ΄
n = list[[x, y] 0 .. N-1] # μ μ μ’ν λ°°μ΄
excp = 0 # μ μΈν μ μ κ°μ
for i in range(N):
if μ¬μ 거리 μμ μμ:
excp += 1
..
μ¬μ 거리 μμ μμμ νλ¨ν μ μλ 쑰건μ λ κ°μ§λ‘ μκ°νλ€.
μ $\ a = (x_a,\space y_a)$ κ³Ό μ¬μ 거리 $\ L$ μ λνμ¬,
- λ§μ½ μ μ $\ y_a > L$ μ΄λ©΄ μ¬μ 거리 μμ μλ€.
- $\ y_a \le L$μΌ λ, $\ x_a$λΆν° μμͺ½μΌλ‘ κ°κ° $\ (L-y_a)$ λ§νΌ λ¨μ΄μ§ 거리 λ΄μ μ¬λκ° μ‘΄μ¬νμ§ μλλ€λ©΄, μ¬μ 거리 μμ μλ€.
μμ κ°μ κ·Έλ¦Όμμ, μ (4, 5)λ yμ’ν 5κ° μ¬μ 거리 L=4 λ³΄λ€ ν¬κΈ° λλ¬Έμ λ²μ΄λλ κ²μ λ³Ό μ μλ€.
λ μ (8, 4)λ μ¬μ 거리λ₯Ό λ²μ΄λλ€. μ΄λ $\ x = 8 $ λ‘λΆν° μμͺ½μΌλ‘ $\ (L-y) = (4, 4) = 0 $ λ§νΌ λ¨μ΄μ§ κ³³μ μ¬λκ° μκΈ° λλ¬Έμ΄λ€. μ¦ μ’ν 8μ μ¬λκ° μμΌλ―λ‘, μ¬μ 거리λ₯Ό λ²μ΄λ μ μλ€. λ λ²μ§Έ 쑰건μ ꡬκ°μΌλ‘ νννλ©΄ μλμ κ°λ€.
$\ (s, e) = (x-(L-y), \space x+(L-y)) $
μ κ·Έλ¦Όμ 보면, yμ’νκ° Lμ κ°κΉμμ§μλ‘ μ¬μ 거리μμ λ²μ΄λκΈ° μν xμ’νμ μ¬λμμ κ±°λ¦¬κ° 4, 3, 2, 1λ‘ μ μ°¨ μ€μ΄λλ κ²μ λ³Ό μ μλ€.
λ°λΌμ, yμ’νκ° Lμ΄νμΈ κ° μ μ λν΄μλ, μ¬μ 거리μμ λ²μ΄λκΈ° μν κ΅¬κ° (s, e)λ₯Ό κ³μ°νκ³ , μ΄ κ΅¬κ° λ΄ μ¬λκ° μ‘΄μ¬νλμ§λ§ 체ν¬νλ©΄ λλ€.
attackable()
ν¨μμ ꡬν
1. 첫 λ²μ§Έ λ°©λ²: λ¨μ λ°λ³΅ O(L)
def attackable(x, y):
s, e = x-(L-y), x+(L-y)
for i in range(s, e+1):
if i in m:
return True
return False
μ μ x, yμ’νλ₯Ό νλΌλ―Έν°λ‘ λ°μ, κ΅¬κ° (s, e) λ΄ μ¬λμ μ‘΄μ¬ μ¬λΆλ₯Ό 체ν¬νμ¬ λ°ννλ attackable()
ν¨μλ₯Ό ꡬννλ€κ³ νμ. κ°μ₯ κ°λ¨νκ²λ μμ κ°μ΄ μ΄ κ΅¬κ°μ λͺ¨λ μμ μ μμ λν΄ μ¬λμ λ°°μ΄ m
μ μ‘΄μ¬νλμ§λ₯Ό 체ν¬νλ λ¨μ λ°λ³΅λ¬Έμ΄ μμ μ μλ€. μ΄ ν¨μλ₯Ό μ¬μ©ν κ²½μ°, μ μλ 40μ μ΄ λμ¨λ€.
μ΄μ λ κ΅¬κ° (s, e)μ κΈΈμ΄κ° Lμ μμ‘΄νλλ°, λ¬Έμ μμ μ£Όμ΄μ§ Lμ λ²μκ° (1 <= L <= 1,000,000,000)μ΄κΈ° λλ¬Έμ΄λ€. μ΅λ 2*Lλ² λ°λ³΅λ¬Έμ μννλ―λ‘ λΉμ°ν μ€ν μκ°μ΄ κΈΈμ΄μ Έ μκ° μ΄κ³Όκ° λ°μνλ€.
2. λ λ²μ§Έ λ°©λ²: μ΄μ€ ν¬μΈν° O(M)
def attackable():
s, e = x-(L-y), x+(L-y)
# λ§μ½ s == e μ΄λ©΄ μ΄ xμ’νμ μ¬λκ° μλμ§λ§ κ²μ¬
if s == e:
return s in m
i, j, k = 0, M-1, 0
# two pointerλ‘ m[i] < s μ΄κ±°λ m[i] > e μΈ μΈλ±μ€ κ²μ
while k < M:
if m[i] < s:
i += 1
if m[j] > e:
j -= 1
if i >= j:
break
k += 1
if i > j:
return False
if i == j:
if i == s or i == e:
return False
# λ§λ κ°μ΄ (s, e)μ μνλμ§ λ°ν
return s <= m[i] <= e
return True
κ·Έλμ Lμ ν¬κΈ°μ μμ‘΄νμ§ μλ λ°©μμΌλ‘ ν¨μλ₯Ό ꡬνν΄λ³΄μλ€. mλ°°μ΄μ΄ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λμ΄ μμΌλ―λ‘, μ λμμλΆν° μ΄μ€ ν¬μΈν°λ₯Ό μ¬μ©νμ¬ μ‘΄μ¬ μ¬λΆλ₯Ό 체ν¬ν μ μλ€. μμμλΆν° μμνλ ν¬μΈν° i
λ m[i] < s
μΌλ 1 μ¦κ°νλ©° λ°°μ΄μ κ²μ¬νλ€. λ€μμλΆν° μμνλ ν¬μΈν° j
λ m[j] > e
μΌλ 1 κ°μνλ©° λ°°μ΄μ κ²μ¬νλ€. λ§μ½ i >= j
λΌλ©΄ λ°λ³΅λ¬Έμ νμΆνλ€.
i == j
μΈ κ²½μ° μ΄ μΈλ±μ€μ μ¬λκ° κ΅¬κ° (s, e)μ ν¬ν¨λλμ§ νλ² λ κ²μ¬νκ³ κ²°κ³Όλ₯Ό λ°ννλ€. i > j
μΈ κ²½μ° κ΅¬κ°μ΄ μ‘΄μ¬νμ§ μλλ€.
π₯² νλνλ κ°μ λ£μ΄κ°λ©΄μ λλ²κΉ νλ©° μ½λλ₯Ό μ§°κΈ°μ μ½λκ° μ§μ λΆνλ€γ γ μ΄ μ΄νλ‘ μΌμ΄μ€λ₯Ό λλμ΄ κ²μ¬νλ λ°©μλ μμ κ² κ°λ€. μΆν κ°μ ν΄ λ³Ό κ². μ΄ μ½λλ₯Ό μ¬μ©ν κ²½μ° λ³΅μ‘λλ O(M)μ΄λ€. μ΅λ Mλ² λͺ¨λ μ¬λλ₯Ό κ²μ¬ν μ μκΈ° λλ¬Έμ΄λ€. μ μλ 60μ μ΄ λμλ€.
3. μΈ λ²μ§Έ λ°©λ²: μ΄μ§ νμ O(logM)
def attackable():
s, e = x-(L-y), x+(L-y)
# κ²μ¬ν νμκ° μλ κ²½μ°
if m[-1] < s or m[0] > e:
return False
# λ§μ½ s = eμ΄λ©΄ μ΄ μ μ΄ μ¬λμΈμ§λ§ νμΈ
if s == e:
return s in m
v1, v2 = 0, M-1
if m[0] >= s:
# λ§μ½ 첫λ²μ¬ μμκ° sλ³΄λ€ >=, λͺ¨λ μμκ° sλ³΄λ€ >= (all T)
v1 = 0
else:
# m[i] >= s μΈ μ΅μμ κ° v1 νμ: lower bound
# sλ³΄λ€ ν¬κ±°λ κ°μ μκ° μ²μ λ±μ₯νλ μμΉλ₯Ό μ°Ύλλ€
low, high = 0, M-1
while low+1 < high: # lowμ high μ¬μ΄μλ ν μΉΈ μ‘΄μ¬
mid = (low+high)//2
if m[mid] >= s: # if true
high = mid
else:
low = mid
v1 = high
if m[-1] <= e:
# λ§μ½ λ§μ§λ§ μμκ° eλ³΄λ€ <=, λͺ¨λ μμκ° eλ³΄λ€ <= (all F)
v2 = M-1
else:
# m[i] > e μΈ μ΅μμ κ° v2 νμ: upper bound
# eλ³΄λ€ ν° μκ° μ²μ λ±μ₯νλ μμΉλ₯Ό μ°Ύλλ€
# μ°Ύμ ν high-1 νλ©΄ eλ³΄λ€ μκ±°λ κ°μ μμ μ΅λ μΈλ±μ€κ° λλ€
low, high = 0, M-1
while low+1 < high:
mid = (low+high)//2
if m[mid] > e: # if true
high = mid
else:
low = mid
v2 = high-1
# λ§μ½ v1 > v2λΌλ©΄ λ²μλ μλ€
if v1 > v2:
return False
return True
볡μ‘λλ₯Ό logMμΌλ‘ μ€μ¬ μ€ μ μλ μ΄μ§ νμμ νμ©ν λ°©λ²μ΄λ€. μ κ·Όλ²μ μ΄μ€ ν¬μΈν°μ μ μ¬νλ€. λ¨Όμ m[i] >= s
μΈ μ΅μμ i
λ₯Ό μ°Ύλλ€. κ·Έλ¦¬κ³ m[j] <= e
μΈ μ΅λμ j
λ₯Ό μ°Ύλλ€. κ·Έλ¦¬κ³ i
μ j
μ μμΉλ₯Ό λΉκ΅νμ¬ κ΅¬κ°μ μ‘΄μ¬ μ¬λΆλ₯Ό 체ν¬νλ€.
μ΄μ§/μ΄λΆ νμ Binary Searchλ λ°°μ΄μ λλ‘ λλμ΄ κ°λ©΄μ μ΅μ κ°μ μ°ΎκΈ° λλ¬Έμ μμ κ°μ μν©μμ λ³΄λ€ μ μ μκ°λ³΅μ‘λλ‘ μ½λλ₯Ό 지 μ μλ€. μμ΄λμ΄λ μ΄ν΄κ° κ°μ§λ§, low, mid, high
μ κ°μ μλͺ» μ€μ νλ©΄ μ€λ΅μ λ±κΈ° λλ¬Έμ ꡬνμμ ν·κ°λ¦¬λ λΆλΆμ΄ λ§μλ€. (κ·Έλ¦¬κ³ λ°λ³΅λ¬Έ νμΆμ 쑰건μ μ νν λ£μ΄λμ§ μμΌλ©΄ 무ν루νλ‘ λμκ°λ€γ
γ
)
κ·Έ λ λμμ΄ λ§μ΄ λμλ κΈ λ‘ μΈν΄ μ΄λ μ λ κ°μ μ‘μ κ² κ°λ€. μ£Όμ ν¬μΈνΈλ
- λ°°μ΄μ΄ λͺ¨λ True λλ λͺ¨λ Falseκ° λμ§ μλλ‘ μμΈμ²λ¦¬ λ¨Όμ
- T to F λλ F to T λ°°μ΄μ λν΄ κ°μ΄ λ¬λΌμ§λ κ²½κ³λ₯Ό κ²μ
- λ§μ½ check(low) != mid μ΄λ©΄ high = mid
- μλλ©΄ low = mid
- λ§μ§λ§μλ low λ°λ‘ λ€μμ΄ highκ° λλ€.
- μ΄ λ ꡬνκ³ μ νλ λ΅μ΄ lowμΈμ§ highμΈμ§ μκ°νμ¬ μ΅μ’ λ΅μ λΈλ€
μ΄ ν¬μΈνΈλ₯Ό κ°μ§κ³ attackable()
ν¨μμ μ§ν κ³Όμ μ λνλ΄λ©΄ λ€μκ³Ό κ°λ€.
# κ΅¬κ° (s, e)μ λ°°μ΄ Xμ κ°μ΄ μ‘΄μ¬νλ©΄ True, μλλ©΄ False
μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ λ°°μ΄ Xμ s <= eμΈ κ΅¬κ° (s, e)μ λν΄,
1. s == e μ΄λ©΄:
return s in X
2. X[i] >= sμΈ μ΅μ iμ κ° v1 μ°ΎκΈ°
a. if X[0] >= s μ΄λ©΄ λͺ¨λ TrueμΈ λ°°μ΄μ΄ λλ€.
λ°λΌμ v1 = 0
b. if X[-1] < s μ΄λ©΄ λͺ¨λ FalseμΈ λ°°μ΄μ΄ λλ€.
κ²μ¬ν νμ μμ΄, return False
c. if False to True μ΄λ©΄
κ²½κ³λ₯Ό μ΄λΆ νμνλ€.
while low+1 < high:
mid = (low+high)//2
if X[mid] >= s: # true μ΄λ©΄
high = mid
else:
low = mid
v1 = high # trueμΈ κ°μ κ°μ Έμ΄
3. X[j] <= eμΈ μ΅λ jμ κ° v2 μ°ΎκΈ°
λ¨Όμ X[j] > eμΈ μ΅μ jλ₯Ό μ°Ύκ³ , v2 = j-1
a. if X[0] > e μ΄λ©΄ λͺ¨λ True μΈ λ°°μ΄μ΄ λλ€.
κ²μ¬ν νμ μμ΄, return False
b. if X[-1] <= e μ΄λ©΄ λͺ¨λ False μΈ λ°°μ΄μ΄ λλ€.
v2 = len(X)-1 λ§μ§λ§ μμ
c. if False to True μ΄λ©΄
while low+1 < high:
mid = (low+high)//2
if X[mid] > e:
high = mid
else:
low = mid
# highλ eλ³΄λ€ ν° μ΅μ
# λ°λΌμ high-1μ eλ³΄λ€ μκ±°λ κ°μ μ΅λ
v2 = high - 1
4. if v1 > v2:
λ²μκ° μ‘΄μ¬νμ§ μμΌλ―λ‘ return False
5. else:
λ²μμ ν΄λΉνλ νλ μ΄μμ μμκ° μμ
return True
볡μ‘ν΄ λ³΄μ΄μ§λ§, μμλ₯Ό λ€μ΄λ³΄λ©΄ κ°λ¨νλ€.
X = [12, 14, 25, 37, 100, 105, 200]
+) lower/upper bounds?
μμ μ¬μ©ν κ²κ³Ό κ°μ΄, μ λ ¬λ λ°°μ΄μμ νΉμ κ° k μ΄μ λλ μ΄κ³ΌμΈ μ΅μκ°μ μ°Ύλ κ²μ lower bound, upper bound ν¨μλΌκ³ λΆλ₯Έλ€. λλ eλ³΄λ€ μκ±°λ κ°μ μ΅λκ°μ μ°ΎκΈ° μν΄ upper boundλ₯Ό μ°Ύμ ν -1 ν΄μ£Όμλ€.
- lower bound: X[i] >= kμΈ μ΅μμ μΈλ±μ€ i μ°ΎκΈ° (kμ΄μμΈ κ°μ΄ 첫 λ²μ§Έλ‘ λ±μ₯νλ μμΉ)
- upper bound: X[i] > kμΈ μ΅μμ μΈλ±μ€ i μ°ΎκΈ° (kλ³΄λ€ ν° κ°μ΄ 첫 λ²μ§Έλ‘ λ±μ₯νλ μμΉ)
μ΄μ§ νμμμ μ€μκ° μλλ‘ λ¬Έμ λ₯Ό κΌΌκΌΌν μ½κ³ κ°λ₯ν λͺ¨λ μΌμ΄μ€λ€μ κ³ λ €ν΄μΌ νλ€.
μ΄μ¨λ , μ΄λλ‘ μ½λλ₯Ό μ¬μ©νλ©΄ 100μ μ λ°μ μ μλ€ !
03) μ½λ (νμ΄μ¬)
def attackable(x, y): # binary search
s, e = x-(L-y), x+(L-y)
# κ²μ¬ν νμκ° μλ κ²½μ°
if m[-1] < s or m[0] > e:
return False
# λ§μ½ s = eμ΄λ©΄ μ΄ μ μ΄ μ¬λμΈμ§λ§ νμΈ
if s == e:
return s in m
v1, v2 = 0, M-1
if m[0] >= s:
# λ§μ½ 첫λ²μ¬ μμκ° sλ³΄λ€ >=, λͺ¨λ μμκ° sλ³΄λ€ >= (all T)
v1 = 0
else:
# m[i] >= s μΈ μ΅μμ κ° v1 νμ: lower bound
# sλ³΄λ€ ν¬κ±°λ κ°μ μκ° μ²μ λ±μ₯νλ μμΉλ₯Ό μ°Ύλλ€
low, high = 0, M-1
while low+1 < high:
mid = (low+high)//2
if m[mid] >= s: # if true
high = mid
else:
low = mid
v1 = high
if m[-1] <= e:
# λ§μ½ λ§μ§λ§ μμκ° eλ³΄λ€ <=, λͺ¨λ μμκ° eλ³΄λ€ <= (all F)
v2 = M-1
else:
# m[i] > e μΈ μ΅μμ κ° v2 νμ: upper bound
# eλ³΄λ€ ν° μκ° μ²μ λ±μ₯νλ μμΉλ₯Ό μ°Ύλλ€
# μ°Ύμ ν high-1 νλ©΄ eλ³΄λ€ μκ±°λ κ°μ μμ μ΅λ μΈλ±μ€κ° λλ€
low, high = 0, M-1
while low+1 < high:
mid = (low+high)//2
if m[mid] > e: # if true
high = mid
else:
low = mid
v2 = high-1
# λ§μ½ v1 > v2λΌλ©΄ λ²μλ μλ€
if v1 > v2:
return False
return True
M, N, L = map(int, input().split())
m = list(map(int, input().split()))
n = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
m.sort()
lower = m[0]-L
upper = m[-1]-L
excp = 0
# yμ’νκ° Lμ μ΄κ³Όνλ©΄ μ μΈνκ³
# λͺ¨λ μ μ λν΄ μ¬μ 거리 μμ μλμ§ μ¬λΆ μ‘°μ¬
for i in range(N):
if n[i][1] > L:
excp += 1
continue
if not attackable(n[i][0], n[i][1]):
excp += 1
print(N-excp)
μ΄μ§ νμ λ¬Έμ λ₯Ό μ²μ μ νμ λλ λ¬΄μ¨ λ§μΈμ§ νλλ μ΄ν΄ λͺ»νκ³ νμ΄λ₯Ό λ΄λ λͺ¨λ₯΄κ² μ΄μ κ·Έμ μΈκ³ λ§ μΆμλλ°, κ·Έλλ νλλμ© μ°Ύμ보면μ μ΄λ μ λ (μ½ 1%) κ°μ μ‘μ κ² κ°λ€. μ΄ λ¬Έμ λ λλ¦ κ³¨λ4μΈλ°.. μ΄μ§ νμ ꡬνμ μ λͺ» ν΄μ λ°©λ²μ κ²μν΄λ³΄κΈ΄ νμ§λ§, λ΅μ μμ΄ μ€μ€λ‘ μ κ·Όλ²κΉμ§λ μκ°ν΄λΌ μ μμλ€λ κ²μ΄ λΏλ―νλ€ :) λ€μμλ μ€μ μμ΄ κ΅¬νκΉμ§ λ₯μνκ² λ§λ¬΄λ¦¬ν μ μλλ‘ λ§μ΄ μ°μ΅νμπ
Reference
μ΄λΆ νμ(Binary Search) ν·κ°λ¦¬μ§ μκ² κ΅¬ννκΈ°
Theme 03. STL μκ³ λ¦¬μ¦ _ lower_bound, upper_bound
'DevLog π¨ > Baekjoon' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[DevLog][Baekjoon] 1655: κ°μ΄λ°λ₯Ό λ§ν΄μ (0) | 2023.08.20 |
---|---|
[DevLog][Baekjoon] 2110: 곡μ κΈ° μ€μΉ (0) | 2023.08.16 |
[DevLog][Baekjoon] 2261: κ°μ₯ κ°κΉμ΄ λ μ (0) | 2023.08.14 |
[DevLog][Baekjoon] 1629: κ³±μ (0) | 2023.08.14 |
[BaekJoon] 1007: λ²‘ν° λ§€μΉ (0) | 2023.02.16 |