μμ°¨ νμ
- 리μ€νΈ μμ μλ νΉμ ν λ°μ΄ν°λ₯Ό μ°ΎκΈ° μν΄ μμμλΆν° λ°μ΄ν°λ₯Ό νλμ© μ°¨λ‘λλ‘ νμΈνλ λ°©λ²
- λ³΄ν΅ μ λ ¬λμ§ μμ 리μ€νΈμμ λ°μ΄ν°λ₯Ό μ°ΎμμΌ ν λ μ¬μ©
- λ°μ΄ν° μ λ ¬ μ¬λΆμ μκ΄ μμ΄ κ°μ₯ μμ μλ μμλΆν° νλμ© νμΈ
- μκ° λ³΅μ‘λ O(N)
γ΄ λ°μ΄ν°μ κ°μκ° Nκ°μΌ λ μ΅λ Nλ²μ λΉκ΅ μ°μ°
# μμ°¨ νμ
def sequential_search(n, target, array):
# κ° μμλ₯Ό νλμ© νμΈνλ©°
for i in range(n):
# νμ¬μ μμκ° μ°Ύκ³ μ νλ μμμ λμΌν κ²½μ°
if array[i] == target:
return i + 1 # νμ¬μ μμΉ λ°ν
print("μμ±ν μμ κ°μλ₯Ό μ
λ ₯ν λ€μ ν μΉΈ λκ³ μ°Ύμ λ¬Έμμ΄μ μ
λ ₯νμΈμ.")
input_data = input().split()
n = int(input_data[0]) # μμμ κ°μ
target = input_data[1] # μ°Ύκ³ μ νλ λ¬Έμμ΄
print("μμ μ μ μμ κ°μλ§νΌ λ¬Έμμ΄μ μ
λ ₯νμΈμ. ꡬλΆμ λμ΄μ°κΈ° ν μΉΈμΌλ‘ ν©λλ€.")
array = input().split()
# μμ°¨ νμ μν κ²°κ³Ό μΆλ ₯
print(sequential_search(n, target, array))
μ΄μ§ νμ
- λ°°μ΄ λ΄λΆμ λ°μ΄ν°κ° μ λ ¬λμ΄ μμ΄μΌλ§ μ¬μ©ν μ μλ μκ³ λ¦¬μ¦
- νμ λ²μλ₯Ό μ λ°μ© μ’νκ°λ©° λ°μ΄ν°λ₯Ό νμ
- μ°ΎμΌλ €λ λ°μ΄ν°μ μ€κ°μ μμΉμ μλ λ°μ΄ν°λ₯Ό λ°λ³΅μ μΌλ‘ λΉκ΅
- μκ° λ³΅μ‘λ O(logN)
γ΄ ν λ² νμΈν λλ§λ€ νμΈνλ μμμ κ°μκ° μ λ°μ© μ€μ΄λ¦.
# μ¬κ· ν¨μλ‘ κ΅¬νν μ΄μ§ νμ
def binary_search(array, target, start, end):
if start > end:
return None
mid = (start + end) // 2
# μ°Ύμ κ²½μ° μ€κ°μ μΈλ±μ€ λ°ν
if array[mid] == target:
return mid
# μ€κ°μ μ κ°λ³΄λ€ μ°Ύκ³ μ νλ κ°μ΄ μμ κ²½μ° μΌμͺ½ νμΈ
elif array[mid] > target:
return binary_search(array, target, start, mid-1)
# μ€κ°μ μ κ°λ³΄λ€ μ°Ύκ³ μ νλ κ°μ΄ ν° κ²½μ° μ€λ₯Έμͺ½ νμΈ
else:
return binary_search(array, target, mid+1, end)
n, target = list(map(int, input().split()))
array = list(map(int, input().split()))
result = binary_search(array, target, 0, n-1)
if result == None:
print("μμκ° μ‘΄μ¬νμ§ μμ΅λλ€.")
else:
print(result+1)
# λ°λ³΅λ¬ΈμΌλ‘ ꡬνν μ΄μ§ νμ
def binary_search(array, target, start, end):
while start <= end:
mid = (start + end) // 2
# μ°Ύμ κ²½μ° μ€κ°μ μΈλ±μ€ λ°ν
if array[mid] == target:
return mid
# μ€κ°μ μ κ°λ³΄λ€ μ°Ύκ³ μ νλ κ°μ΄ μμ κ²½μ° μΌμͺ½ νμΈ
elif array[mid] > target:
end = mid - 1
# μ€κ°μ μ κ°λ³΄λ€ μ°Ύκ³ μ νλ κ°μ΄ ν° κ²½μ° μ€λ₯Έμͺ½ νμΈ
else:
start = mid + 1
return None
n, target = list(map(int, input().split()))
array = list(map(int, input().split()))
result = binary_search(array, target, 0, n-1)
if result == None:
print("μμκ° μ‘΄μ¬νμ§ μμ΅λλ€.")
else:
print(result+1)
νΈλ¦¬ μλ£κ΅¬μ‘°
- λ Έλμ λ Έλμ μ°κ²°λ‘ νν
- κ·Έλν μλ£κ΅¬μ‘°μ μΌμ’ μΌλ‘ λ°μ΄ν°λ² μ΄μ€ μμ€ν μ΄λ νμΌμμ€ν κ³Ό κ°μ κ³³μμ λ§μ μμ λ°μ΄ν°λ₯Ό κ΄λ¦¬νκΈ° μν λͺ©μ μΌλ‘ μ¬μ©
- νΈλ¦¬λ λΆλͺ¨ λ Έλμ μμ λ Έλμ κ΄κ³λ‘ ννλλ€.
- νΈλ¦¬μ μ΅μλ¨ λ Έλλ₯Ό λ£¨νΈ λ ΈλλΌκ³ νλ€.
- νΈλ¦¬μ μ΅νλ¨ λ Έλλ₯Ό λ¨λ§ λ ΈλλΌκ³ νλ€.
- νΈλ¦¬μμ μΌλΆλ₯Ό λΌμ΄λ΄λ νΈλ¦¬ ꡬ쑰μ΄λ©° μ΄λ₯Ό μλΈ νΈλ¦¬λΌ νλ€.
- νΈλ¦¬λ κ³μΈ΅μ μ΄κ³ μ λ ¬λ λ°μ΄ν°λ₯Ό λ€λ£¨κΈ°μ μ ν©νλ€.
μ΄μ§ νμ νΈλ¦¬
- λΆλͺ¨ λ Έλλ³΄λ€ μΌμͺ½ μμ λ Έλκ° μλ€.
- λΆλͺ¨ λ Έλλ³΄λ€ μ€λ₯Έμͺ½ μμ λ Έλκ° ν¬λ€.
- μ΄μ§ νμ λ¬Έμ λ μ λ ₯ λ°μ΄ν°κ° λ§κ±°λ, νμ λ²μκ° λ§€μ° λμ νΈ.
- λ°λΌμ sys λΌμ΄λΈλ¬λ¦¬μ readline() ν¨μλ₯Ό μ΄μ©νμ.
μ€μ λ¬Έμ 1. λΆν μ°ΎκΈ°
1) λ΄ μ½λ: μ΄μ§ νμμ λ°λ³΅λ¬Έμ μ΄μ©ν΄μ νμμ.
# μ€μ λ¬Έμ 1. λΆν μ°ΎκΈ°
n = int(input())
n_array = list(map(int, input().split()))
m = int(input())
m_array = list(map(int, input().split()))
n_array.sort()
def binary_search(start, end, target):
while start <= end:
mid = (start + end) // 2
if n_array[mid] == target:
return True
elif n_array[mid] < target:
start = mid + 1
else:
end = mid - 1
return False
for i in m_array:
if binary_search(0, n-1, i):
print('yes', end=' ')
else:
print('no', end=' ')
2) κ΅μ¬ μ½λ
# μ€μ λ¬Έμ 1. λΆν μ°ΎκΈ°
# κ΅μ¬ μ½λ - κ³μ μ λ ¬
n = int(input())
array = [0] * 1000001
# κ°κ²μ μλ μ 체 λΆν λ²νΈλ₯Ό μ
λ ₯λ°μμ κΈ°λ‘
for i in input().split():
array[int(i)] = 1
m = int(input())
x = list(map(int, input().split()))
# μλμ΄ νμΈ μμ²ν λΆν λ²νΈλ₯Ό νλμ© νμΈ
for i in x:
# ν΄λΉ λΆνμ΄ μ‘΄μ¬νλμ§ νμΈ
if array[i] == 1:
print('yes', end=' ')
else:
print('no', end=' ')
- λͺ¨λ μμμ λ²νΈλ₯Ό ν¬ν¨ν μ μλ ν¬κΈ°μ 리μ€νΈλ₯Ό λ§λ¦.
- 리μ€νΈμ μΈλ±μ€μ μ§μ μ κ·Όνμ¬ νΉμ ν λ²νΈμ λΆνμ΄ λ§€μ₯μ μ‘΄μ¬νλμ§ νμΈ
# μ€μ λ¬Έμ 1. λΆν μ°ΎκΈ°
# κ΅μ¬ μ½λ - μ§ν© μλ£ν μ΄μ©
n = int(input())
array = set(map(int, input().split()))
m = int(input())
x = list(map(int, input().split()))
for i in x:
if i in array:
print('yes', end=' ')
else:
print('no', end=' ')
- λ¨μν νΉμ ν μκ° ν λ²μ΄λΌλ λ±μ₯νλμ§λ₯Ό κ²μ¬νλ©΄ λ¨. -> μ§ν© μλ£ν μ΄μ©
μ€μ λ¬Έμ 2. λ‘λ³Άμ΄ λ‘ λ§λ€κΈ°
# μ΄μ§ νμ
# μ€μ λ¬Έμ 2. λ‘λ³Άμ΄ λ‘ λ§λ€κΈ°
n, m = map(int, input().split())
array = list(map(int, input().split()))
start = 0
end = max(array)
result = 0
while (start <= end):
total = 0
mid = (start + end) // 2
# μλμ λ λ‘μ μ κ³μ°
for i in array:
if i > mid:
total += i - mid
# λ‘μ μμ΄ λΆμ‘±ν κ²½μ° λ λ§μ΄ μλ₯΄κΈ° (μΌμͺ½ λΆλΆ νμ)
if total < m:
end = mid - 1
# λ‘μ μμ΄ μΆ©λΆν κ²½μ° λ μλ₯΄κΈ° (μ€λ₯Έμͺ½ λΆλΆ νμ)
else:
result = mid # μ΅λν λ μλμ λκ° μ λ΅μ΄λ―λ‘, μ¬κΈ°μμ resultμ κΈ°λ‘
start = mid + 1
print(result)
- νλΌλ©νΈλ¦ μμΉ: μ΅μ ν λ¬Έμ λ₯Ό κ²°μ λ¬Έμ λ‘ λ°κΎΈμ΄ ν΄κ²°
- λ²μ λ΄μμ 쑰건μ λ§μ‘±νλ κ°μ₯ ν° κ°μ μ°ΎμΌλΌλ μ΅μ ν λ¬Έμ λΌλ©΄ μ΄μ§ νμμΌλ‘ κ²°μ λ¬Έμ λ₯Ό ν΄κ²°νλ©΄μ λ²μλ₯Ό μ’νκ° μ μλ€.
- μ μ ν λμ΄λ₯Ό μ°Ύμ λκΉμ§ μ λ¨κΈ°μ λμ΄ Hλ₯Ό λ°λ³΅μ μΌλ‘ μ‘°μ νλ€.
- κ·Έλμ 'νμ¬ μ΄ λμ΄λ‘ μλ₯΄λ©΄ 쑰건μ λ§μ‘±ν μ μλκ°?'λ₯Ό νμΈν λ€ μ‘°κ±΄μ λ§μ‘± μ¬λΆμ λ°λΌ νμ λ²μλ₯Ό μ’νκ°λ€.
'π€ > μκ³ λ¦¬μ¦ μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ΅λ¨ κ²½λ‘ μκ³ λ¦¬μ¦ (Shortest Path Algorithm) (0) | 2022.04.14 |
---|---|
λμ κ³νλ² (Dynamic Programming) (0) | 2022.03.21 |
μ λ ¬ μκ³ λ¦¬μ¦ (Sorting Algorithm) (0) | 2022.02.04 |
DFS / BFS (κΉμ΄μ°μ νμ / λλΉμ°μ νμ) (0) | 2022.01.28 |
ꡬν μκ³ λ¦¬μ¦ (Implementation Algorithm) (0) | 2022.01.26 |