๐ FACTS
์นดํ์ ์์ backjoon ๋ฌธ์ ํ์ด ํ์
3์ผ์ฐจ ๋ฉด์ ์คํฐ๋ ์งํ ํ์
- backjoon ๋ฌธ์ ํ์ดํจ ->14889๋ฒ ํ์ดํ์
(์ค๋ ํ์ดํ๊ฒ) [https://thread-ounce-2af.notion.site/14889-b1d6154035da438db97bb06731acfd90]
๋ฐฑํธ๋ํน๊ณผ ์์ด์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ํ๋ฆฌ๋ ๋ฌธ์ ์๋ค.
n๋ช ์ ์ฌ๋์ด ์ฃผ์ด์ง๋ฉด n๋ฒ์จฐ ์ฌ๋์ nij์ ๋ฅ๋ ฅ์น๋ฅผ ๊ฐ์ง๋๋ฐ n00 ์ ๊ฒฝ์ฐ (0,0) ์ ์๋ ์์น๋งํผ value๋ฅผ ๊ฐ์ ธ๊ฐ๋ค.
๊ณตํํ ํ ๊ตฌ์ฑ์ ์ํด ๊ฒ์์ ํ๋ player ๋ค์ ํญ์ ์ง์๋ก ์ฃผ์ด์ง๊ณ ๊ฐ player๋ค์ ๋ค๋ฅธ player(n)๋ฒ์งธ ์ ์์ ํ์ด ๋์์๋ ๋ง๋ค player๊ฐ ๊ฐ์ง๋ value๊ฐ์ด ์ ๋ถ ๋ค๋ฅด๋ค
| i/j | 0 | 1 | 2 | 3 |
| 0 | 0 | 2 | 6 | 8 |
| 1 | 3 | 0 | 6 | 8 |
| 2 | 4 | 2 | 0 | 8 |
| 3 | 8 | 2 | 6 | 0 |
์ด๋ผ๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด
์ง์ ๋ถ๋ฐฐ๋ฅผ ์ํด Aํ๊ณผBํ์ผ๋ก ๋๋๊ธฐ ์ํ ์ฐ์ฐ์ ์ํํ๋ค i ) N//2
ํ์ ๋๋ณ์๋ 1๋ฒ 3๋ฒ ๊ณผ 0๋ฒ๊ณผ 2๋ฒ์ด ํ์ด ๋์๋ค๊ณ ๊ฐ์ ํ์
ii) A =s13+ s31 ์ด๋ ์ค๋ณต๊ฐ์ด ์กด์ฌํ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ์ค๋ณต์ ์ ๊ฑฐ ํด์ค ํ ์ฐ์ฐํ์ ๋ค์๊ณผ ๋๊ฐ์ด Bํ๋ ์ฐ์ฐ์ ๊ฑฐ์นํ ํ๊ฐ์ ๋ฅ๋ ฅ์น ๊ฐ์ ๋น๊ตํ๊ณ ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๋ค 2๋ฒ๊ณผ 1๋ฒ์ด ํ์ด๋๊ณ 3๋ฒ๊ณผ 0๋ฒ ์ฒ๋ผ ๋ถ๊ธฐ๋ฅผ ์ชผ๊ฐ์ด ์ฐ์ฐ์ ์ง์ํด์ค๋ค
from itertools import combinations as c
n = int(input())
array = [i for i in range(n)]
matrix = []
for _ in range(n):
matrix.append((list((map(int, input().split())))))
result = int(1e9)
for r1 in c(array, n // 2): # n/2 ๋งํผ
start, link = 0, 0
r2 = list(set(array) - set(r1)) # ์ค๋ณต์ ๊ฑฐ
for r in c(r1, 2):
start += matrix[r[0]][r[1]]
start += matrix[r[1]][r[0]]
for r in c(r2, 2):
link += matrix[r[0]][r[1]]
link += matrix[r[1]][r[0]]
result = min(result, abs(start - link)) # ํ์๋ ๋ฌด์กฐ๊ฑด ์ ์
print(result)
๋ฉด์ ์คํฐ๋
๋ฉด์ ์คํฐ๋์์๋ BFS์DFS ๊ทธ๋ฆฌ๊ณ JWT์ OAuth์ ์ฐจ์ด์ ์ ๋ํด ๋ ผ์ํ๋ค.
์๊ณ ๋ฆฌ์ฆ์ค ๊ฐ์ฅ ๋ง์ด ๋ค๋ฃจ์ด๋ดฃ๊ณ ๊ฐ์ฅ ์ค์ํ๊ณผ ๊ฐ๊น๋ค๊ณ ๋๊ปด์ง๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ฐฑํธ๋ํน๊ณผ ์ ์ฌํ์ง๋ง ๊ทธ๋ํ๋ก ์ ๊ทผํ์ฌ ๋จ์ํ๊ฒ ์ดํด ํ ์ ์์๋ค.
DFS์ BFS ๋ ๊น์ด์ ๋์ด๋ก ๋๋๋๋ฐ ์์ ๊ฐ๋ ์ผ๋ก๋ ์ฐ์ ํ์์ด ์๋ค.
๋ฏธ๋ก๋ฅผ ํ์ํ ๋ ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์์๋ ๊น์ง ๊ณ์ ๊ฐ๋ค๊ฐ ๊ฐ ์ ์๋ ๊ธธ์ ๋์ฐฉ ํ๋ค๋ฉด, ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๊ธฐ์ ์ผ๋ก ๋์๊ฐ ๋์์จ ๊ณณ์ ์ ์ธํ ๋ฐฉํฅ์ผ๋ก ๋ค์ ํ์์ ์์ํ๋ ๋ฐฉ๋ฒ์ด๊ณ , ๋ฏธ๋ก๋ฅผ ํ์ ํ ๋ ๋ถ๊ธฐ์ ์ด ๋ฐ์ํ๊ฑฐ๋ ์ธ์ ํ ๊ธธ์ ์ด๋ํ๋ ๋ฐฉ์์ด๋ค
BFS๋ ๊ตฌํ์ด DFS์ ๋นํด ๋ณต์ก ํ์ง๋ง ๊ฒ์์๋๊ฐ ๋น ๋ฅธ ์ฅ์ ์ด ์๊ณ ๋ฐ๋๋ก DFS๋ ๊ตฌํ์ด ์ฝ์ง๋ง ๊ฒ์ ์๋๋ ๋๋ฆฌ๋ค. DFS์ ๊ฒฝ์ฐ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ํํ๋ก ์ ์์ํ๋ฅผ ํฌํจํ ๋ค๋ฅธ ํํ์ ํธ๋ฆฌ์ํ๋ ๋ชจ๋ DFS์ ํ์ข ๋ฅ์ด๋ค
BFS์ ๊ฒฝ์ฐ ํ๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ , ์ธ์ ํ ์ ์ ์ ๋ชจ๋ ์ ์ฅํ๊ณ ์์๋๋ก ๋ฐฉ๋ฌธํ๊ธฐ ๋๋ฌธ์ ์คํ์ผ๋ก๋ ๊ตฌํ์ด ์ด๋ ต๋ค, ๋ํ ์ธ์ ํ node๋ฅผ ๋ฐ๊ฒฌ๊ณผ ๋์์ ๋ฐฉ๋ฌธ์ด ์ด๋ฃจ์ด์ง๋ค.
JWT์ OAuth์ ์ฐจ์ด
์ฐ์ ์ jwt์ oauth๋ ๋น๊ต ๋์์ด ๋ ์ ์๋ค๊ณ ์๊ฐํ๋ค.. jwt๋ ์ฌ๊ณผ๋ผ๋ฉด oauth๋ ์์๊ธฐ ๋๋ฌธ์ธ๋ฐ ์ ๋ฌธ์ ์ธ ๋จ์ด๋ก๋ jwt๋ token์ ํ ์ข ๋ฅ์ด๊ณ , oauth๋ framewrok์ด๊ธฐ ๋๋ฌธ์ธ๋ฐ..
์ง๋ฌธ์ ์๋๋ ๋ชจ๋ฅด๊ฒ ์ผ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋น๊ต๋ฅผ ํ์๋ฉด
-> Oauth์์ ๋์ค๋ OAuth bearer token๊ณผ ๋จ์ํ jwt ํ ํฐ์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ? ๊ฐ ์ฐ์๋๋ค.
OAuth ํ ํฐ์ ์ด๋ค ์ฌ์ฉ์์ ์ ๋ณด์ ์ค์ํ ์ ๋ณด๊ฐ ๋ค์ด์์ง ์๊ณ ๋ฌด์์, ๋๋ค์ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ์๋๋ฐ JWT Token ๊ฐ์ ๊ฒฝ์ฐ๋ค๋ ์ ์๋ฏธํ ์ ๋ณด์ ๋ฐ์ดํฐ๋ค์ด ์ํธํ ๋์ด ์๋ค.
JWT token์ ๋จ์ ์ผ๋ก๋ ๋ช ํํ ์ ๋ณด๋ฅผ ๊ฐ์ง ์ํ๋ก ์ด ์ ๋ณด๋ค์ db์์ ์ฌ์ฉ์ ์ ๋ณด ์กฐ์์ ํ ํ token์ ์ง์ ๋ฐ๋ ๋ด์ฉ๋ค์ update ํ ์ ์๋ค.
ํ ํฐ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ก/์ถ๋ ฅ ํ ๊ฒฝ์ฐ ๋ด์ ๋ฐ์ดํฐ๊ฐ ์ปค์ง๋ค๋ฉด ํธ๋ํฝ ํฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์น๋ ๋จ์ ์ด ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ?, ์ฅ๋จ์ ์ ๋ฌด์์ธ๊ฐ?
a. ์ธ๋ฑ์ค๋ ๋ฌด์์ธ๊ฐ๋ถํฐ ์ ๊ทผํด๋ณด์.
i. ์ธ๋ฑ์ค๋ ์ถ๊ฐ์ ์ธ ์ฐ๊ธฐ ์์
๊ณผ ์ ์ฅ ๊ณต๊ฐ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ์ํ labelling์ด๋ผ๊ณ ์๊ฐํ๋ค.
b.์ธ๋ฑ์ค์ ๊ตฌ์กฐ
๋ํ์ ์ผ๋ก ํด์ ํ
์ด๋ธ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ณ ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ด ํ์ํ ๋ ํด์ํ
์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ฉํ๋ค, ํ์ง๋ง ๋ถ๋ฑํธ ์ฐ์ฐ์ด ์์ฃผ ์ฌ์ฉ๋๋ db์ ๊ฒฝ์ฐ ๊ฒ์์ ์ํด์ B-tree ๋๋ B+tree๋ฅผ ์ฌ์ฉํ๋ค
c. B-Tree?
๋ฐ์ดํฐ๋ฒ ์ด์ค์ค ํ์ผ ์์คํ
์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํธ๋ฆฌ๋ก, ์ด์ง ํธ๋ฆฌ๋ฅผ ํ์ฅํด ํ๋์ ๋
ธ๋๊ฐ ๊ฐ์ง ์ ์๋ ๋
ธ๋๊ฐ ๊ฐ์ง ์ ์๋ ์์ ๋
ธ๋์ ์ต๋ ์ซ์๊ฐ 2๋ณด๋ค ํฐ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
d. B+Tree?
์์ ๋
ธ๋๊ฐ 2๊ฐ ์ด์์ธ B-tree๋ฅผ ๊ฐ์ ์ํจ ๊ตฌ์กฐ๋ก, ๋ฆฌํ๋
ธ๋๋ง ์ธ๋ฑ์ค์ ํจ๊ป ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋๋จธ์ง ๋
ธ๋๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํ ์ธ๋ฑ์ค๊ฐ๋ง์ ๋ณด์ ํ๋ค.
-> ๋ฆฌํ ๋
ธ๋๋ค์ ๋งํฌ๋๋ฆฌ์คํธ๋ก ๊ตฌํ๋์ด ์๋ค.
-> ๋ฐ์ดํฐ ๋
ธ๋ ํฌ๊ธฐ๋ ์ธ๋ฑ์ค ๋
ธ๋ ํฌ๊ธฐ์ ๊ฐ์ง ์์๋ ๋๋ค.
=> ์ฌ์ฉํ๋ ์ด์
-> ์ฑ
๋ด์ฉ ์ค ์ด๋ ๋ถ๋ถ์ ํ์ํ์ฌ ๋ค์์ ์ฑ
์ ํผ ์ณค์๋ ํด๋นํ๋ ๋ถ๋ถ์ ์ฐพ๊ธฐ ์ํด์ marking์ ํ๋ ํ์
-> ๋ง์ฝ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ?
์ฑ
์ ํผ์น ํ ๋ชจ๋ ์ฑ
์ ํ์ด์ง๋ฅผ ๊ฒ์ฌํด์ ์ฐพ๋ ๋ถ๋ถ์ ์ฐพ์์ผํ๋ค
=> ์ฅ/๋จ์
-> ํ
์ด๋ธ์ ์กฐํํ๋ ์๋์ ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์๋ค.
-> ์ ๋ฐ์ ์ธ ์์คํ
์ ๋ถํ๋ฅผ ์ค์ธ๋ค
---> full scan์ ์ํํ๊ฑฐ๋ search๋ฅผ ์ํ ๋นํ๋ ๋ฐ์ดํฐ๋ค์ด ๋ง์๋ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
->>๋จ์
-> ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด db์ ์ฝ 10%์ ํด๋นํ๋ ์ ์ฅ๊ณต๊ฐ์ ์๋ชจํด์ผํ๋ค.
-> ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ถ๊ฐ ์์
์ด ํ์ํ๋ค
-> ์ธ๋ฑ์ค๋ฅผ ์ ๋ชป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์คํ๋ ค ์ฑ๋ฅ์ด ๋ ์ ํ๋๋ ์ญํจ๊ณผ ๋ฐ์
EX) Create,Delete,Update๊ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ ๊ฒฝ์ฐ!
- ๊ท๋ชจ๊ฐ ์์ ํ
์ด๋ธ
- INSERT/UPDATE/DELETE๊ฐ ๋น๋ฒํ์ง ์์ ์ปฌ๋ผ
- JOIN/WHERE ORDER BY ์ฒ๋ผ ์ฐ๊ด๊ด๊ณ์ ์์ฃผ ์ด์ฉ๋๋ ์ปฌ๋ผ
- ๋ฐ์ดํฐ ์ค๋ณต๋๊ฐ ๋ฎ์ ์ปฌ๋ผ
- [] ์ค๋ ๋ง์๋๊ฑฐ ๋ง์ด ๋จน๊ธฐ
- [] ์ฐํด ์ ์ฌ๊ณ backjoon ํ๋ฃจ 3๋ฌธ์ ์ด์ํ๊ธฐ
- [] ์ค๋ ํ์ตํ ๋ด์ฉ๋ค ๊ฐ๋ฐ ๋ธ๋ก๊ทธ์ ์ ์ ๋ฆฌํ๊ธฐ
- [] ์ด๋ ฅ์ ๋ค๋ฌ๊ธฐ
- [] ์นด์นด์ค 2์ฐจ ์ด๋ ฅ์ 1500์ ์ฐ๊ธฐ(๊ฒฝ๋ ฅ์ฌํญ)
- [] ๋ค์ ๋ฉด์ ์คํฐ๋๋ฅผ ์ํด ๋ก๊ทธ์ธ ๋ก์ง์ ๋ํด ์๋๊ฒ ์์ ํด๋๊ธฐ