https://www.acmicpc.net/problem/1920
์ ์ฐพ๊ธฐ ์ฑ๊ณต
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)์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ ํ ๋ชจ์ (0) | 2023.08.07 |
---|