Skip to content

Latest commit

ย 

History

History
87 lines (62 loc) ยท 4.43 KB

220225_Greedy,_wholeNumberValue,_enumerated,_reduce.md

File metadata and controls

87 lines (62 loc) ยท 4.43 KB

220225 Greedy, wholeNumberValue, enumerated, reduce

TIL (Today I Learned)

2์›” 25์ผ (๊ธˆ)

ํ•™์Šต ๋‚ด์šฉ

  • Greedy Algorithm
  • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ’€์ด ์ค‘ ๋ณ€ํ™˜ ๊ฟ€ํŒ~

ย 

๊ณ ๋ฏผํ•œ ์  / ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

[Greedy Algorithm]

์ด๋ฒˆ์ฃผ์ฐจ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๊ฐ€ ๊ทธ๋ฆฌ๋””์ธ๋ฐ... ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•„์„œ....

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜(Greedy Algorithm)

  • Greedy๋Š” 'ํƒ์š•์Šค๋Ÿฌ์šด, ์š•์‹ฌ๋งŽ์€'์ด๋ž€ ๋œป์ด๋‹ค.
  • ๋ง ๊ทธ๋Œ€๋กœ ์„ ํƒ์˜ ์ˆœ๊ฐ„๋งˆ๋‹ค ๋‹น์žฅ ๋ˆˆ์•ž์— ๋ณด์ด๋Š” ์ตœ์ ์˜ ์ƒํ™ฉ๋งŒ์„ ์ซ’์•„ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ทผ์‚ฌ์ ์ธ ๋ฐฉ๋ฒ•
  • ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ์ˆœ๊ฐ„์— ์ตœ์ ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ฒƒ์„ ์„ ํƒํ•ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์—ฌ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์— ๋„๋‹ฌํ•œ๋‹ค.
  • ์ˆœ๊ฐ„๋งˆ๋‹ค ํ•˜๋Š” ์„ ํƒ์€ ๊ทธ ์ˆœ๊ฐ„์— ๋Œ€ํ•ด ์ง€์—ญ์ ์œผ๋กœ๋Š” ์ตœ์ ์ด์ง€๋งŒ, ๊ทธ ์„ ํƒ๋“ค์„ ๊ณ„์† ์ˆ˜์ง‘ํ•˜์—ฌ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์„ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•ด์„œ, ๊ทธ๊ฒƒ์ด ์ตœ์ ์ด๋ผ๋Š” ๋ณด์žฅ์ด ์—†๋‹ค.
  • ํ•˜์ง€๋งŒ ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค์€ ์ง€์—ญ์ ์œผ๋กœ ์ตœ์ ์ด๋ฉด์„œ ์ „์—ญ์ ์œผ๋กœ ์ตœ์ ์ธ ๋ฌธ์ œ๋“ค์ด๋‹ค.

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์„ ํƒ ์ ˆ์ฐจ(Selection Procedure)
    • ํ˜„์žฌ ์ƒํƒœ์—์„œ์˜ ์ตœ์ ์˜ ํ•ด๋‹ต์„ ์„ ํƒ
  • ์ ์ ˆ์„ฑ ๊ฒ€์‚ฌ(Feasibility Check)
    • ์„ ํƒ๋œ ํ•ด๊ฐ€ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ
  • ํ•ด๋‹ต ๊ฒ€์‚ฌ(Solution Check)
    • ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์„ ํƒ์ ˆ์ฐจ๋กœ ๋Œ์•„๊ฐ€ ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณต

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ์กฐ๊ฑด

  • ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž˜ ์ž‘๋™ํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋Œ€๋ถ€๋ถ„ ํƒ์š•์Šค๋Ÿฐ ์„ ํƒ ์กฐ๊ฑด(greedy choice property)๊ณผ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ ์กฐ๊ฑด(Optimal Substructure) ์ด๋ผ๋Š” ๋‘๊ฐ€์ง€ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋œ๋‹ค.
  • ํƒ์š•์Šค๋Ÿฐ ์„ ํƒ ์กฐ๊ฑด์€ ์•ž์˜ ์„ ํƒ์ด ์ดํ›„์˜ ์„ ํƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ, ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ ์กฐ๊ฑด์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ ํ•ด๊ฐ€ ๋ถ€๋ถ„ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋„ ์—ญ์‹œ ์ตœ์ ํ•ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
  • ํƒ์š•์  ์„ ํƒ ์†์„ฑ(Greedy Choice Property)
    • ์•ž์˜ ์„ ํƒ์ด ์ดํ›„์˜ ์„ ํƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  • ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(Optimal Substructure)
    • ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ข… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ถ€๋ถ„ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์  ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋„ ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทผ์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ณ„์‚ฐ ์†๋„๊ฐ€ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ๊ฒฝ์šฐ ์—ญ์‹œ ์–ด๋Š ์ •๋„๊นŒ์ง€ ์ตœ์ ํ•ด์— ๊ฐ€๊นŒ์šด ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๋ณด์žฅํ•˜๋ ค๋ฉด ์—„๋ฐ€ํ•œ ์ฆ๋ช…์ด ํ•„์š”ํ•˜๋‹ค.
  • ์–ด๋–ค ํŠน๋ณ„ํ•œ ๊ตฌ์กฐ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ธ์ œ๋‚˜ ์ตœ์ ํ•ด๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ๊ตฌ์กฐ๋ฅผ ๋งคํŠธ๋กœ์ด๋“œ๋ผ ํ•œ๋‹ค.
  • ๋งคํŠธ๋กœ์ด๋“œ๋Š” ๋ชจ๋“  ๋ฌธ์ œ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‚˜, ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋ฐœ๊ฒฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ™œ์šฉ๋„๋ฅผ ๋†’์—ฌ์ค€๋‹ค.

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•ญ์ƒ ์ตœ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์–ด๋Š์ •๋„ ์ตœ์ ์— ๊ทผ์‚ฌํ•œ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์ด ์žฅ์ ์œผ๋กœ ์ธํ•ด ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทผ์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด๋„ ์–ธ์ œ๋‚˜ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ(๋งคํŠธ๋กœ์ด๋“œ)๊ฐ€ ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ๋น ๋ฅธ ๊ณ„์‚ฐ ์†๋„๋กœ ๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฟ€ํŒ]

https://developer.apple.com/documentation/swift/character/3127025-wholenumbervalue https://developer.apple.com/documentation/swift/array/1687832-enumerated

// String to [Int]
let arr: [Int] = "12345".compactMap { $0.wholeNumberValue } 

// ๋ฐฐ์—ด ์š”์†Œ ์ธ๋ฑ์Šค ๊ตฌํ•˜๊ธฐ enumerated()
let withIndex = ["์ผ","์ด","์‚ผ","์‚ฌ","์˜ค"].enumerated().map { print($0.offset, $0.element)}
/*
0 ์ผ
1 ์ด
2 ์‚ผ
3 ์‚ฌ
4 ์˜ค
*/

// ์ด๊ฑด ๋‹ค์‹œ ๋ณต๊ธฐ์šฉ. reduce๋กœ [Int] to String
let str: String = [1,2,3,4,5].reduce("") { $0 + String($1) }