- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ์ฌ๊ท
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์นด์นด์ค ์ฝํ
- Python
- ์นด์นด์ค2021
- ๋นํธ๋งต
- ๋ค์ต์คํธ๋ผ
- ๋นํธ๋ง์คํน
- Union-Find
- golang
- ๋ฐฑ์ค
- DFS
- DP
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ํธ๋ฆฌ
- go
- ์น๋ฆฐ์ด
- nestjs
- ์ํฐ๋
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ์์ฝ๋
- ์ด๋ถํ์
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- BFS
- C++
- js
- LCs
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/Python] 12757. ์ ์ค์ JBNU ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/12757
๋ฌธ์ ์์
M๊ฐ์ ๋ช ๋ น๋ฌธ์ ์ฒ๋ฆฌํ ๋ "2 num val" ์ ๋ํด์
num์ผ๋ก ๊ฒ์๋ key์ val์ ๋ฐ๊พธ๋ผ๊ณ ํ๋๋ฐ,
2๊ฐ์ key๊ฐ ๋ชจ๋ ์กด์ฌํ๋ ์ํฉ์์ ๋๋ค ๋ฐ๊พธ๋๊ฑด์ง, ์๋๋ฉด ์์ ์๋ฐ๊พธ๋๊ฑด์ง ๋ช ์ํด์ฃผ์ง ์์์ ํท๊ฐ๋ ธ๋ค.
๋๋ค ํด๋ณด๋๊น ์์ ์๋ฐ๊พธ๋ ๊ฒ์ด ์ ๋ต์ด์๋ค. ๋ฌธ์ ์์ ์ด ๋ถ๋ถ์ ๋ช ํํ๊ฒ ํํํด์ฃผ๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ์๋ค.
ํ์ด
์ด๋ค ์ซ์๊ฐ ๋ค์ด์์ ๋, JBNU์์์ ๊ทธ ์ซ์์ ๊ฐ์ฅ ๊ฐ๊น์ฐ๋ฉด์ K์ดํ๋ก ์ฐจ์ด๋๋ key๋ฅผ ์ฐพ์์ผ ํ๋ค.
์ค์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ key๋ค์ list์ธ keys๋ฅผ ์ด๋ถํ์์ ํตํด ์ฝ์ ํด์ ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ค ์ซ์์ ๋ํด ๊ฐ์ฅ ๊ฐ๊น์ด key๋ฅผ ์ฐพ์ ๋์๋ ์ด๋ถํ์์ ์ด์ฉํ๋ค.
[1, 2, 5] ์ํ์์ 4๋ฅผ ์ด๋ถํ์ํ๋ฉด 2๊ฐ ๋์จ๋ค. ๋ฐ๋ผ์ 2-1 = 1 ๋ฒ์งธ ๊ฐ๊ณผ 2๋ฒ์งธ ๊ฐ์ ๋น๊ตํด์ ๋ ๊ฐ์ค์ ์ด๋ค ๊ฒ์ด 4์ ๋ ๊ฐ๊น์ด์ง ๋น๊ตํ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๊ฐ๊ณผ 4์ ์ฐจ์ด๊ฐ ๋์ผํ๋ฉด -2๋ฅผ returnํ์ฌ ์ฐพ์ ๊ฐ์ด 2๊ฐ์์ ๋ํ๋ด์ฃผ์๋ค.
์ด๋ถํ์์ ์ง์ ๊ตฌํํ์ง ์๊ณ python bisect ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์๋ค.
๊ณต์ ๋ฌธ์ : https://docs.python.org/ko/3/library/bisect.html
๊ธฐ๋ณธ input์ ์ผ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ์๋ ์ฝ๋ ๋์ค์ ๋ฃ์ด input๋์ ์ sys.stdin.readline์ ์ฌ์ฉํ๋ค.
import sys
input = sys.stdin.readline
์ฝ๋
import bisect
import sys
input = sys.stdin.readline
inputs = input().split()
N = int(inputs[0])
M = int(inputs[1])
K = int(inputs[2])
jbnu = dict() # key - value ์ ์ฅํ dict
keys = [] # key ์ ์ฅ list, ์ ๋ ฌ๋ ์ํ, ์ด๋ถํ์์ผ๋ก key ์ฝ์
def addKey(key):
idx = bisect.bisect_left(keys, key)
keys.insert(idx,key)
def findKey(num):
val = jbnu.get(num, -1)
if val != -1:
return num
idx = bisect.bisect(keys, num) #
if idx == 0: # ๋งจ ์
if abs(keys[idx] - num) <= K:
return keys[idx]
elif idx == len(keys): #๋งจ ๋ค
if abs(num - keys[idx-1]) <= K:
return keys[idx-1]
else:
left = num - keys[idx-1]
right = keys[idx] - num
if left == right and left <= K:
return -2 # ๋ ๊ฐ ๊ฒ์๋จ
if left < right and left <= K:
return keys[idx-1]
if right < left and right <= K:
return keys[idx]
return val # -1
for n in range(N):
inputs = input().split()
key = int(inputs[0])
val = int(inputs[1])
# key - k ~ key + k๊น์ง ์ ๋ถ ์ฑ์ฐ๊ธฐ
jbnu[key] = val
addKey(key)
for m in range(M):
inputs = input().split()
if inputs[0] == '1': # INSERT
key = int(inputs[1])
val = int(inputs[2])
jbnu[key] = val
addKey(key)
elif inputs[0] == '2': # UPDATE
num = int(inputs[1])
val = int(inputs[2])
key = findKey(num) # ๋๊ฐ๊ฐ ๊ฒ์๋๋ฉด ๊ฑ ์๊ฒ๋ ์๋ฐ๊ฟ
if key >= 0:
jbnu[key] = val
else:
num = int(inputs[1])
key = findKey(num)
if key == -2:
print('?')
elif key == -1:
print(-1)
else:
print(jbnu[key])
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS/์๋ฃ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ (BST) (0) | 2021.10.09 |
---|---|
[๋ฐฑ์ค/Python] 1501. ์์ด ์ฝ๊ธฐ (0) | 2021.10.06 |
[๋ฐฑ์ค/C++] 4195. ์น๊ตฌ ๋คํธ์ํฌ (0) | 2021.09.28 |
[๋ฐฑ์ค/C++] 1253. ์ข๋ค (0) | 2021.09.28 |
[C++/๋ฐฑ์ค] 22352. ํญ์ฒด ์ธ์ (0) | 2021.09.14 |