๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š Algorithm

(60)
Baekjoon ๋ฐฑ์ค€ 1037 ์•ฝ์ˆ˜ ๋ฌธ์ œํ’€์ด 1037 ๋ฌธ์ œ ์–‘์ˆ˜ A๊ฐ€ N์˜ ์ง„์งœ ์•ฝ์ˆ˜๊ฐ€ ๋˜๋ ค๋ฉด, N์ด A์˜ ๋ฐฐ์ˆ˜์ด๊ณ , A๊ฐ€ 1๊ณผ N์ด ์•„๋‹ˆ์–ด์•ผ ํ•œ๋‹ค. ์–ด๋–ค ์ˆ˜ N์˜ ์ง„์งœ ์•ฝ์ˆ˜๊ฐ€ ๋ชจ๋‘ ์ฃผ์–ด์งˆ ๋•Œ, N์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— N์˜ ์ง„์งœ ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด ๊ฐœ์ˆ˜๋Š” 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N์˜ ์ง„์งœ ์•ฝ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค. ์ถœ๋ ฅ ์ฒซ์งธ ์ค„์— N์„ ์ถœ๋ ฅํ•œ๋‹ค. N์€ ํ•ญ์ƒ 32๋น„ํŠธ ๋ถ€ํ˜ธ์žˆ๋Š” ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ’€์ด N = int(input()) A_list = [] A_list = list(map(int, input().split())) if N == 1 : res = A_list[0] * A_list[0] else : A..
Baekjoon ๋ฐฑ์ค€ 1225 ์ด์ƒํ•œ ๊ณฑ์…ˆ ๋ฌธ์ œํ’€์ด 1225 ๋ฌธ์ œ A×B๋ฅผ ๊ณ„์‚ฐํ•˜๋‹ค ์ง€๊ฒจ์›Œ์ง„ ํ˜•ํƒ์ด๋Š” A×B๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์ •์˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. A์—์„œ ํ•œ ์ž๋ฆฌ๋ฅผ ๋ฝ‘๊ณ  × B์—์„œ ์ž„์˜๋กœ ํ•œ ์ž๋ฆฌ๋ฅผ ๋ฝ‘์•„ ๊ณฑํ•œ๋‹ค. ์˜ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ (A๊ฐ€ n์ž๋ฆฌ, B๊ฐ€ m์ž๋ฆฌ ์ˆ˜๋ผ๋ฉด ์ด ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์€ n×m๊ฐœ)์„ ๋”ํ•œ ์ˆ˜๋กœ ์ •์˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 121×34๋Š” 1×3 + 1×4 + 2×3 + 2×4 + 1×3 + 1×4 = 28 ์ด ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜•ํƒ์ด์˜ ๊ณฑ์…ˆ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— A์™€ B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋‘ ์ˆ˜๋Š” ๋ชจ๋‘ 10,000์ž๋ฆฌ๋ฅผ ๋„˜์ง€ ์•Š๋Š” ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์ด๋‹ค. ์ˆ˜๊ฐ€ 0์ธ ๊ฒฝ์šฐ์—๋Š” 0๋งŒ ์ฃผ์–ด์ง€๋ฉฐ, ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ถœ๋ ฅ ์ฒซ์งธ ์ค„์— ํ˜•ํƒ์ด์˜ ๊ณฑ์…ˆ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ’€์ด n1, n2 = map(in..
Baekjoon ๋ฐฑ์ค€ 1181 ๋‹จ์–ด ์ •๋ ฌ ๋ฌธ์ œํ’€์ด 1181 ๋ฌธ์ œ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ N๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 1. ๊ธธ์ด๊ฐ€ ์งง์€ ๊ฒƒ๋ถ€ํ„ฐ 2. ๊ธธ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๋‹จ, ์ค‘๋ณต๋œ ๋‹จ์–ด๋Š” ํ•˜๋‚˜๋งŒ ๋‚จ๊ธฐ๊ณ  ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 20,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 50์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ์ถœ๋ ฅ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜์—ฌ ๋‹จ์–ด๋“ค์„ ์ถœ๋ ฅํ•œ๋‹ค. ํ’€์ด N = int(input()) word_list = [] for i in range(N) : word_list.append(input()) set_word_list = set(word_list) word_list = lis..
[Baekjoon] ๋ฐฑ์ค€ 1010 '๋‹ค๋ฆฌ๋†“๊ธฐ' ๋ฌธ์ œํ’€์ด C์–ธ์–ด, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด 1010 ๋ฌธ์ œ ์žฌ์›์ด๋Š” ํ•œ ๋„์‹œ์˜ ์‹œ์žฅ์ด ๋˜์—ˆ๋‹ค. ์ด ๋„์‹œ์—๋Š” ๋„์‹œ๋ฅผ ๋™์ชฝ๊ณผ ์„œ์ชฝ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ํฐ ์ผ์ง์„  ๋ชจ์–‘์˜ ๊ฐ•์ด ํ๋ฅด๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์žฌ์›์ด๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์—†์–ด์„œ ์‹œ๋ฏผ๋“ค์ด ๊ฐ•์„ ๊ฑด๋„ˆ๋Š”๋ฐ ํฐ ๋ถˆํŽธ์„ ๊ฒช๊ณ  ์žˆ์Œ์„ ์•Œ๊ณ  ๋‹ค๋ฆฌ๋ฅผ ์ง“๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•˜์˜€๋‹ค. ๊ฐ• ์ฃผ๋ณ€์—์„œ ๋‹ค๋ฆฌ๋ฅผ ์ง“๊ธฐ์— ์ ํ•ฉํ•œ ๊ณณ์„ ์‚ฌ์ดํŠธ๋ผ๊ณ  ํ•œ๋‹ค. ์žฌ์›์ด๋Š” ๊ฐ• ์ฃผ๋ณ€์„ ๋ฉด๋ฐ€ํžˆ ์กฐ์‚ฌํ•ด ๋ณธ ๊ฒฐ๊ณผ ๊ฐ•์˜ ์„œ์ชฝ์—๋Š” N๊ฐœ์˜ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๊ณ  ๋™์ชฝ์—๋Š” M๊ฐœ์˜ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. (N ≤ M) ์žฌ์›์ด๋Š” ์„œ์ชฝ์˜ ์‚ฌ์ดํŠธ์™€ ๋™์ชฝ์˜ ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค๋ฆฌ๋กœ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. (์ด๋•Œ ํ•œ ์‚ฌ์ดํŠธ์—๋Š” ์ตœ๋Œ€ ํ•œ ๊ฐœ์˜ ๋‹ค๋ฆฌ๋งŒ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค.) ์žฌ์›์ด๋Š” ๋‹ค๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ์ง€์œผ๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ์ชฝ์˜ ์‚ฌ์ดํŠธ ๊ฐœ์ˆ˜๋งŒํผ (N๊ฐœ) ๋‹ค๋ฆฌ๋ฅผ ์ง€์œผ๋ ค๊ณ  ํ•œ๋‹ค. ๋‹ค๋ฆฌ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ๊ฒน์ณ์งˆ ์ˆ˜ ์—†๋‹ค๊ณ  ํ•  ๋•Œ ..
Dynamic Programming(DP) ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, Python์œผ๋กœ ํ‘ธ๋Š” ํ”ผ๋ณด๋‚˜์น˜ Dynamic Programming ํฐ ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆ„์–ด ์ž‘์€ ๋ฌธ์ œ๋กœ ํ‘ธ๋Š” ๊ฒƒ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋Š” ๋‹จ ํ•œ ๋ฒˆ์˜ ํ’€์ด๋งŒ ํ•œ๋‹ค. Dynamic Programming ๊ณผ Recursion(์žฌ๊ท€)์˜ ์ฐจ์ด์  DP์™€ ์žฌ๊ท€๋Š” ์–ผํ•๋ณด๋ฉด '๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ผ์–ด๋‚˜๋Š” ์ ' ์—์„œ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ํฐ ์ฐจ์ด์ ์€ ์ผ๋ฐ˜์ ์ธ ์žฌ๊ท€๋ฅผ ๋‹จ์ˆœํžˆ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋“ค์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต ๋˜์–ด ๋น„ํšจ์œจ์ ์ธ ๊ณ„์‚ฐ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜์ด๋‹ค.  DP ์กฐ๊ฑด ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. 1. ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒ 2. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋“ค์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ผ์–ด๋‚  ๋•Œ, ๊ฐ™์€ ๋ฌธ์ œ๋Š” ํ•ญ์ƒ ์ •๋‹ต๋„ ๊ฐ™๋‹ค. ์ฆ‰, ์ค‘๋ณต ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. DP ๋ฌธ์ œ ํ’€์ด ๋ฐฉ๋ฒ• ๋ชจ๋“  ์ž‘์€ ๋ฌธ์ œ๋Š” ํ•œ ๋ฒˆ..
์•Œ๊ณ ๋ฆฌ์ฆ˜ - Greedy (ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์š•์‹ฌ์Ÿ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜), ์ตœ์ ํ•ด ์ฐพ๊ธฐ Greedy Alogrithm Greedy๋Š” ์‚ฌ์ „์ ์ธ ์˜๋ฏธ๋กœ 'ํƒ์š•์Šค๋Ÿฌ์šด', '์š•์‹ฌ๋งŽ์€' ์ด๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋˜๋Š” ์š•์‹ฌ์Ÿ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. ๋ฏธ๋ž˜๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์„ ํƒ์˜ ์ˆœ๊ฐ„๋งˆ๋‹ค ๋‹น์žฅ ๋ˆˆ์•ž์— ๋ณด์ด๋Š” ์ตœ์ ์˜ ์„ ํƒ์„ ํ•˜๋Š” ๊ธฐ๋ฒ• ๊ฐ ๋‹จ๊ณ„์—์„œ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•œ ๊ฒƒ์ด ์ „์ฒด์ ์œผ๋กœ๋„ ์ตœ์„ ์ด๊ธธ ๋ฐ”๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์„ ํƒ : ํ˜„์žฌ ์ƒํƒœ์—์„œ ์ตœ์ ์˜ ํ•ด๋‹ต ์„ ํƒ ์ ์ ˆ์„ฑ ๊ฒ€์‚ฌ : ์„ ํƒ๋œ ๋‹ต์ด ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ง€ ํ™•์ธ ํ•ด๋‹ต ๊ฒ€์‚ฌ : ์›๋ž˜์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์„ ํƒ ์ ˆ์ฐจ๋กœ ๋Œ์•„๊ฐ€ ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์กฐ๊ฑด ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€ ์กฐ๊ฑด์„ ์„ฑ๋ฆฝํ•ด์•ผ ํ•œ๋‹ค. 1. ํƒ์š•์  ์„ ํƒ ์†์„ฑ (Greedy Choice Prop..

728x90