Welcome! ๐Ÿ™‹โ€โ™‚๏ธ View more

Engineering ๐Ÿ’ป/Algorithm

[Algorithm] ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•œ Scala ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

DeepFlame 2022. 8. 22. 21:24

Scala๋ž€ ํ•จ์ˆ˜ํ˜• ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ์จ Spark๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ์—ญ๋Ÿ‰์— ํ•„์š”ํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

ํ•„์ž๋Š” Scala์–ธ์–ด์™€ ์นœํ•ด์ง€๊ธฐ ์œ„ํ•ด์„œ Scala ์–ธ์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งŽ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

https://github.com/DeepFlame-JR/Algorithm_Solving

 

GitHub - DeepFlame-JR/Algorithm_Solving: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด . Contribute to DeepFlame-JR/Algorithm_Solving development by creating an account on GitHub.

github.com

 

์•„๋ž˜์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ•„์š”ํ•œ Scala ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ


var a = "Hello"// ์ผ๋ฐ˜ ๋ณ€์ˆ˜ (Readonly)
val b = 3 // ์ƒ์ˆ˜
var (a, b) = (1, "Hello") // ๋‹ค์ค‘ ํ• ๋‹น

// ํด๋ž˜์Šค ์„ ์–ธ
class MyClass private(var name: String){
	def sayName(): Unit ={ // Unit = void
		println(name)
	}
}

 

 

๋ฐฐ์—ด


// ์„ ์–ธ
var a = List(1,2,3) // 1,2,3
var a = List.fill(2){0} // 0,0
var a = List.empty[Type] // ๋นˆ ๋ฐฐ์—ด

// ํŽธ์ง‘
var a = List(1,2,3)
a :+= 5 // 1,2,3,5
a +:= 0 // 0,1,2,3,5
a = a ++ Array(10) // 0,1,2,3,5,10
a = a.updated(3, 9) // 0,1,2,9,5,10

a.take(2) // 0,1 (0~n-1)
a.drop(2) // 2,3,4,... (n~N-1)
a.slice(1,3) // 1,2 (start~end-1)

a = a.sortWith(_ < _) // ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
println(a.mkString(",")) // print

// 2์ฐจ์› ๋ฐฐ์—ด
val matrix = Array.ofDim[Int](2,2)

 

 

์กฐ๊ฑด๋ฌธ/๋ฐ˜๋ณต๋ฌธ


// ๋ฐ˜๋ณต๋ฌธ
for(x <- 1 until 3) 
    println("x ๊ฐ’:" + x)

for(item <- items)
	println(item)

// 2์ค‘ ๋ฐ˜๋ณต๋ฌธ
for(x <- 1 to 2; y <-1 to 9 ){
    print( x +"*" + y + "=" + x*y +", ")
}
// 1*1=1, 1*2=2, 1*3=3, 1*4=4, 1*5=5, 1*6=6, 1*7=7, 1*8=8, 1*9=9, 2*1=2, 2*2=4, 2*3=6, 2*4=8, 2*5=10, 2*6=12, 2*7=14, 2*8=16, 2*9=18,

// ์กฐ๊ฑด๋ฌธ 1 line
x = if (a > b) a else b

 

 

๊ธฐํƒ€ ์ž๋ฃŒ๊ตฌ์กฐ


import scala.collection.mutable._  // ๊ธฐ๋ณธ๊ฐ’์ด immutable์ด๋ผ ๋ณ€์ˆ˜ ๋‚ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜ํƒ€๋‚จ

// HashMap
val map = Map[Char, Int]()
map += ("b" -> 2)
map -= "b"
map.toArray.sortBy(_._2)

// Queue
val queue = new Queue[Int]
queue.enqueue(1)
while(queue.nenEmpty)
	var cur = queue.dequeue()

// Stack
val stack = new Stack[Int]
stack.push(1)
var cur = stack.pop()

 

 

Map/Reduce


// map, flatMap (์š”์†Œ์— ๋ณ€ํ™”๋ฅผ ์ค€๋‹ค)
val fruits = Array("apple", "banana", "orange")
fruits.map(_.toUpperCase)  // APPLE, BANANA, ORANGE
fruits.flatMap(_.toUpperCase)  // A, P, P, L, E, B, A, N, A, N, A, O, R, A, N, G, E

val strings = List("1", "2", "foo", "3", "bar")
strings.map(toInt)  // Some(1), Some(2), None, Some(3), None
strings.flatMap(toInt)  // 1, 2, 3

// filter
val a = List(1,2,3,4)
a.filter(_%2==0) // 2,4
a.partition(_%2==0) // (List(2,4), List(1,2))

// reduce (๋‹จ์ผ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ ์‹ถ๋‹ค)
List(1,2,3).reduceLeft(_+_)  // ์ขŒ์ธก_: ๋ˆ„์ ๊ฐ’, ์šฐ์ธก_: ๋Œ€์ƒ๊ฐ’
List(1,2,3).reduceRight(_+_)  // ์ขŒ์ธก_: ๋Œ€์ƒ๊ฐ’, ์šฐ์ธก_: ๋ˆ„์ ๊ฐ’
List(1,2,3).foldLeft(4)(_+_)  // 4(์‹œ์ž‘๊ฐ’)+1+2+3

// Char Counter
val Counter = scala.collection.mutable.Map.empty[Char, Int]
str.distinct.toCharArray.map(x => Counter += (x -> str.count(_==x)))