์ „์ฒด ๊ธ€

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

์„œ๋กœ์†Œ ์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐ (Union Find) (๋ฐฑ์ค€ 1043๋ฒˆ)

๋”๋ณด๊ธฐ [Gold IV] ๊ฑฐ์ง“๋ง - 1043 ๋ฌธ์ œ ๋งํฌ ์„ฑ๋Šฅ ์š”์•ฝ ๋ฉ”๋ชจ๋ฆฌ: 14352 KB, ์‹œ๊ฐ„: 128 ms ๋ถ„๋ฅ˜ ์ž๋ฃŒ ๊ตฌ์กฐ, ๋ถ„๋ฆฌ ์ง‘ํ•ฉ, ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์ œ์ถœ ์ผ์ž 2024๋…„ 1์›” 3์ผ 16:32:22 ๋ฌธ์ œ ์„ค๋ช… ์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ ๊ณผ์žฅํ•ด์„œ ๋งํ•œ๋‹ค. ๋‹น์—ฐํžˆ ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์žฌ๋ฏธ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋˜๋„๋ก์ด๋ฉด ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ง€๋ฏผ์ด๋Š” ๊ฑฐ์ง“๋ง์Ÿ์ด๋กœ ์•Œ๋ ค์ง€๊ธฐ๋Š” ์‹ซ์–ดํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ ์ด์•ผ๊ธฐ์˜ ์ง„์‹ค์„ ์•ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ์‚ฌ๋žŒ๋“ค์ด ํŒŒํ‹ฐ์— ์™”์„ ๋•Œ๋Š”, ์ง€๋ฏผ์ด๋Š” ์ง„์‹ค์„ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

Spring Web MVC

๐Ÿ’กํ•„ํ„ฐ, ์ธํ„ฐ์…‰ํ„ฐ, AOP์˜ ์ฐจ์ด? ํ•„ํ„ฐ - ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ ์™ธ๋ถ€์— ์กด์žฌํ•˜์—ฌ ์Šคํ”„๋ง๊ณผ ๋ฌด๊ด€ํ•œ ์ž์›์— ๋Œ€ํ•ด ๋™์ž‘ํ•จ. - ๋ณดํ†ต web.xml์— ๋“ฑ๋กํ•˜๊ณ , ์ธ์ฝ”๋”ฉ ๋ณ€ํ™˜ ์ฒ˜๋ฆฌ, XSS ๋ฐฉ์–ด ๋“ฑ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋กœ ์‚ฌ์šฉ๋จ. ์ธํ„ฐ์…‰ํ„ฐ - ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋ฉฐ Dispatcher Servlet์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „, ํ›„๋กœ ๋ผ์–ด๋“ฌ. - ์Šคํ”„๋ง์˜ ๋ชจ๋“  ๋นˆ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ. ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ(์ˆœ์„œ ์ฃผ์˜). - ๋กœ๊ทธ์ธ ์ฒดํฌ, ๊ถŒํ•œ์ฒดํฌ, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ๊ฐ„ ๊ณ„์‚ฐ์ž‘์—… ๋กœ๊ทธํ™•์ธ ๋“ฑ์˜ ์—…๋ฌด์ฒ˜๋ฆฌ. AOP - ํ•„ํ„ฐ์™€ ์ธํ„ฐ์…‰ํ„ฐ (ํ•„ํ„ฐ์™€ ์ธํ„ฐ์…‰ํ„ฐ๋Š” Servlet ๋‹จ์œ„์—์„œ ์‹คํ–‰) ์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฉ”์†Œ๋“œ ์•ž์—์„œ Proxy ํŒจํ„ด์˜ ํ˜•ํƒœ๋กœ ์‹คํ–‰๋จ. - OOP๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฐœ๋…. (OOP์—์„œ ๊ณตํ†ต ์‚ฌํ•ญ์„ ๋ชจ๋“ˆํ™” ํ•œ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

Spring AOP

๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (AOP) ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(core concern)๊ณผ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cuttin concern) ๊ธฐ์กด OOP (๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์—์„œ๋Š” ๊ณตํ†ต๊ด€์‹ฌ์‚ฌํ•ญ์„ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ์ ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ์–‘์ƒํ•˜๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•จ. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด AOP๊ฐ€ ๋“ฑ์žฅ AOP๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ๊ณผ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๊ธฐ์ค€์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•จ์œผ๋กœ์จ ๊ณตํ†ต ๋ชจ๋“ˆ์„ ์†์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ AOP๋Š” application์—์„œ์˜ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(๊ธฐ๋Šฅ์˜ ๋ถ„๋ฆฌ) ์ฆ‰, ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์—์„œ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•จ. ๋ถ„๋ฆฌํ•œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์–ด์ŠคํŒฉํŠธ(Aspect) (=๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ) ๋ผ๋Š” ๋…ํŠนํ•œ ๋ชจ๋“ˆ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•. OOP๋ฅผ ์ ์šฉํ•˜์—ฌ๋„ ํ•ต์‹ฌ๊ธฐ๋Šฅ์—์„œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

๋‹ค์ต์ŠคํŠธ๋ผ (boj 12851 ์ˆจ๋ฐ”๊ผญ์งˆ2)

๋ฌธ์ œ : https://www.acmicpc.net/problem/12851 12851๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 2 ์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ ๋•Œ www.acmicpc.net ๊ธฐ์กด์˜ ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์—์„œ ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ๊ฐฏ์ˆ˜๊นŒ์ง€ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. 1. ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ณ„์† ํƒ์ƒ‰์„ ์ด์–ด๋‚˜๊ฐ€๋„๋ก ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค. while(!pq.isEmpty()){ Node cur = pq.poll(); if(cur.idx==K && cur.w==dist[K]){ // ๋ชฉํ‘œ์ง€์ ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ count+=1; } ... } ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

SpringFramework - DI

SpringFramework๋ž€? Spring Framework ๋Š” ์ž๋ฐ”๋กœ Enterprise Application ์„ ๋งŒ๋“ค ๋•Œ ํฌ๊ด„์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Programming ๋ฐ Configuration Model ์„ ์ œ๊ณตํ•ด ์ฃผ๋Š” Framework ๋กœ Application ์ˆ˜์ค€์˜ ์ธํ”„๋ผ ์ŠคํŠธ๋Ÿญ์ณ๋ฅผ ์ œ๊ณต. ์ฆ‰ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด Low Level ( ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด setting )์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  Business Logic๊ฐœ๋ฐœ์— ์ „๋…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค Spring Container ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง์—์„œ ์ž๋ฐ” ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์„ ๋งํ•จ. ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์—์„  ๋นˆ(Bean)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ์ด ๋นˆ(Bean)์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์†Œ๋ฉธ๊นŒ์ง€๋ฅผ ๊ฐœ๋ฐœ์ž ๋Œ€์‹  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ณณ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

MVC Pattern, Session, Cookie

JSP๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Web Application Architecture๋Š” ํฌ๊ฒŒ model1๊ณผ model2 ๋กœ ๋‚˜๋‰œ๋‹ค. Model1 : client์˜ ์š”์ฒญ์— ๋Œ€ํ•œ Logic์ฒ˜๋ฆฌ์™€ response page(view)์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ํ•จ Model2 : ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ถ€๋ถ„๋งŒ ์ฒ˜๋ฆฌ (= MVCํŒจํ„ด์„ ์›น ๊ฐœ๋ฐœ์— ๋„์ž…ํ•œ ๊ตฌ์กฐ ) Model1 view์™€ logic์„ JSPํŽ˜์ด์ง€ ํ•˜๋‚˜์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ ์žฅ์  ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ , ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๋‹ค ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ๋น„๊ต์  ์งง๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ๋น„์šฉ์ด ๊ฐ์†Œ ๋‹จ์  view์ฝ”๋“œ์™€ ๋กœ์ง์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ java์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ์–ด์„œ JSP์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค JSP์ฝ”๋“œ์— BE์™€ FE๊ฐ€ ํ˜ผ์žฌ๋˜์–ด ๋ถ„์—…์ด ํž˜๋“ค์–ด์ง ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ ธ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€ ํ™•์žฅ..

๐Ÿ’Ž๋ฐฑ์—”๋“œ : Backend

[JSP]

JSP(Java Server Page) HTML๋‚ด์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์›น ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋Œ๋ ค์ฃผ๋Š” ์–ธ์–ด ์‹คํ–‰ ์‹œ servlet์œผ๋กœ ๋ณ€ํ™˜๋œ ํ›„ ์‹คํ–‰ ๋จ (์ตœ์ดˆ ํ•œ ๋ฒˆ + JSP์ˆ˜์ • ์‹œ) ๋ณ€ํ™˜์€ WAS๊ฐ€ ํ•ด์ค€๋‹ค. JSP๊ฐ€ ๋น ๋ฅผ๊นŒ Servlet์ด ๋น ๋ฅผ๊นŒ? JSP๋Š” Servlet์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์ตœ์ดˆ ํ•œ ๋ฒˆ๊ณผ ์ˆ˜์ • ์‹œ์—๋งŒ ๋ณ€ํ™˜๋œ๋‹ค. JSP์—์„œ GET๊ณผ POST๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ• request.getMethod() JSP ๋ฌธ๋ฒ• ์„ ์–ธ๋ฌธ ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์„ ์–ธ์ด๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋Š” ์˜์—ญ ์„ ์–ธ๋ฌธ ์•ˆ์— System.out.println("A"); ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฒ˜๋ฆฌ๋ฌธ - ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ ๋งค๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ์˜์—ญ. - Servlet์œผ๋กœ ๋ณ€ํ™˜ ์‹œ se..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ (๋ฐฑ์ค€ 5639๋ฒˆ)

์ „์œ„์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ํ›„์œ„์ˆœํšŒ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ํ’€์ด ์ˆœ์„œ 1. ์ž…๋ ฅ์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑ. (๋…ธ๋“œ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉ) 2. ๋…ธ๋“œ ํด๋ž˜์Šค ๋‚ด๋ถ€์— insert ํ•จ์ˆ˜ ์ž‘์„ฑ. insert ํ•จ์ˆ˜ : ์ž…๋ ฅ๋œ ๋…ธ๋“œ์˜ ๊ฐ’์„ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ, ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์— ๋‹ฌ์•„์ฃผ๋Š” ํ•จ์ˆ˜. ์ด๋•Œ insert ํ•จ์ˆ˜์— ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ์œ„์น˜๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ํ•ด๋‹น ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ๋‹ฌ์•„์ฃผ๊ณ , ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š” ๋…ธ๋“œ์˜ insertํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœ ์ฝ”๋“œ package com.mincheolsong; import java.io.*; import java.util.*; public class Main { // BOJ 5639๋ฒˆ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ static class Node{ int num; N..

mc.thd
mincheolsong