์ „์ฒด ๊ธ€

๐Ÿ’พORM:JPA

์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ

์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ํ•˜๋‚˜๋ฉด ์ฆ‰์‹œ ๋กœ๋”ฉ ์ปฌ๋ ‰์…˜์ด๋ฉด ์ง€์—ฐ ๋กœ๋”ฉ์„ ์‚ฌ์šฉ ์–ด๋…ธํ…Œ์ด์…˜ default @ManyToOne, @OneToOne ์ฆ‰์‹œ ๋กœ๋”ฉ(FetchType.EAGER) @OneToMany, @ManyToMany ์ง€์—ฐ ๋กœ๋”ฉ(FetchType.LAZY) ManyToMany๋Š” ์“ฐ์ง€ ๋ง์ž ์‹ค๋ฌด์—์„  ์ง€์—ฐ ๋กœ๋”ฉ๋งŒ ์‚ฌ์šฉํ•˜์ž ์ฆ‰์‹œ ๋กœ๋”ฉ์„ ํ•˜๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ SQL์ด ๋ฐœ์ƒ ์ฆ‰์‹œ ๋กœ๋”ฉ์€ JPQL์—์„œ N+1 ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค. @ManyToOne, @OneToOne์€ ๊ธฐ๋ณธ์ด ์ฆ‰์‹œ ๋กœ๋”ฉ ๐Ÿ‘‰ LAZY๋กœ ์„ค์ • ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„์— ์ง€์—ฐ ๋กœ๋”ฉ์„ ์„ค์ •ํ•œ ๋’ค JPQL fetch์กฐ์ธ์ด๋‚˜, ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ž ์ฆ‰์‹œ๋กœ๋”ฉ์€ ์ƒ์ƒํ•˜์ง€ ๋ชปํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ„๋‹ค

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

Spring๊ณผ SpringBoot์˜ ์ฐจ์ด

Spring์ด๋ž€? ์ •ํ™•ํ•œ ํ‘œํ˜„์œผ๋กœ๋Š” '์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework) ์˜์กด์„ฑ ์ฃผ์ž…(DI) ์ œ์–ด์—ญ์ „ (IOC) ๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP) ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ ์œ„ ์š”์†Œ๋“ค์„ ํ†ตํ•ด ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ ์œ„์™€ ๊ฐ™์ด ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ๊ฐœ๋ฐœํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์šฉ์ดํ•จ ๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP)๋ž€? AOP๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด, OOP(๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์„ ๋ณด์™„ํ•˜๋Š” ์ˆ˜๋‹จ์œผ๋กœ, ์—ฌ๋Ÿฌ ๊ณณ์— ์“ฐ์ด๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ณณ์— ์—ฐ๊ฒฐํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜ ๋˜๋Š” ์žฌ์‚ฌ์šฉ์— ์šฉ์ดํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ AOP๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋กœ์ง ์ˆ˜์ • ์—†์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ ์ด๋Ÿฐ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•จ SpringBoot๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ ์ด์œ  ์Šคํ”„๋ง์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„..

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

[swea 1868-ํŒŒ์ด์ฌ] ํŒŒํ•‘ํŒŒํ•‘ ์ง€๋ขฐ์ฐพ๊ธฐ

์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด 1. ํ–‰ ์šฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋‹ค 0์ธ ๊ณณ์„ ๋งŒ๋‚˜๋ฉด BFS๋ฅผ ์ˆ˜ํ–‰(์—ฐ์‡„์ ์œผ๋กœ ํด๋ฆญ)ํ•˜๋ฉฐ ์ •๋‹ต(ans)๋ฅผ 1์ฆ๊ฐ€ ์ด๋•Œ 0์œผ๋กœ ์ธํ•ด ์—ฐ์‡„์ ์œผ๋กœ ํด๋ฆญ๋œ ๊ณณ์„ -๋กœ ํ‘œ์‹œ 2. ํ–‰ ์šฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์‹œ ํƒ์ƒ‰ํ•˜๋ฉฐ ์—ฐ์‡„์ ์œผ๋กœ ํด๋ฆญ๋˜์ง€ ์•Š์€ ๊ณณ์˜ ๊ฐฏ์ˆ˜๋งŒํผ ์ •๋‹ต(ans)์— ์ถ”๊ฐ€ ์ฝ”๋“œ import sys from collections import deque input = sys.stdin.readline # SWEA ํŒŒํ•‘ํŒŒํ•‘ ์ง€๋ขฐ์ฐพ๊ธฐ # 1. ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋‹ค 0์„ ๋งŒ๋‚˜๋ฉด BFS ์ˆ˜ํ–‰ (๋ฐฉ๋ฌธ์ฒดํฌ), cnt += 1 # 2. ์ฒดํฌ ๋˜์ง€ ์•Š์€ ์นธ ์„ธ๊ธฐ def click(r, c): # ํด๋ฆญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ (์ค‘๋ณต ํด๋ฆญ์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ), 0์ด๋ฉด True๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ if arr[r][c] == '..

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

[swea 3304-ํŒŒ์ด์ฌ]์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด

swea 3304 ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด ์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด ์šฐ์„  ์ตœ์ ํ•ด(์ตœ๋Œ“๊ฐ’)์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์ˆœํ™˜์‹(์ ํ™”์‹)์„ ์„ธ์šธ๋•Œ๋Š” "์ตœ์ ํ•ด์˜ ์ผ๋ถ€๋ถ„์ด ๊ทธ ๋ถ€๋ถ„์˜ ์ตœ์ ํ•ด" ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋ฌธ์ œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋‘ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์—ฌ ์ˆœํ™˜์‹์„ ์„ธ์›Œ์•ผ ํ•œ๋‹ค. (DP(i,j)์—์„œ i์™€ j๋Š” ๋ฌธ์ž์—ด X์™€ Y์˜ 1...i, 1...j ๋ฒˆ์งธ๊นŒ์ง€์˜ ๋ฌธ์ž์—ด) (1) ๋‘ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ์˜ˆ๋ฅผ๋“ค์–ด CDABE์™€ CDE๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด๋ฉด ๋งˆ์ง€๋ง‰ ๋ฌธ์ž E๊ฐ€ ๊ฐ™๋‹ค. E๋Š” ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์— ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด๋Š” ๋‘ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž E๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ์ฐพ์€ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด +..

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

[swea 3307-ํŒŒ์ด์ฌ]์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด

swea 3307 ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด ์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด ๋ฐฑ์ค€์—์„œ ํ•œ ๋ฒˆ ํ’€์ด๋ฅผ ํ–ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค dp๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š”๋ฐ ์ ํ™”์‹์„ ์–ด๋–ป๊ฒŒ ์„ธ์›Œ์•ผ ํ•  ์ง€ ์ž˜ ์ƒ๊ฐ์ด ๋‚˜์ง€ ์•Š์•˜๋‹ค. ์™œ ์ ํ™”์‹์„ ์„ธ์šฐ์ง€ ๋ชปํ–ˆ๋Š”์ง€ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์•Œ์•˜๋‹ค. ์ด ๋ฌธ์ œ๋Š” 0~n๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ dp๋ฆฌ์ŠคํŠธ๋ฅผ ์ฑ„์šด๋’ค dp[n-1]์ด ์ •๋‹ต์ด ๋˜๋Š”๊ฒƒ์ด ์•„๋‹Œ max(dp)๊ฐ€ ์ •๋‹ต์ด๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. dp[i] ๋Š” l[i] (์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ์ˆ˜์—ด) ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด์ด๋‹ค 0

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

[swea 4615-ํŒŒ์ด์ฌ]์žฌ๋ฏธ์žˆ๋Š” ์˜ค์…€๋กœ ๊ฒŒ์ž„

swea 4615 ์žฌ๋ฏธ์žˆ๋Š” ์˜ค์…€๋กœ ๊ฒŒ์ž„ ์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด ๋ฐฉํ–ฅ๋ฒกํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“  ๋ฐฉํ–ฅ์„ ๋ฐฑํŠธ๋ž˜ํ‚น ํ•˜๋ฉฐ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋ฉด ๋Œ์˜ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ( ๋ฐฑํŠธ๋ž˜ํ‚น์ด ๋งž๋Š”๊ฑด๊ฐ€..? ) ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•œ๋‹ค๋Š” ๋ง์€ WBBBW ํ˜น์€ BWWWWWB์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์ด๋‹ค. ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ํ•œ ์นธ ์•ž์˜ ์ƒ‰์ƒ์ด ํ˜„์žฌ ์ƒ‰์ƒ๊ณผ ๋‹ค๋ฅด๋ฉด flag๋ณ€์ˆ˜๋ฅผ 1๋กœ ๋ฐ”๊พธ๊ณ  ํ•œ ์นธ ์•ž์˜ ์ƒ‰์ƒ์„ ํ˜„์žฌ ์ƒ‰์ƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐฑํŠธ๋ž˜ํ‚น ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋•Œ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „ ์ƒ‰์ƒ์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด๋‘์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์›์ƒ๋ณต๊ตฌ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. flag๋ณ€์ˆ˜ : 2 1 1 1 2 ์™€ ๊ฐ™์ด ํ•œ ์ˆซ์ž๊ฐ€ ๋‹ค๋ฅธ ์ˆซ์ž๋ฅผ ๊ฐ์‹ธ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ณ€์ˆ˜์ด๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•œ check()ํ•จ์ˆ˜๊ฐ€ False๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค๋ฉด ์กฐ..

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

[swea 1216-ํŒŒ์ด์ฌ]ํšŒ๋ฌธ2

swea 1216 ํšŒ๋ฌธ2 ์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ธธ์ด๊ฐ€ 1์ธ ๋ฌธ์žฅ๋ถ€ํ„ฐ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ 100๊นŒ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ 100๋ถ€ํ„ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค. ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ๊ทธ ๋ฌธ์žฅ์ด ํšŒ๋ฌธ์ด ๋งž๋‹ค๋ฉด ๊ฐ€์žฅ ๊ธด ํšŒ๋ฌธ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ–‰ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€์žฅ ๊ธด ํšŒ๋ฌธ์˜ ๊ธธ์ด์™€ ์—ด ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€์žฅ ๊ธด ํšŒ๋ฌธ์˜ ๊ธธ์ด ์ค‘ ๋” ํฐ ๊ฐ’์ด ์ •๋‹ต์ด ๋œ๋‹ค. ์ด ์„ธ ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค. ํšŒ๋ฌธ์ธ์ง€ ํ™•์ธํ•˜๋Š” checkํ•จ์ˆ˜ ํ–‰ ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” find_rowํ•จ์ˆ˜ ์—ด ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” find_colํ•จ์ˆ˜ (ํ•จ์ˆ˜ ์•ˆ์—์„œ find_row๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•œ ๋’ค ์ตœ์ข… ์ •๋‹ต์„ returnํ•จ) ์ฝ”๋“œ def check(st): for i in range(len(st)//2): if st[i]!=st..

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

[swea 2814-ํŒŒ์ด์ฌ]์ตœ์žฅ ๊ฒฝ๋กœ

swea 2814 ์ตœ์žฅ ๊ฒฝ๋กœ ์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์ตœ์žฅ ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์•„ ํ•œ๋‹ค. ์ตœ์žฅ๊ฒฝ๋กœ๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ •์ ๋“ค ์ค‘ ๋” ์ด์ƒ ์ด๋™ํ•  ์ˆ˜ ์—†์„๋•Œ ๊นŒ์ง€ ํƒ์ƒ‰ํ•œ ๊ฒฝ๋กœ ๊ธธ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๋‹ค. ๋” ์ด์ƒ ์ด๋™ํ•  ์ˆ˜ ์—†์„๋•Œ ๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด dfs๋ฅผ ํ™œ์šฉํ•˜์˜€๋‹ค. 1.์šฐ์„  ์ž…๋ ฅ์ด ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ๋“ค๋กœ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋“ค์„ 2์ฐจ์› ํ–‰๋ ฌ๋กœ ์ •๋ฆฌํ•ด์„œ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•˜์˜€๋‹ค. ๐Ÿ‘‡ for _ in range(M): l.append(list(map(int,input().split()))) # ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์—ฐ๊ฒฐ๋œ ๊ฐ„์„  for j in l: # 2์ฐจ์› ํ–‰๋ ฌ์˜ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ graph[j[0]].append(j[1]) graph[j[1]].append(j[0]) 2.๋‹ค์Œ์œผ๋กœ ๋ชจ๋“  ์ •์ ๋“ค์„ ๋Œ์•„๊ฐ€๋ฉฐ dfs๋ฅผ..

mc.thd
mincheolsong