๐Ÿ“Œ FACTS

์นดํŽ˜์— ์•‰์•„ backjoon ๋ฌธ์ œ ํ’€์ด ํ–ˆ์Œ

3์ผ์ฐจ ๋ฉด์ ‘ ์Šคํ„ฐ๋”” ์ง„ํ–‰ ํ–ˆ์Œ

  1. 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์ž ์“ฐ๊ธฐ(๊ฒฝ๋ ฅ์‚ฌํ•ญ)
  • [] ๋‹ค์Œ ๋ฉด์ ‘์Šคํ„ฐ๋””๋ฅผ ์œ„ํ•ด ๋กœ๊ทธ์ธ ๋กœ์ง์— ๋Œ€ํ•ด ์•„๋Š”๊ฒƒ ์„œ์ˆ ํ•ด๋†“๊ธฐ