[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 42579 :: "๋ฒ ์ŠคํŠธ ์•จ๋ฒ”" ํ’€์ด ๋ฐ ์ฝ”๋“œ
Algorithm ๋ฌธ์ œ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2022. 3. 20. 16:53

๋ฌธ์ œ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ” ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ฒ ์ŠคํŠธ์•จ๋ฒ” ์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ programmers.co.kr ํ’€์ด ์šฐ์„  ์•Œ์•„๋‚ด์•ผ ํ•  ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์žฅ๋ฅด์˜ ์ด ์žฌ์ƒ ํšŸ์ˆ˜ -> ์žฅ๋ฅด ์ˆœ์œ„ ์ •ํ•˜๊ธฐ ๊ฐ ์žฅ๋ฅด์˜ ๊ฐœ๋ณ„ ๊ณก ์žฌ์ƒ ํšŸ์ˆ˜ -> ๊ณก ์ˆœ์œ„ ์ •ํ•˜๊ธฐ ์ด๊ฑธ ํ•œ ๋ฒˆ์— ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•˜๋ฉด ์žฅ๋ฅด๋ฅผ key๋กœ ๋‘๊ณ  ์žˆ๋Š” map์— value๋กœ (์ด ์žฌ์ƒ ํšŸ์ˆ˜, index๋งˆ๋‹ค์˜ ์žฌ์ƒํšŸ์ˆ˜)์„ ์ €์žฅํ•ด๋‘์–ด์•ผ ํ•˜๊ณ  ์ด๋Ÿฌ๋ฉด ์žฅ๋ฅด์˜ ์ˆœ์œ„๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ํž˜๋“ค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ณก ์ˆœ์œ„๋„ ์ถ”์ถœํ•ด์„œ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ map์„ ๋‘๊ฐœ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค. 1๋ฒˆ map์€ { key : ์žฅ..

[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 42577 :: "์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก" ํ’€์ด ๋ฐ ์ฝ”๋“œ
Algorithm ๋ฌธ์ œ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2022. 3. 20. 16:42

๋ฌธ์ œ ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก ๋ฌธ์ œ ๋ฐ”๋กœ ๊ฐ€๊ธฐ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ ์ค‘, ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, ๊ตฌ์กฐ๋Œ€ ์ „ํ™”๋ฒˆํ˜ธ๋Š” ์˜์„์ด์˜ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ ‘๋‘์‚ฌ์ž…๋‹ˆ๋‹ค. ๊ตฌ์กฐ programmers.co.kr ํ’€์ด ๋ณด์ž๋งˆ์ž ํŠธ๋ผ์ด(Trie)๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค. ๋ฌธ์ž์—ด ๊ธธ์ด๋„ 20 ์ดํ•˜์ด๋‹ˆ ์ตœ๋Œ€ ๋†’์ด๊ฐ€ 20์ธ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„์ด ๋„ˆ๋ฌด ๊ท€์ฐฎ๊ธฐ๋„ ํ•˜๊ณ , ์ž…๋ ฅ์˜ ๋ฒ”์œ„๊ฐ€ 10^6์ด๋ผ O(nlgn) ์ดํ•˜๋กœ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” phone_book์„ ํ•œ ๋ฒˆ์— ํ›‘์œผ๋ฉด ๋“ฑ์žฅํ–ˆ๋˜ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ง€๋ฅผ ํ™•์ธํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋“ฑ์žฅํ–ˆ๋˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ์ˆœ..

์ธ์ฆ ์ด ์ •๋ฆฌ :: 3. SSO ์ธ์ฆ ๋ฐ ์ด ์ •๋ฆฌ
์›น (WEB)/๊ณต๋ถ€ 2022. 3. 15. 22:17

SSO SSO(Single Sign On)๋Š” ํ•œ ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ์ธ์ฆ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๋•Œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด SSO๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. SSO๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ํŒจํ„ด์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ์ธ์ฆ gateway ๋ฐฉ์‹ ๊ฐ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ๋•Œ ์ด์ „ ๋ ˆ์ด์–ด์— ํ†ตํ•ฉ ์ธ์ฆ ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. User๋Š” SessionID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ†ตํ•ฉ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์˜ ๋‹จ์ ์€ ๊ฐ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ๋งˆ๋‹ค ์ธ์ฆ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋ฉฐ ์ธ์ฆ ์„œ๋น„์Šค ์ž์ฒด๊ฐ€ bottle neck์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 2. ์ธ์ฆ ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐฉ์‹ ์œ ์ €๋Š” ์šฐ์„  ํ†ตํ•ฉ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํ† ํฐ์ด๋ผ๋Š” ์ธ์ฆ ๋Œ€ํ–‰ ๋งค์ฒด..

์ธ์ฆ ์ด ์ •๋ฆฌ :: 2. ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ์˜ ๋‹ค์–‘ํ•œ ์ธ์ฆ (feat. SAML, OAuth 2.0)
์›น (WEB)/๊ณต๋ถ€ 2022. 3. 15. 22:10

SAML ์ธ์ฆ SAML์€ XML ๊ธฐ๋ฐ˜์˜ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ ํฌ๋งท์ž…๋‹ˆ๋‹ค. ์ธ์ฆ ์ •๋ณด๋ฅผ XML ํฌ๋งท์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์•”ํ˜ธํ™”ํ•œ ๊ฒƒ์ด Assertion์ธ๋ฐ ์ด๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. User, IDP(Identity Provider), SP(Service Provider) ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ์ฆ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. (๊ทธ๋ฆผ) User๊ฐ€ SP๋กœ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด SP๋Š” ์ธ์ฆ๋œ User์ธ์ง€ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ๋˜์ง€ ์•Š์•˜์œผ๋ฉด ์ธ์ฆ ์š”์ฒญ(SAMLRequest)์„ ์ƒ์„ฑํ•˜์—ฌ User์—๊ฒŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. SAMLRequest์— ์˜ํ•ด User๋Š” IDP๋กœ redirect๋˜๊ณ  ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์ธ์ฆ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด IDP๋Š” SAMLAssertion์ด ํฌํ•จ๋œ SAMLResponse๋ฅผ User์— ๋‚ด๋ ค์ค๋‹ˆ๋‹ค. → ๊ทธ ๊ณผ์ •์—์„œ IDP๊ฐ€ ์„ค์ •ํ•œ Ses..

์ธ์ฆ ์ด ์ •๋ฆฌ :: 1. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” Auth Flow Best Case (feat. OpenIDC)
์›น (WEB)/๊ณต๋ถ€ 2022. 3. 15. 21:59

์ธ์ฆ Best Case ๊ธฐ๋ณธ flow (OpenIDC) Best Case๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ธ์ฆ flow(OpenIDC)๋ฅผ ๋จผ์ € ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, Auth Service๊ฐ€ ํƒ€ ์„œ๋น„์Šค๊ฐ€ ์•„๋‹Œ ์ž์‚ฌ์˜ ์„œ๋น„์Šค์ผ ๋•Œ๋Š” OAuth ๊ธฐ๋ฐ˜์˜ flow๊ฐ€ ํ•„์š”์—†์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์ด ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค. (ํƒ€ ์„œ๋น„์Šค์ผ ๊ฒฝ์šฐ OAuth ๋ณด๊ธฐ) Client๊ฐ€ id(username)์™€ password๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ์š”์ฒญ์€ BFF → Server → Auth Service๋กœ ์ „ํ•ด์ง‘๋‹ˆ๋‹ค. ์ „๋‹ฌ๋œ id์™€ password๋กœ Auth Service์—์„œ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด access token, refresh token, id token ๋ฅผ Server๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. Server๋Š” id token ์„ d..

[๋ฒ„ํ‚ทํ”Œ๋ ˆ์ด์Šค] 6๋ฒˆ์˜ ์ด๋ฒคํŠธ๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  ๋‚˜์„œ
๋„์ ์ด๋Š” ๊ธ€/๊ฐœ๋ฐœ์ž๋กœ์„œ ๋„์ ์ด๋Š” ๊ธ€ 2022. 2. 21. 21:16

โฃ๏ธ๋ฒ„ํ‚ท ํ”Œ๋ ˆ์ด์Šคโฃ๏ธ์— ํ•ฉ๋ฅ˜ํ•œ ์ง€ ๋ฒŒ์จ ์•ฝ 8๊ฐœ์›”์˜ ์‹œ๊ฐ„์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ •๋ง ๋น ๋ฅด๋„ค์š”! ์ด๋ฒˆ์—๋Š” 2022 ์˜คํŽ˜์Šคํ‹ฐ๋ฒŒ ๋Ÿฐ์นญ ๊ธฐ๋…์œผ๋กœ ์ž…์‚ฌ ํ›„ 8๊ฐœ์›” ๊ฐ„ ์ด 6๊ฐœ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฐœ์ „ํ–ˆ๋˜ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋Ÿฐ์นญํ•œ ์ด๋ฒคํŠธ๋“ค์„ ๋ณด๊ณ  ์žˆ์ž๋‹ˆ ์ƒˆ์‚ผ์Šค๋ ˆ ๋Š๊ปด์ง€๋Š” ๋””์ž์ด๋„ˆ ๋ถ„๋“ค์˜ ๋…ธ๊ณ ..! ์ด๋ฒคํŠธ๋“ค์„ ์ •์„ฑ์Šค๋ ˆ ๋Œ๋ด์˜ค๋ฉด์„œ ๋‹น์—ฐํžˆ ๋ฐœ์ „ํ•œ ๊ฒƒ๋„ ์žˆ๊ณ  ์•„์ง ๋ชปํ•œ ๊ฒƒ๋„ ๋งŽ๊ณ  ๋Š๋‚€ ์ ๋„ ๋งŽ์€๋ฐ์š”, ๊ฐ€๋งŒํžˆ ๋‘๋ฉด ๋˜ ๊ธˆ์ƒˆ ์žŠ์–ด๋ฒ„๋ฆด ๊นŒ๋ด ๊ธ€๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ํŒ”๋กœ๋ฏธ~! ์ฒ˜์Œ ์ด๋ฒคํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ์˜ ๊ธฐ์–ต์ด ์•„์ง๋„ ์ƒ์ƒ ํ•œ๋ฐ์š”... github ์ €์žฅ์†Œ๋ถ€ํ„ฐ ๋งŒ๋“ค๊ณ  ํ™˜๊ฒฝ ์„ค์ •์„ ์‹œ์ž‘ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. TLM(Team Lead&Manager)๋ถ„๊ณผ ํ•จ๊ป˜ ์•„์˜ˆ ์ฒ˜์Œ ๊ตฌ์„ฑ๋ถ€ํ„ฐ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜ํ•˜๋‚˜ ์ง์ ‘ ๊ตฌํ˜„ ํ•ด์™€์„œ ๊ทธ๋Ÿฐ์ง€..

[Next JS] Anchoring issue :: SWR / react-query ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2022. 2. 20. 15:39

์˜ค๋Š˜์€ Next JS์—์„œ Client Data fetching ์‚ฌ์šฉ ์‹œ ๋งˆ์ฃผํ•  ์ˆ˜ ์žˆ๋Š” Anchoring ์ด์Šˆ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. Next JS docs์—์„œ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ ์šฉํ–ˆ์„ ๋•Œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ด์Šˆ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ด€๋ จ ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์ €๋Š” ๋””๋ฒ„๊น…์— ์‹œ๊ฐ„์„ ๊ฝค๋‚˜ ์ผ์Šต๋‹ˆ๋‹ค. ๋จผ์ € Next JS์˜ Data fetching์— ๋Œ€ํ•œ ์ง€์‹์ด ์ „๋ฌดํ•  ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ฐœ๋…๋ถ€ํ„ฐ ์ •๋ฆฌํ•˜๊ณ  ์ด์Šˆ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์ฐจ๋ก€๋กœ ์ ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Data fetching Next JS๋ฅผ ์ด์šฉํ•œ Data fetching์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”! getStaticProps / getServerSideProps : Server Side์—์„œ ๋ฏธ๋ฆฌ page h..

๋‹ค์–‘ํ•œ Sticky ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• (vanila js)
์›น (WEB)/๊ณต๋ถ€ 2022. 2. 2. 16:15

Sticky ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ŠคํŽ™์— ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ด๊ฐ€๋ฉด์„œ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ง€๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด์ž. css์˜ poistion: sticky; ๋ฅผ ์ด์šฉํ•˜์ž. ์šฐ์„  Sticky๋˜์–ด์•ผ ํ•˜๋Š” Element๊ฐ€ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•ด์žˆ๋‹ค๋ฉด ์‰ฝ๋‹ค. css๋ฅผ ์ด์šฉํ•˜๋ฉด position: relative; ์ธ ๋ถ€๋ชจ์˜ ์ƒ๋‹จ์— ํ•ด๋‹น Element๊ฐ€ sticky๋œ๋‹ค. .sticky{ position: sticky; top: 0; } https://codepen.io/bucketressi/pen/GROoeKE Sticky-1 ... codepen.io sticky container๋ฅผ ๋งŒ๋“ค์ž. ์ด๋ฒˆ์—๋Š” sticky header(์ฒซ๋ฒˆ์งธ Sticky Element) ์•„๋ž˜์— sticky sub-header๊ฐ€ ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž...