본문 바로가기

Programming/Algorithms

[Algorithms] FizzBuzz

Problem


1 ~ n까지의 숫자 중
3의 배수이면 Fizz
5의 배수이면 Buzz
15의 배수이면 FizzBuzz
나머지는 해당 숫자

Input : Int
Output : String

Solution(kotlin 기준)


Solution 1

        
        1234567891011121314151617181920212223
        fun fizzBuzz(n: Int): String {
    var result = ""

    for(i in 1..n) {
        var fizzBuzz = ""
        
        if(i % 3 == 0) {
            fizzBuzz += "fizz"
        }

        if(i % 5 == 0) {
            fizzBuzz += "buzz"
        }

        if(fizzBuzz.isEmpty()) {
            fizzBuzz = i.toString()
        }

        result += fizzBuzz + if(i != n) ", " else ""
    }

    return result
}

      

Solution 2

        
        123456789
        fun fizzBuzz(n: Int): String {
    val fizz = { value: Int -> if(value % 3 == 0) "fizz" else "" }
    val buzz = { value: Int -> if(value % 5 == 0) "buzz" else "" }

    return (1..n).joinToString(", ") { i ->
        val fizzBuzz = fizz(i) + buzz(i)
        if(fizzBuzz.isEmpty()) i.toString() else fizzBuzz
    }
}

      

Solution 3

        
        123456789
        fun fizzBuzz(n: Int): String {
	val fizz = { value: Int -> if(value % 3 == 0) "fizz" else "" }
	val buzz = { value: Int -> if(value % 5 == 0) "buzz" else "" }
	val fizzBuzzOrNull = { value: String -> if(value.isNotEmpty()) value else null }
	val print = { i: Int -> fizzBuzzOrNull(fizz(i) + buzz(i)) ?: i.toString() }
	// val print = { i: Int -> { value: String -> if(value.isNotEmpty()) value else null}(fizz(i) + buzz(i)) ?: i.toString() } // fizzBuzzOrNull + print
    
	return (1..n).joinToString(postfix = ", ", transform = print)
}

      

OR

        
        123456789
        fun fizzBuzz(n: Int): String {
    val fizz = { value: Int -> if (value % 3 == 0) "fizz" else "" }
    val buzz = { value: Int -> if (value % 5 == 0) "buzz" else "" }
    val fizzBuzzOrValue = { value: Int ->
        (fizz(value) + buzz(value)).takeIf { it.isNotEmpty() }?.run { this } ?: value.toString()
    }
    
    return (1..n).map(fizzBuzzOrValue).joinToString()
}

      


Solution3에서 더 방법이 있을 것 같은데 한계가 느껴지네요.... 
다른 코드로 푸시는 방법이 있으시면 댓글 남겨주세요! 댓글 하나가 저에겐 힘이 됩니다!!!

Idea by


Functional Programming이 뭔가요? - 송치원(곰튀김)