์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 32
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ๊ธฐ๋ณธ ์ ๋ ฌ ํต์ฌ
- ์ฌ๊ท ํธ์ถ ํต์ฌ
๋์ด์ ์ ๋ ฌ
๊ฐ๋จํ ํค(๋์ด)-๊ฐ(์ด๋ฆ)์ ํํ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ ๋ฌธ์ .
import queue
pq = queue.PriorityQueue()
n = int(input())
f = 0
for _ in range(n):
p, name = input().split(' ')
p = int(p)
pq.put([p, f, name])
f += 1
while not pq.empty():
e = pq.get()
print(e[0], e[2])
์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํด ์ ๋ ฅ๋ฐ์๋๋ง๋ค ์ ๋ ฌํ๋๋ก ํ๋ ๋ฐฉ๋ฒ
n = int(input())
f = 0
l = []
for _ in range(n):
p, name = input().split(' ')
p = int(p)
l.append([p, f, name])
f += 1
l.sort()
for e in l:
print(e[0], e[2])
์ ๋ ฅ ๋ค ๋ฐ๊ณ ์ ๋ ฌํ๋๋ก ํ๋ ๋ฐฉ๋ฒ
์ ๋ ๋ฐฉ์์์ f๋ฅผ ์ด ์ด์ ๋ ์
๋ ฅ๋ฐ์ ์์๋ฅผ ์ํ ๊ฒ์ธ๋ฐ,
์ ๋ ฌ ๋ฐฉ์์ด 0๋ฒ์งธ ์์์์ ๋น๊ต, 1๋ฒ์งธ ์์์์ ๋น๊ต, 2๋ฒ์งธ ์์์์ ๋น๊ตํ๊ธฐ๋๋ฌธ์ด๋ค.
์ ๋ ฌํ ๋ ์ฌ์ฉํ ๊ฐ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด f๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
n = int(input())
f = 0
l = []
for _ in range(n):
p, name = input().split(' ')
p = int(p)
l.append([p, name])
ใ
ฃ.sort(key=lambda x : x[0])
for e in l:
print(e[0], e[1])
์ฌ๊ธฐ์ ์ฌ์ฉํ๋ sort์ key๋ ์ ๋ ฌํ ๋ ์ฌ์ฉํ ๊ฐ์ ๋ํ๋ผ ์ ์๋ค.
lambda๋ ํ์ค ํจ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
lambda ๋งค๊ฐ๋ณ์ : ๋ฐํ๊ฐ ์ด๋ฌํ ํ์์ด๋ค.
lambda parameters : expression # <-์ด๋ฐ ๋๋ค์์
def func(parameters): # <- ์ด๋ฐ ํจ์์ฒ๋ผ ๋์
return expression
์ขํ ์ ๋ ฌํ๊ธฐ
์ด ๋ฌธ์ ๋ ์ ๋ฌธ์ ๋ณด๋ค ๋ ๊ฐ๋จํ๋ค.
๊ทธ๋ฅ ์
๋ ฅ๋ฐ๊ณ ์ ์ํ ๊ฐ์ ๊ฐ์ง๋ ๋ฆฌ์คํธ๋ก ๋ณํํด์ ๋ฆฌ์คํธ์ ์ฝ์
ํ,
sort ์ฌ์ฉํ๋ฉด ๋๋๋ค.
n = int(input())
f = 0
l = []
for _ in range(n):
l.append(list(map(int, input().split(' '))))
l.sort()
for e in l:
print(e[0], e[1])
์ ์ ๋ ฌํ๊ธฐ3
์ต๋๋ก ์ฃผ์ด์ง๋ ์๋ค์ด 10,000,000๊ฐ๊ณ , ์๊ฐ์ ํ์ด 3์ด๋ผ์ ๋๋ํด๋ณด์ด๋๋ฐ,
๊ทธ๋ฅ $O(nlogn)$์ผ๋ก ํด๋ ๋๊ฒ ์ง?
์ ๋ ฅ๋ฐ์ ๊ฒ๋ค์ด ๋ง์ผ๋ฉด sys.stdin.readline()๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
์ ์ถ๋ ฅ ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ผ๋ก ์ธํด์ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.import sys n = int(sys.stdin.readline()) s = [0 for _ in range(10001)] for _ in range(n): s[int(sys.stdin.readline())] += 1 for e in range(10001): if s[e]: print('{}\n'.format(e) * s[e], end='')
๋ฐ์ดํฐ๋ 10,000,000๊ฐ, ์๊ฐ์ ํ 3์ด, ๋ฉ๋ชจ๋ฆฌ 8MB,
์๊ฐ์ ๋๋ํ๋ฐ ๋นํด ๋ฉ๋ชจ๋ฆฌ๋ ์์ฒญ ์ ๋ค.
์ ์ํ์ 4๋ฐ์ดํธ๋ผ๊ณ ํ ๋ 40,000,000Byte๋ ์ฝ 40MB,
-> ์ด ๋ฐ์ดํฐ๋ค์ ๋ค ์ ์ฅํ๋ผ๋๊ฒ ์๋
์๊ฐ์ ํ 3์ด์ NlogN? 232534966 ๊ฐ๋ฅํ๊ธด ํ๊ฒ ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ํ๋ฒ ๋ณด์.
๋ฐ์ดํฐ์ ๋ฒ์๋ 1 ~ 10000์ผ๋ก, 10000000๊ฐ์ ๋ฐ์ดํฐ ์ค์์ ์ค๋ณต์ด ์์ฒญ ๋ง์ด ์ผ์ด๋๊ฒ ๋ค.
๊ทธ๋ ๋ค๋ฉด 1 ~ 10000๋ฒ์์ ์ซ์๋ค์ ๊ฐฏ์๋ฅผ ์ธ์ ์ถ๋ ฅํ๋๊ฑด ์ด๋จ๊น?
๋ฉ๋ชจ๋ฆฌ๋ 40KB์ ๋ ๋ค๊ณ , ์๊ฐ๋ณต์ก๋๋ $O(n)$์ด๋ค.
์ซ์๋ค์ ๊ฐฏ์๋ฅผ ์ธ์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ Counting sort(๊ณ์ ์ ๋ ฌ)์ด๋ผ๊ณ ํ๋ค.
์๋๋ input์ฌ์ฉํ๋ค๊ฐ ์๊ฐ์ด๊ณผ ๋ ๊ฒฝ์ฐ์ sys.stdin.readline() ์ฌ์ฉํด์ ์๊ฐ์ด๊ณผ ํด๊ฒฐํ ๊ฒฝ์ฐ
ํผ๋ณด๋์น ์
n๋ฒ์งธ ํผ๋ณด๋์น ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์
n = int(input())
memo = [0 for _ in range(n + 1)]
memo[1] = 1
for i in range(2, n+1):
memo[i] = memo[i - 1] + memo[i - 2]
print(memo[n])
DP์ ๋ฉ๋ชจ์ด์ ์ด์ ์ด์ฉํด์ ํ์๋ค.
n = int(input())
a, b = 0, 1
while n > 0:
a, b = b, a + b
n -= 1
print(a)
๋ฉ๋ชจ๋ฅผ ์ํ ๋ณ์๋ฅผ ๋จ ๋๊ฐ๋ฅผ ์ฌ์ฉํด์ ํธ๋ ์ฝ๋
1๋ฒ์ด ์์์ ์ฒ์์ผ๋ก ์์ฑํ ์ฝ๋๊ณ ,
2๋ฒ์ด ๊ทธ ๋ค์์ผ๋ก ์์ฑํ ์ฝ๋๋ค.
๋๋ฒ์งธ ์ฝ๋๊ฐ ์๊ฐ๋ ๋ ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ํจ์ฌ ์ ๊ฒ ๋ค ์๊ฐํ๋๋ฐ,
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๋ ๊ฐ๊ณ , ์๊ฐ๋ ๋ ๋๋ ธ๋ค.
๋ ์ค๊ฐ์ ์๋ ๋ถ๋ถ์ while์ for-range๋ก ์์ฑํ ๋ถ๋ถ์ธ๋ฐ, ์๊ฐ์ด ๊ฐ์ฅ๋ง์ด ๊ฑธ๋ ธ๋ค.
(range์์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ ๋ฐํํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ธ๊ฐ๋ถ๋ค)
Z
def search(fx, tx, fy, ty, x, y):
if fx + 1== tx:
return 1
mx, my = (fx + tx) // 2, (fy + ty) // 2
block = (tx - mx) ** 2
if x < mx:
if y < my:
res = search(fx, mx, fy, my, x, y)
return res
else:
res = block + search(fx, mx, my, ty, x, y)
return res
else:
if y < my:
res = block * 2 + search(mx, tx, fy, my, x, y)
return res
else:
res = block * 3 + search(mx, tx, my, ty, x, y)
return res
n, x, y = list(map(int, input().split(' ')))
print(search(0, 2 << n, 0, 2 << n, x, y) - 1)
ํ๋ฉด [fx, tx), [fy, ty)์ ๋ํด 4๋ฑ๋ถํ์ฌ,
๋ฐฉ๋ฌธํ๋ ์์๋๋ก ์ผ์ชฝ ์๋ฅผ 0, ์ค๋ฅธ์ชฝ ์๋ฅผ 1, ์ผ์ชฝ ์๋๋ฅผ 2, ์ค๋ฅธ์ชฝ ์๋๋ฅผ 3์ผ๋ก ๋๊ณ ,
์ด๋ค์ ํ๋ฉด์ ๋ํด ๋ถ๋ถ๊ณต๊ฐ์ด๋ผ๊ณ ํ ๋,
0๋ฒ์งธ ๋ถ๋ถ๊ณต๊ฐ์ ์์ ๋ ์ด์์ ๋ถ๋ถ๊ณต๊ฐ์ด ์กด์ฌํ์ง ์๋๋ค.
1๋ฒ์งธ ๋ถ๋ถ๊ณต๊ฐ์ ์์ 1๊ฐ ๋ถ๋ถ๊ณต๊ฐ์ด ์กด์ฌํ๋ค.
2๋ฒ์งธ ๋ถ๋ถ๊ณต๊ฐ์ ์์ 2๊ฐ ๋ถ๋ถ๊ณต๊ฐ์ด ์กด์ฌํ๋ค.
3๋ฒ์งธ ๋ถ๋ถ๊ณต๊ฐ์ ์์ 3๊ฐ ๋ถ๋ถ๊ณต๊ฐ์ด ์กด์ฌํ๋ค.
๋ฐ๋ผ์ n๋ฒ์งธ ๋ถ๋ถ๊ณต๊ฐ์ ์์๋ n๊ฐ์ ๋ถ๋ถ๊ณต๊ฐ์ด ์กด์ฌํ๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ ํ๋ฉด์์ ์ขํ(x, y)๋ฅผ ์ฐพ์ผ๋ ค๋ฉด,
n๋ฒ์งธ ๋ถ๋ถ๊ณต๊ฐ์์ ์ฐพ๋๋ฐ์ ์์ + n๊ฐ์ ๋ถ๋ถ๊ณต๊ฐ์ ๋์ด๋ฅผ ํตํด ๊ตฌํ ์ ์๋ค.
๊ฐ ํ๋ฉด์์ ํ๋์ ๋ถ๋ถ๊ณต๊ฐ์ ๋์ด๋ฅผ block์ด๋ผ ํ ๋,
-> $block * n + search(n๋ฒ์งธ ๋ถ๋ถ๊ณต๊ฐ ์์ญ, x, y)$์ด๋ผ ํ ์ ์๋ค.
block = ํ ๋ณ์ ๊ธธ์ด๋ฅผ $(fx + tx)/2$๋ก ํ๋ ์ ์ฌ๊ฐํ ํํ์ ๋ถ๋ถ๊ณต๊ฐ
๋๊ธ๋จ๊ธฐ๊ธฐ