[c++] BOJ 17244 :: ์•„๋งž๋‹ค์šฐ์‚ฐ
Algorithm ๋ฌธ์ œ/BOJ 2021. 8. 2. 16:32

๋ฌธ์ œ ์•„๋งž๋‹ค ์šฐ์‚ฐ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ ๊ฒฝ์žฌ์”จ๋Š” ์ €๋… ์•ฝ์†์„ ๊ฐ€๊ธฐ ์ „ ์ฑ™๊ธฐ์ง€ ์•Š์€ ๋ฌผ๊ฑด๋“ค์ด ์žˆ๋Š” ์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ๋‹ค. ํ•„์š”ํ•œ ๋ฌผ๊ฑด์€ ์ „๋ถ€ ์ฑ™๊ธด ๊ฒƒ ๊ฐ™์•˜๊ณ  ์™ธ์ถœ ํ›„ ๋Œ์•„์˜ค๋Š” ๊ธธ์— ๊ฒฝ์žฌ์”จ๋Š” ์™ธ์ณค๋‹ค. "์•„ ๋งž๋‹ค ์šฐ์‚ฐ!!!" ๊ฒฝ์žฌ ์”จ๋Š” ๋งค๋ฒˆ ์™ธ์ถœํ•˜๊ณ  ๋‚˜์„œ์•ผ ์–ด๋–ค ๋ฌผ๊ฑด์„ ์ง‘์— ๋†“๊ณ  ์™”๋‹ค๋Š” ๊ฒƒ์„ ๋– ์˜ฌ๋ฆด ๋•Œ๋งˆ๋‹ค ์ž์ฑ…๊ฐ์— ์‹œ๋‹ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ์‹ซ์—ˆ๋‹ค. ์™ธ์ถœ์ด ์žฆ์€ ๊ฒฝ์žฌ ์”จ๋Š” ๋ฐ˜๋ณต๋˜๋Š” ์ผ์„ ๊ทผ์ ˆํ•˜๊ธฐ ์œ„ํ•ด ๊ผญ ์ฑ™๊ฒจ์•ผ ํ•  ๋ฌผ๊ฑด๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ฐ‘, ์Šค๋งˆํŠธํฐ, ์šฐ์‚ฐ, ์ฐจ ํ‚ค, ์ด์–ดํฐ, ์‹œ๊ณ„, ๋ณด์กฐ ๋ฐฐํ„ฐ๋ฆฌ ๋“ฑ ์ข…๋ฅ˜์™€ ๊ฐœ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•˜๋‹ค. ํ‰์†Œ ๋ถˆํ•„์š”ํ•œ ์›€์ง์ž„์„ ์•„์ฃผ ์‹ซ์–ดํ•˜๋Š” ๊ฒฝ์žฌ ์”จ๋Š” ์ด ๋ฌผ๊ฑด๋“ค์„ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ์ฑ™๊ฒจ์„œ ์™ธ์ถœํ•˜๋Š” ์ด๋™ ๊ฒฝ๋กœ๋ฅผ ์•Œ๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ฒฝ์žฌ ์”จ๋Š” ํ•œ ๊ฑธ์Œ์— ์ƒํ•˜์ขŒ์šฐ์— ์ธ์ ‘ํ•œ ์นธ์œผ๋กœ๋งŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ์žฌ ์”จ..

์ธ์ฆ ๋ฐฉ์‹ :: ๊ธฐ๋ณธ ์ธ์ฆ ์›๋ฆฌ๋ถ€ํ„ฐ MSA ์ธ์ฆ๊นŒ์ง€
์›น (WEB)/๊ณต๋ถ€ 2021. 7. 22. 08:54

์ธ์ฆ ๋ฐฉ์‹ 1. API key๋ฅผ ํ†ตํ•œ ์ธ์ฆ ๊ณผ์ • user๊ฐ€ login ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. Client๋Š” ์ด๋ฏธ Server์— ๋“ฑ๋กํ•œ API key๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. Client๋Š” user๊ฐ€ ์ž…๋ ฅํ•œ Login ์ •๋ณด๋ฅผ ๋ฐ›์•„์„œ API key์™€ ํ•จ๊ป˜ Login API๋ฅผ ์š”์ฒญํ•œ๋‹ค. Server๋Š” API key๋ฅผ ํ†ตํ•ด ํ•ด๋‹น Client๊ฐ€ ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ์ง€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. Sever๋Š” Login ์ •๋ณด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น User๊ฐ€ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋‹จ์  API key๋Š” ๋ชจ๋“  Client๋“ค์ด ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ์ถœ๋˜๋ฉด ์ „์ฒด API๊ฐ€ ๋…ธ์ถœ๋œ๋‹ค. API key๋Š” ์‹œ๊ฐ„์ด ๋ฌด์ œํ•œ์ด๊ณ  ํ•œ ๋ฒˆ ๋…ธ์ถœ๋˜๋ฉด API key ๋ณ€๊ฒฝ ์ „๊นŒ์ง€ ๊ณ„์† ๋…ธ์ถœ๋œ๋‹ค. 2. API Token์„ ํ†ตํ•œ ์ธ์ฆ ๊ณผ์ • user๊ฐ€ login ์ •๋ณด๋ฅผ ์ž…..

Micro Service Architecture์ด๋ž€?
์›น (WEB)/๊ณต๋ถ€ 2021. 7. 22. 08:51

๊ธฐ์กด์˜ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ์กด์˜ ์•„ํ‚คํ…์ฒ˜๋Š” Monolitic ์•„ํ‚คํ…์ฒ˜๋กœ ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค์— ํ•˜๋‚˜์˜ ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋œปํ•œ๋‹ค. ์„œ๋น„์Šค ๋ณ„๋กœ ๋‚˜๋‰˜์–ด์ ธ์žˆ์ง€ ์•Š์œผ๋ฉฐ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ๊ฐฑ์‹ ํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ณ ์ž ํ•˜๋ฉด ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ๋‹ค์‹œ ๋ฐฐํฌ ๋œ๋‹ค. MSA ์žฅ์  ๊ฐ„๋‹จํ•˜๋‹ค. ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค. MSA ๋‹จ์  ๋นŒ๋“œ ์‹œ๊ฐ„, ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„, ๋ฐฐํฌ ์‹œ๊ฐ„์ด ๋น ๋ฅด๊ฒŒ ์ƒ์Šนํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์— ์žฅ์• ๊ฐ€ ์ „์ฒด ์„œ๋น„์Šค๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์„œ๋น„์Šค์˜ ์˜ํ–ฅ๋„๋‚˜ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํŒŒ์•…์ด ์–ด๋ ต๋‹ค. MSA ๊ตฌ์กฐ UI layer ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง layer ๋ฐ์ดํ„ฐ ์ ‘๊ทผ layer DB Micro Service Architecture MSA๋Š” ๋ฐฐํฌ ๋‹จ์œ„๋ฅผ ์„œ๋น„์Šค ๋ณ„๋กœ ์ชผ๊ฐ  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋œปํ•œ๋‹ค. ๋น„๊ตํ•˜์ž๋ฉด ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค. MSA ํŠน์ง• ๊ฐ ์„œ๋น„์Šค๋Š” mono..

Refresh Token
์›น (WEB)/๊ณต๋ถ€ 2021. 7. 22. 08:36

Refresh token์˜ ์žฅ์  ๋ณธ์ธ์€ ์›๋ž˜ API ์š”์ฒญ ์‹œ ๋งค๋ฒˆ Access Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์‹์œผ๋กœ API๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ์‹œ์Šคํ…œ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Refresh Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค. ๋˜ํ•œ, refresh token์ด ์žˆ์„ ๊ฒฝ์šฐ access token์˜ ์œ ํšจ ์‹œ๊ฐ„์„ ์งง๊ฒŒ ํ•˜์—ฌ ํƒˆ์ทจ ์‹œ ๋น ๋ฅด๊ฒŒ ๋ฌดํšจํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. Refresh token์˜ ๋™์ž‘ Access Token์„ ํ†ตํ•ด User๊ฐ€ request๋ฅผ ๋ณด๋‚ด๊ณ , ์œ ํšจ ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ ๋˜์—ˆ๋‹ค๋Š” ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค. User๋Š” Access Token๊ณ  ํ•จ๊ป˜ Refresh Token์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค. Refresh Token์ด ์œ ํšจํ•˜๋‹ค๋ฉด ์œ ํšจ์‹œ๊ฐ„์ด ๊ฐฑ์‹ ๋œ Access Token์ด ์ƒˆ๋กœ ๋ฐœ๊ธ‰๋˜์–ด User..

Token ์ €์žฅ ์œ„์น˜
์›น (WEB)/๊ณต๋ถ€ 2021. 7. 22. 08:34

token์€ cookie์— ์ €์žฅํ•  ์ˆ˜๋„, Web Storage์— ์ €์žฅํ•  ์ˆ˜๋„, Client ์ž์ฒด์— ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค. Cookie ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ๋Œ€ 4KB๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ Credential ์†์„ฑ์œผ๋กœ ํ—ˆ์šฉํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. HTTP Request ์‹œ ์ž๋™์œผ๋กœ ํฌํ•จ๋˜์–ด ์„œ๋ฒ„์— ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์ œ๊ณต ๊ฐ€๋Šฅํ•˜๋‹ค. HttpOnly ์„ค์ •์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. Web Storage Session Storage ์„œ๋ฒ„์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋‘ ์‚ญ์ œ ๋œ๋‹ค. 5~10MB์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. Local Storage ์„œ๋ฒ„์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ˜ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 5~10MB์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. Client Side ํด๋ผ์ด์–ธํŠธ ..

OAuth 2.0
์›น (WEB)/๊ณต๋ถ€ 2021. 7. 22. 08:32

๊ฐœ๋… ์ •๋ฆฌ ๋‚ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ Client, ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ Resource Server, ๋‘ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ์ด์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ Resource Owner๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ Resource Server์—์„œ ์ธ์ฆ์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ Authorization Server๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฐํ•ฉํ•ด์„œ ์ธ์ฆ์ฒด๊ณ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ federated Identity๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋ฐฐ๊ฒฝ Client๊ฐ€ Resource Server(google, facebook ๋“ฑ)์— ์žˆ๋Š” Resource Owner์˜ ๊ณ„์ •์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ? Resource Server์— ๋Œ€ํ•œ Resource Owner์˜ id, pw๋ฅผ ์ œ๊ณต๋ฐ›์œผ๋ฉด ๋” ์ข‹๊ฒ ์ง€๋งŒ ๋ณด์•ˆ ์‹ ๋ขฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ oAuth๊ฐ€ ๋‚˜์™”๋‹ค. oAuth๋ฅผ ..

[c++] BOJ 12888 :: ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๋„๋กœ ๋„คํŠธ์›Œํฌ
Algorithm ๋ฌธ์ œ/BOJ 2021. 7. 20. 20:57

๋ฌธ์ œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๋„๋กœ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ BOJ ๋‚˜๋ผ๋Š” ๋„์‹œ์™€ ๋‘ ๋„์‹œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋„๋กœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ด ๋‚˜๋ผ์˜ ๋„๋กœ ๋„คํŠธ์›Œํฌ๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ˆ˜๋นˆ์ด๋Š” BOJ ๋‚˜๋ผ์˜ ๋„๋กœ ๋„คํŠธ์›Œํฌ ํŠธ๋ฆฌ์˜ ๋†’์ด H๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค. ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ์•ˆ๋‹ค๋ฉด, ๋„์‹œ์˜ ๊ฐœ์ˆ˜์™€ ๋„๋กœ์˜ ๊ฐœ์ˆ˜๋„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ H์ธ ๊ฒฝ์šฐ์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜๋Š” 2(H+1)-1๊ฐœ ์ด๊ณ , ๋„๋กœ์˜ ๊ฐœ์ˆ˜๋Š” 2(H+1)-2๊ฐœ๊ฐ€ ๋œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ H = 2์ผ ๋•Œ, ๊ทธ๋ฆผ์ด๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๋„๋กœ ๋„คํŠธ์›Œํฌ์— ์ฐจ๋ฅผ ๋ณด๋‚ด๋ ค๊ณ  ํ•œ๋‹ค. ๋ชจ๋“  ์ฐจ๋Š” ์‹œ์ž‘ ๋„์‹œ์™€ ๋„์ฐฉ ๋„์‹œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ฐ™์€ ๋„์‹œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฐจ์˜ ์‹œ์ž‘ ๋„์‹œ์™€ ๋„์ฐฉ ๋„์‹œ๊ฐ€ ๊ฐ™์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ชจ๋“  ๋„์‹œ๋ฅผ ๋ฐฉ๋ฌธํ•œ ์ฐจ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ชจ๋‘ 1๊ฐœ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ, ์ˆ˜๋นˆ์ด๊ฐ€ ์ฐจ..

[c++] BOJ 18240 :: ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๋ณต์›ํ•˜๊ธฐ
Algorithm ๋ฌธ์ œ/BOJ 2021. 7. 11. 22:58

๋‚œ์ด๋„ : ๊ณจ๋“œ 2 ๋ฌธ์ œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๋ณต์›ํ•˜๊ธฐ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ชจ๋“  ์ •์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ˆ˜์—ด A1, A2, ..., AN์ด ์žˆ๋‹ค. ๊ฐ’์ด A1์ธ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ํ•˜๋Š” ํŠธ๋ฆฌ์— A2, A3, ..., AN ์„ ์ˆœ์„œ๋Œ€๋กœ ์‚ฝ์ž…ํ•˜๋ ค ํ•œ๋‹ค. N-1๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ๋งˆ๋‹ค ๋ฃจํŠธ์—์„œ ๊ทธ ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜, ์ฆ‰ ๋…ธ๋“œ์˜ ๊นŠ์ด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ A1, A2, ..., AN์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ํ’€์ด ๊ฐ’ ๋ฐ›์œผ๋ฉด์„œ 2N(n-1)children.size() > 0) { // ์™ผ์ชฝ ์ž์‹ ์กด์žฌ Inorder(head->children[0]); } result[head->index] = idx++; if (head->children.size() > 1) { // ์˜ค๋ฅธ์ชฝ ์ž์‹ ..