[C++] ์œ„์ƒ ์ •๋ ฌ(Topological Sort)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
์œ„์ƒ ์ •๋ ฌ(Topological Sort) ์œ„์ƒ ์ •๋ ฌ์€ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ์ž‘์—…์„ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ๊ทธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ต์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. DAG(Directed Acyclic Graph)์—๋งŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์Šคํƒ๊ณผ ํ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ์ •์ ์„ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค. ํ์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ด ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๊ฐ„์„ ์„ ์ œ๊ฑฐ ํ›„ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋œ ์ •์ ์„ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ 2๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋ชจ๋“  ์›์†Œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ธฐ ์ „์— ํ๊ฐ€ ๋นˆ๋‹ค๋ฉด ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋ชจ๋“  ์›์†Œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ํ์—์„œ ๊บผ๋‚ธ ์ˆœ์„œ๊ฐ€ ์œ„์ƒ ์ •๋ ฌ์˜ ๊ฒฐ๊ณผ์ด๋‹ค. ๋ฌธ์ œ https://www.acmicpc.net/problem/1766 1766๋ฒˆ: ๋ฌธ์ œ์ง‘ ์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ˆ˜ N(1 ..
[C++] ํŽœ์œ… ํŠธ๋ฆฌ(Fenwick Tree)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
ํŽœ์œ… ํŠธ๋ฆฌ(Fenwick Tree) ํŽœ์œ… ํŠธ๋ฆฌ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ(Binary Indexed Tree)๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. ์ˆœ์„œ๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ตฌ๊ฐ„์˜ ๋Œ€ํ‘œ ๊ฐ’์ด๋‚˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌ https://www.acmicpc.net/blog/view/21 ํŽœ์œ… ํŠธ๋ฆฌ (๋ฐ”์ด๋„ˆ๋ฆฌ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ) ๋ธ”๋กœ๊ทธ: ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ (Segment Tree) ์—์„œ ํ’€์–ด๋ณธ ๋ฌธ์ œ๋ฅผ Fenwick Tree๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Fenwick Tree๋Š” Binary Indexed Tree๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์ค„์—ฌ์„œ BIT๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Fenwick Tree๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด, ์–ด๋–ค ์ˆ˜ X www.acmicpc.net ํŽœ์œ… ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ค ์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ ๋งˆ..
์˜ต์ €๋ฒ„ ํŒจํ„ด(Observer Pattern)
ยท
๐Ÿ“ Computer Science/โœ Design Pattern
์˜ต์ €๋ฒ„ ํŒจํ„ด(Observer Pattern) ๋งŒ์•ฝ ์œ ์ €์˜ ๊ฒŒ์ž„ ๋จธ๋‹ˆ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์–ด UI, ์ด๋ฒคํŠธ ๋“ฑ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€? ๋งค๋ฒˆ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ฒŒ์ž„ ๋จธ๋‹ˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋๋Š”์ง€ ํ™•์ธํ•  ์ˆœ ์—†์„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿด ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ์˜ต์ €๋ฒ„ ํŒจํ„ด์ด๋‹ค. Sudject(๊ฒŒ์ž„ ๋จธ๋‹ˆ)๋กœ๋ถ€ํ„ฐ ์–ด๋– ํ•œ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด, Observer๋Š” ์ด ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ๊ด€์ฐฐ์ž(์˜ต์ €๋ฒ„)๊ฐ€ ์žˆ๋‹ค. ๊ด€์ฐฐ์ž๋ฅผ ๊ฐ์ฒด๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ฐ€ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ๊ฐ ์˜ต์ €๋ฒ„์—๊ฒŒ ํ†ต์ง€ํ•œ๋‹ค. ์ฃผ๋กœ ๋ถ„์‚ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ๊ณผ์—ฐ ์–ด๋–ป๊ฒŒ ๊ด€์ฐฐํ•œ๋‹ค๋Š” ๊ฒƒ์ผ๊นŒ? 1. ๊ตฌํ˜„ 1) Observer Concr..
[Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (2) AOP ์ ์šฉ
ยท
๐Ÿ“ Language/โœ JAVA
AOP 2. AOP ์ ์šฉ 1) ์ ์šฉ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cutting concern)๊ณผ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(core concern)์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง์„ ๋ณ„๋„์˜ ๊ณตํ†ต ๋กœ์ง์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์›ํ•˜๋Š” ๊ณณ์—๋งŒ ์ ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด ์ด ๋กœ์ง๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. package hello.hello.spring.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Component // string been ๋“ฑ๋ก..
[Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (1) AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ
ยท
๐Ÿ“ Language/โœ JAVA
AOP ์ฒ˜์Œ๋ถ€ํ„ฐ AOP ์ด๋ก  ๋ฐ ์šฉ์–ด๋ฅผ ํ•™์Šตํ•˜๊ธฐ์—” ์–ด๋ ค์šฐ๋‹ˆ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ํ›„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 1. AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ 1) ์˜ˆ์ œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ์‹œ์ž‘๊ณผ ๋์— ์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ๋งŒ์•ฝ, ๊ฐ‘์ž๊ธฐ ์‹œ๊ฐ„ ๋‹จ์œ„๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. package hello.hello.spring.service; import hello.hello.spring.domain.Member; import hello.hello.spring.repository.MemberRepository; import hello.hello.spring.repository.MemoryMemberRepository; import org.springframewo..
[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (6) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
ยท
๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  6. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋งŒ ์‚ฌ์šฉํ•ด๋„ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๊ณ  ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ์ฝ”๋“œ๋„ ํ™•์—ฐํžˆ ์ค„์–ด๋“ค์—ˆ๋‹ค. ์—ฌ๊ธฐ์— ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ตฌํ˜„ ํด๋ž˜์Šค ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” JPA๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค. JPA์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ ์„ค์ •์„ ๊ฐ€์ง„๋‹ค. ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค๋ฌด์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜์ด๋‹ค. ๋”๋ณด๊ธฐ ์‹ค๋ฌด์—์„œ๋Š” JPA์™€ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋ณต์žกํ•œ ๋™์  ์ฟผ๋ฆฌ..