์ „์ฒด ๊ธ€

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

[Spring] ์‹œ์ž‘

Spring JAVA EE dependency injection, transaction management์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์–ด๋ ค์›€, ๋ณต์žก๋„๊ฐ€ ๋†’์Œ, ์—ฌ๋Ÿฌ ๋Œ€์ฒ˜์ƒํ™ฉ์ด ํž˜๋“ฌ Spring ๋‹จ์ˆœํ•˜๊ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ dependency injection์„ ๊ฐ™์ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ JAVA EE์˜ ์˜์—ญ์„ ๋Œ€์‹ ํ•˜๊ฒŒ ๋จ! Spring์„ ์‚ฌ์šฉํ•œ ์›น๊ฐœ๋ฐœ (์ถœ์ฒ˜ : https://www.youtube.com/watch?v=XtXHIDnzS9c&t=491) ์›น๊ฐœ๋ฐœ ํ•  ๋•Œ ํ•„์š”ํ•œ ์„ธ๊ฐ€์ง€ ์›น MVC : SPRING์ด ์ œ๊ณตํ•˜๋Š” DI ๊ธฐ๋Šฅ์„ ์ดํ•ดํ•ด์•ผ ํ•จ : DI์— ๋Œ€ํ•ด์„  ๋Š์Šจํ•œ ๊ฒฐํ•ฉ๋ ฅ๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด์„œ ์ดํ•ด ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ• : SPRING์ด ์ œ๊ณตํ•˜๋Š” AOP๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•จ ์ธ์ฆ๊ณผ ๊ถŒํ•œ : Se..

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

[Spring] DI์™€ IoC Container

Spring Spring์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋Šฅ๋ ฅ ์›ํ•˜๋Š” ๋ถ€ํ’ˆ(Dependency)์ด ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ(Injection)๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š”์ง€ ์„ค์ •ํ•ด์ฃผ๋ฉด Spring์ด DIํ•ด์ค€๋‹ค DI(Dependency Injection) (=๋ถ€ํ’ˆ ์กฐ๋ฆฝ) ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ์ฒด์ง€ํ–ฅ์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋  ๊ฒฝ์šฐ, ๊ฐ์ฒด๋“ค์˜ ์กฐ๋ฆฝ๊ด€๊ณ„๋กœ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. A๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ B๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒดํ™” ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 1.Composition has a (์ผ์ฒดํ˜•)A๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ B์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐ€์ง„๋‹ค. ์ด ๊ฒฝ์šฐ A๊ฐ€ B๋ฅผ ์ผ์ฒดํ˜•์œผ๋กœ ๊ฐ€์กŒ๋‹ค๊ณ  ํ•ด์„œ Composition(์ผ์ฒดํ˜•) has a ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋•Œ B๋ฅผ A์˜ ๋ถ€ํ’ˆ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด B๋ฅผ Dependency(๋ถ€ํ’ˆ)๋ผ๊ณ  ํ•œ๋‹ค. c..

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

[์•Œ๊ณ ๋ฆฌ์ฆ˜]์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜(GCD) ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

๊ธฐ์กด GCD๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• for i in range(min(a,b),0,-1): if a%i==0 and b%i==0: print(i) break a์™€ b์ค‘ ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 1๊นŒ์ง€ ๊ฐ์†Œํ•˜๋ฉด์„œ, ์ œ์ผ ์ฒ˜์Œ a์™€ b๋ชจ๋‘ ๋‚˜๋ˆ ๋–จ์–ดํŠธ๋ฆฌ๋Š” ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋Š” ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…(Brute Force)๋กœ O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• (Euclidean Algorithm) def gcd(a,b): # a>b if b==0: return a c=a%b return gcd(b,c) a๋ฅผ b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ r์ด๋ผ๊ณ  ํ–ˆ์„๋•Œ, a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” b์™€ r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•œ ๊ฒƒ์ด๋‹ค.(์žฌ๊ท€ํ•จ์ˆ˜ ์ด์šฉ) ์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ํ™œ์šฉํ•˜์—ฌ b์™€ r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ r0๋ฅผ ๊ตฌํ•˜๊ณ  r์„ r0๋กœ ..

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

[์•Œ๊ณ ๋ฆฌ์ฆ˜]๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)

๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort) ์ •๋ ฌ ์ˆœ์„œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 1 ์ดํ•˜์ด๋ฉด ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๋ณธ๋‹ค. ๋ถ„ํ• (divide) : ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์œผ๋กœ ์ž˜๋ผ ๋‘ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ •๋ณต(conquer) : ๋‚˜๋ˆ ์ง„ ๋‘ ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ณ‘ํ•ฉ์ •๋ ฌ์„ ์‚ฌ์šฉํ•ด์„œ ์ •๋ ฌํ•œ๋‹ค. ๊ฒฐํ•ฉ(combine) : ๋‘ ๋ฐฐ์—ด์„ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด๋กœ ํ•ฉ๋ณ‘ํ•œ๋‹ค. ๋ถ„ํ•  ์ •๋ณต(divide and conquer)๊ธฐ๋ฒ•๊ณผ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ˆ˜ํ–‰ ๊ณผ์ • ์˜ˆ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด์ด ์žˆ๋‹ค. [6, 5, 3, 1, 8, 7, 2, 4]์ ˆ๋ฐ˜์œผ๋กœ ์ž˜๋ผ ๋‘ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆˆ๋‹ค. [6, 5, 3, 1] [8, 7, 2, 4]๋‹ค์‹œ ๋‘ ๋ฐฐ์—ด์„ ๋‚˜๋ˆ  ๋„ค ๊ฐœ๋กœ ๋‚˜๋ˆˆ๋‹ค. [6, 5] [3, 1] [8, 7] [2, 4]๋งˆ์ง€๋ง‰์œผ๋กœ ๋„ค ..

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

์นด์šดํŒ… ์ •๋ ฌ(Counting Sort)Permalink

์นด์šดํŒ… ์ •๋ ฌ(Counting Sort) ๊ณผ์ • ๋ฐฐ์—ด์— ์กด์žฌํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์„œ, ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 1.๋ฐฐ์—ด์— ์กด์žฌํ•˜๋Š” ๊ฐ ๊ฐ’์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” count ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด count[1]=4 ๋ผ๋ฉด ๋ฐฐ์—ด์—๋Š” 1์˜ ๊ฐ’์ด 4๊ฐœ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. count๋Š” ๋ฐฐ์—ด ์›์†Œ์˜ ์ตœ๋Œ“๊ฐ’๊นŒ์ง€๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•œ๋‹ค. arr = [4, 7, 9, 1, 3, 5, 2, 3, 4] cnt = [0] * (max(arr) + 1) for num in arr: cnt[num] += 1 print(cnt) # [0, 1, 1, 2, 2, 1, 0, 1, 0, 1] 2. count๋ฐฐ์—ด์„ ๋ˆ„์ ํ•ฉ์œผ๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐฑ์‹ ํ•˜์—ฌ ์ค€๋‹ค. ๋ˆ„์ ํ•ฉ์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฆฌํ„ด ํ•  ์ •๋ ฌ๋œ ๋ฐฐ์—ด answer์˜ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๊ธฐ ..

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

[์•Œ๊ณ ๋ฆฌ์ฆ˜]์‹œ๊ฐ„๋ณต์žก๋„

์‹œ๊ฐ„๋ณต์žก๋„ = ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ž์›(resource) ์‚ฌ์šฉ๋Ÿ‰์„ ๋ถ„์„ ์ž์›์ด๋ž€ ์‹คํ–‰์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ, ์ €์žฅ์žฅ์น˜, ํ†ต์‹  ๋“ฑ์„ ๋งํ•˜๋Š” ๊ฒƒ ์ธ๋ฐ ๊ทธ ์ค‘์—์„œ ์‹คํ–‰์‹œ๊ฐ„์— ๋Œ€ํ•ด์„œ ํ‘œํ˜„ ๋ฉ”๋ชจ๋ฆฌ : ๊ฐ€๊ฒฉ๋Œ€๋น„ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜์—ฌ ์ƒ๋Œ€์ ์ธ ์ค‘์š”์„ฑ์ด ๊ฐ์†Œ๋˜์—ˆ๋‹ค. ์‹คํ–‰์‹œ๊ฐ„์€ ํ•˜๋“œ์›จ์–ด, ์šด์˜์ฒด์ œ, ์–ธ์–ด, ์ปดํŒŒ์ผ๋Ÿฌ ๋“ฑ์— ๋”ฐ๋ผ์„œ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ์‹คํ–‰์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋Œ€์‹  ์—ฐ์‚ฐ์˜ ์‹คํ–‰ ํšŸ์ˆ˜๋ฅผ ์ธก์ •ํ•ด์•ผ ํ•œ๋‹ค. ์—ฐ์‚ฐ์˜ ์‹คํ–‰ ํšŸ์ˆ˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ(n)์— ๊ด€ํ•œ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™๋”๋ผ๋„ ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ์„œ ๋‹ฌ๋ผ์ง„๋‹ค. (n๊ฐœ์˜ ๋ฐ์ดํ„ฐ์—์„œ ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ, ์šด์ด ์ข‹์œผ๋ฉด ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜๋„ ์žˆ๊ณ , ์šด์ด ๋‚˜์˜๋ฉด n๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•ด์„œ ์ฐพ์•„์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.) ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„ ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„ (ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„ ๋ถ„์„์ด..

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

[์•Œ๊ณ ๋ฆฌ์ฆ˜]Recursion ์‘์šฉ(๋ฏธ๋กœ์ฐพ๊ธฐ)

๋ฏธ๋กœ์ฐพ๊ธฐ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด wall ๊ณผ pathway๋กœ ๊ตฌ์„ฑ๋œ ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋Š” ์ฝ”๋“œ๋ฅผ recursion์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. recursiveํ•˜๊ฒŒ ์ƒ๊ฐ์„ ํ•ด์•ผํ•œ๋‹ค. ํ˜„์žฌ ์œ„์น˜์—์„œ ์ถœ๊ตฌ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ ค๋ฉด ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์ถœ๊ตฌ๊ฑฐ๋‚˜ ์ด์›ƒํ•œ ์…€๋“ค ์ค‘ ํ•˜๋‚˜์—์„œ ์ถœ๊ตฌ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. boolean findPath(x,y) if (x,y) is the exit return true; else for each neighbouring cell (x',y') of (x,y) do if (x',y') is a pathway cell if findPath(x',y') return true return false; (x,y)์—์„œ ์ถœ๊ตฌ๊นŒ์ง€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด true, ์—†์œผ๋ฉด f..

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

[์•Œ๊ณ ๋ฆฌ์ฆ˜]Recursion ๊ฐœ๋…

์ˆœํ™˜์€ ์ˆ˜ํ•™ํ•จ์ˆ˜ ๊ณ„์‚ฐ์—๋งŒ ์œ ์šฉํ•œ๊ฐ€? ํŒฉํ† ๋ฆฌ์–ผ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™์€ ์ˆ˜ํ•™ํ•จ์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋‹ค๋ฅธ ๋งŽ์€ ๋ฌธ์ œ๋“ค์„ recursion์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ def f(s): if len(s)==0: return else: f(s[1:]) print(s[0],end='') s=input() f(s) abcdef fedcba Base Case : ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ฉด ์ถœ๋ ฅ์„ ํ•˜์ง€ ์•Š๊ณ  return ์žฌ๊ท€์ ์œผ๋กœ ์ดํ•ด๋ฅผ ํ•ด์•ผํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด์„œ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์ œ์™ธํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ž์—ด์ด ๋’ค์ง‘์–ด์„œ ์ถœ๋ ฅ๋œ๋‹ค. 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ธฐ def fun(n): if nend: return False elif lst[begin]==targe..

mc.thd
mincheolsong