꿈틀꿈틀 개발일기

20231207 / 계산기 만들기

by jeongminy

# 코드타카 10번 문제를 풀었다.

class Solution {
    fun solution(numbers: IntArray): Double {
        var average = numbers.sum().toDouble() / numbers.size
        return average
    }
}

내가 풀었던 방식이다. 그런데 알고보니 평균을 구하는 메소드를 이용하면 더 간편하다는것을 알았다.
다른사람들이 푼 방식을 보니 numbers.average() 를 이용하면 되었다.

따라서 내생각에도 아래 코드가 더 적절한것 같다.

class Solution {
    fun solution(numbers: IntArray): Double = numbers.average()
}

 

# 계산기 만들기 (Lv3)

  • Lv 3
    • 객체를 주입해요
    • addOperation메소드는 AddOperation객체를 매개변수로 입력받아요
    • main.kt의 결과가 정상적으로 출력되도록 ##답안##을 작성해주세요
package src.CalculatorLv3

fun main(){
    val calc = Calculator()

    println("계산기를 실행합니다.")

    println("첫번째 숫자를 입력해 주세요")
    var num1 = readLine()!!.toDouble()

    println("두번째 숫자를 입력해 주세요")
    var num2 = readLine()!!.toDouble()

    println("연산자를 입력해 주세요.")
    var operator = readLine()!!.toString()

    var result = 0.0

    when (operator){
        "+" -> result = calc.add(AddOperation(), num1, num2)
        "-" -> result = calc.minus(MinusOperation(), num1, num2)
        "*" -> result = calc.multiply(MultiplyOperation(), num1, num2)
        "/" -> result = calc.devide(DivideOperation(), num1, num2)
        "%" -> result = calc.rest(RestOperation(), num1, num2)
    }

    println("${num1}과 ${num2}의 ${operator} 결과는 ${result} 입니다.")
}


class Calculator {
    fun add (aaa: AddOperation, num1:Double, num2:Double):Double{
        return aaa.operate(num1, num2)
    }
    fun minus (bbb: MinusOperation, num1:Double, num2:Double):Double{
        return bbb.operate(num1, num2)
    }
    fun multiply (ccc: MultiplyOperation, num1:Double, num2:Double):Double{
        return ccc.operate(num1, num2)
    }
    fun devide (ddd: DivideOperation, num1:Double, num2:Double):Double{
        return ddd.operate(num1, num2)
    }
    fun rest (eee: RestOperation, num1:Double, num2:Double):Double{
        return eee.operate(num1, num2)
    }
}


class AddOperation{
    fun operate(num1: Double, num2: Double): Double = (num1 + num2).toDouble()
}

class MinusOperation{
    fun operate(num1: Double, num2: Double): Double = (num1 - num2).toDouble()
}

class MultiplyOperation{
    fun operate(num1: Double, num2: Double): Double = (num1 * num2).toDouble()
}

class DivideOperation{
    fun operate(num1: Double, num2: Double): Double = (num1 / num2).toDouble()
}

class RestOperation{
    fun operate(num1: Double, num2: Double): Double = (num1 % num2).toDouble()
}

 

혼자서 머리싸매고 어떻게든 해결해 보려 했지만 몇시간이 흘러도 도저히 답이 보이지 않고 해결방법을 알 수 없어서,
튜터님의 도움을 받았다.


문제는 class Calculator 클래스와 class AddOperation의 연결을 어떻게 해야 할지에 대해서는

class Calculator {
    fun add (aaa: AddOperation, num1:Double, num2:Double):Double{
        return aaa.operate(num1, num2) 
    }

로 해결할 수 있었고,

결과부분에서는

result = calc.add(AddOperation(), num1, num2)

로 해결할 수 있었다.

그렇게 똑같이 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 동일하게 만들어서 드디어 완성할 수 있게 되었다. ㅜㅜ

 

블로그의 정보

꿈틀꿈틀 개발일기

jeongminy

활동하기