[BOJ] 1920λ² μμ°ΎκΈ° / μ΄λΆνμ / ν΄μν μ΄λΈ
https://www.acmicpc.net/problem/1920
1920λ²: μ μ°ΎκΈ°
첫째 μ€μ μμ°μ N(1 ≤ N ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Nκ°μ μ μ A[1], A[2], …, A[N]μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ M(1 ≤ M ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Mκ°μ μλ€μ΄ μ£Όμ΄μ§λλ°, μ΄ μλ€
www.acmicpc.net
μ μ°ΎκΈ° μ±κ³΅
1 μ΄ | 128 MB | 217313 | 66856 | 44340 | 30.018% |
λ¬Έμ
Nκ°μ μ μ A[1], A[2], …, A[N]μ΄ μ£Όμ΄μ Έ μμ λ, μ΄ μμ XλΌλ μ μκ° μ‘΄μ¬νλμ§ μμλ΄λ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ°μ N(1 ≤ N ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Nκ°μ μ μ A[1], A[2], …, A[N]μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ M(1 ≤ M ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ Mκ°μ μλ€μ΄ μ£Όμ΄μ§λλ°, μ΄ μλ€μ΄ Aμμ μ‘΄μ¬νλμ§ μμλ΄λ©΄ λλ€. λͺ¨λ μ μμ λ²μλ -231 λ³΄λ€ ν¬κ±°λ κ°κ³ 231λ³΄λ€ μλ€.
μΆλ ₯
Mκ°μ μ€μ λ΅μ μΆλ ₯νλ€. μ‘΄μ¬νλ©΄ 1μ, μ‘΄μ¬νμ§ μμΌλ©΄ 0μ μΆλ ₯νλ€.
μμ μ λ ₯ 1
5
4 1 5 2 3
5
1 3 7 9 5
μμ μΆλ ₯ 1
1
1
0
0
1
첫λ²μ§Έ μ μΆ
n = int(input())
arr = list(map(int,input().split()))
m = int(input())
arrM = list(map(int,input().split()))
arr.sort()
max_size = arr.pop()
for x in arrM:
if x <= max_size:
print(1)
else:
print(0)
λ¬Έμ λ₯Ό μλͺ» μ΄ν΄νλ€.
μ λ ₯λ°μ Nκ°μ μ μκ° 1~N κΉμ§μ μμΈλ° μμλ§ μμΈ μ λ ₯μΈ μ€ μμλ€.
ν μ€νΈ μΌμ΄μ€λ§ λ³΄κ³ λ΄λ©λλ‘ ν΄μνκΈ°,,
λλ²μ§Έ μ μΆ
n = int(input())
arr = list(map(int,input().split()))
m = int(input())
arrM = list(map(int,input().split()))
for x in arrM:
if x in arr:
print(1)
else:
print(0)
μκ°μ΄κ³Όκ° λμ¬κ±Έ μμμ§λ§ μΌλ¨ μλν΄λ΄€λ€.
μ νν μ΄λ€ μ΄μ λ‘ μκ°μ΄κ³Όκ° λλμ§ λͺ¨λ₯΄κ³
ν΄κ²°νλ €λ©΄ μ΄λ€κ±Έ μ΄μ©ν΄μΌνλμ§ λͺ¨λ₯΄λκΉ κ³΅λΆν΄λ³΄μ.
List μμ in μ°μ°μ μ±λ₯
list μ κ°μ΄ 컀μ§λ€λ©΄ , in μ°μ°μλ κ°μ λ€ νλνλ μ€μΊ νλ€μ κ²°κ³Όκ°μ λ°ννκΈ°λλ¬Έμ μ€λκ±Έλ¦°λ€. O(n)
import time
a = list(range(1, 10000001))
start1 = time.time()
print(1 in a) # 첫λ²μ§Έ κ°
end1 = time.time()
start2 = time.time()
print(10000000 in a) # λ§μ§λ§ κ°
end2 = time.time()
print(end1-start1)
print(end2-start2)
# μΆλ ₯
# True
# True
# 0.0012135505676269531
# 0.2061300277709961
맨 λ§μ§λ§ κ°μ κ²μνμ λλ μ²μλΆν° λκΉμ§ 10,000,000λ²μ κ²μ¬νλ€.
μΈλ²μ§Έ μ μΆ
n = int(input())
arr = set(map(int,input().split()))
m = int(input())
arrM = list(map(int,input().split()))
for x in arrM:
if x in arr:
print(1)
else:
print(0)
set μλ£κ΅¬μ‘°
- Mutable μλ£ν (λ³κ²½κ°λ₯ν κ°μ²΄)
κ°μ΄ λ³κ²½μ΄ μΌμ΄λ λ κ°μ²΄μ κ°μ΄ λ³κ²½
- μ€λ³΅X
- μ λ ¬X , μμκ° μμ
- μ μΈ a = set()
Set μμ in μ°μ°μ μ±λ₯
μκ°λ³΅μ‘λ O(1)
Setλ μμ μ΄ κ°μ§κ³ μλ μμλ€μ λκ° μλμ§ μ°Ύμλ΄μΌ ν ν λ°… μ΄λ»κ² Setμμμ μλ£ κ²μμ μμμκ°μ΄ λλκ±ΈκΉ?
ν΄μ ν μ΄λΈ
- (Key, Value)λ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ μλ£κ΅¬μ‘° μ€ νλ
- λΉ λ₯΄κ² λ°μ΄ν°λ₯Ό κ²μν μ μλ€
ν΄μ ν μ΄λΈμ΄ λΉ λ₯Έ κ²μμλλ₯Ό μ 곡νλ μ΄μ ?
- λ΄λΆμ μΌλ‘ λ°°μ΄(λ²ν·)μ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° λλ¬Έ
- λ²ν·(bucket)μ΄λ?
- ν΄μ ν μ΄λΈμ κ°κ°μ Keyκ°μ ν΄μν¨μλ₯Ό μ μ©ν΄ λ°°μ΄μ κ³ μ ν indexλ₯Ό μμ±νκ³ , μ΄ indexλ₯Ό νμ©ν΄ κ°μ μ μ₯νκ±°λ κ²μνκ² λλ€. μ¬κΈ°μ μ€μ κ°μ΄ μ μ₯λλ μ₯μλ₯Ό λ²ν· λλ μ¬λ‘―μ΄λΌκ³ νλ€.
μΆκ° μ μΆ
n = int(input())
arr = list(map(int,input().split()))
arr.sort()
m = int(input())
arrM = list(map(int,input().split()))
def binary(target):
left = 0
right = n-1
while left<=right:
mid = (left+right)//2
if arr[mid] == target:
return True
if arr[mid] < target:
left = mid + 1
elif arr[mid] > target:
right = mid - 1
for x in arrM:
if binary(x):
print(1)
else:
print(0)
μ΄λΆ νμ
μ΄μ§ νμμ μκ° λ³΅μ‘λλ O(logN)
μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ λ°°μ΄μμ μνλ μ«μ(target)μ μ°Ύλ μκ³ λ¦¬μ¦