알고리즘 CODEKATA 01 (두 수의 차)

오리너구리·2024년 5월 10일
0

CODEKATA

목록 보기
1/57
post-thumbnail

문제 설명

정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

제한 사항

  • 50000 ≤ num1 ≤ 50000
  • 50000 ≤ num2 ≤ 50000

내 풀이

class Solution {
    fun solution(num1: Int, num2: Int): Int {
        return num1-num2
    }
}

일단 제한 사항 무시하고 이렇게 하면 어떻게 되나 해봤는데 채점 하기 누르니까 맞다 나옴

저 제한 사항 안 지켰는데요..? ;;

다른 사람 풀이

class Solution {
    fun solution(num1: Int, num2: Int): Int {
        var answer : Int = 0
        if (num1 in -50000..50000 && num2 in -50000..50000){
            answer = num1 - num2
        }
        
        return answer
    }
}

answer 이라는 변수를 만들어주고,
if 문 안에 in 을 사용해서 num이 조건 안에 있으면
answer에 num1-num2 값을 넣고
answer를 리턴 하는 방식을 쓴 분도 계셨다.

class Solution {
    fun solution(num1: Int, num2: Int): Int {
        if(num1>50000 || num1<-50000 || num2>50000 || num2<-50000)
            return -1
        var answer: Int = num1 - num2
        return answer
    }
}

위와 비슷하지만 if 문 안에 in 대신 <, > 같은 비교 연산자를 사용하신 분도 계셨음

class Solution {
    fun solution(num1: Int, num2: Int): Int {
        val min = -50000
        val max = 50000

        if (!(num1 in min..max) || !(num2 in min..max))
        throw IllegalArgumentException("-50000 이상 50000 이하의 정수를 입력해주세요.")

        return num1 - num2
    }
}

이렇게 answer를 변수로 할당하지 않고, 최소 값과 최대 값을 변수로 만들고,

if문에서 ! 를 사용해서 num1, num2 가 min max 안에 있지 않으면,

IllegalArgumentException 으로 예외를 발생 시킨 분도 계셨다.


class Solution {
    fun subtract(num1: Int, num2: Int): Int {
        return num1 - num2
    }

    fun numberLimit(num: Int): Boolean {
        var permission: Boolean = true

        if(num < -50000) permission = false
        if(num > 50000) permission = false

        return permission
    }

    fun solution(num1: Int, num2: Int): Int {
        var answer: Int = 0

        if(numberLimit(num1) && numberLimit(num2))
            answer = subtract(num1, num2)

        return answer
    }
}

이렇게 함수를 만드신 분도 계셨음.

subtract 함수를 만들어서 계산 식을 넣고,

numberLimit 도 함수를 만들어서 Boolean 값을 리턴 하게 만들고,

solution 함수에 넣으신 분도 계셨다.

class Solution {
    fun solution(num1: Int, num2: Int): Int {
        var answer: Int = 0

        Validator.validateInputRange(num1)
        Validator.validateInputRange(num2)

        answer = num1 - num2
        return answer
    }
}

object Validator {
    private const val PREFIX = "[ERROR] "

    fun validateInputRange(input : Int){
        require(input in -50000 .. 50000) {PREFIX + "-50000 부터 50000 까지의 값을 입력해주세요."}
    }
}

이렇게 Validator 객체를 만들고,

그 안에 Int를 입력 받아서 해당 값이 범위 안에 있는지 검사하고, 범위를 벗어나면 require 함수로 예외를 발생 시키고 에러 메세지를 출력하게 만든 분도 계셨다.

여담

다른 사람들의 풀이를 보니까 아직 코딩응애는 뭔지도 몰라서 인터넷에 검색해봐야되는 함수를 사용하신 분도 계시고 해서 신기했당. 엄청 간단한 문제 같았는데, require 이나 IllegalArgumentException 같이 처음 보는 친구들이 등장하는 풀이를 보니까 더 간단하게 할 수 있는데 저렇게 한 이유가 뭘까 궁금해서 챗지피티 선생님한테 여쭤보니깐

네, solution 함수를 위와 같이 수정하여 두 정수의 차이를 계산할 수 있습니다. 그러나 기존 코드에서는 입력 값의 범위를 검사하는 부분과 실제로 계산하는 부분을 분리하여 작성했습니다. 이렇게 하면 입력 값의 유효성을 검사하고 유효하지 않을 경우 예외를 발생시키는 Validator 객체를 사용하여 코드를 더 간결하고 모듈화된 구조로 만들 수 있습니다. 또한, 이러한 구조는 유효성 검사 로직이 복잡해지거나 변경되어야 할 경우에도 더 쉽게 대응할 수 있도록 도와줍니다.

이런 답변을 주셨당.

계산하는 부분과 조건을 검사하는 부분을 분리해서 작성하면 나중에 로직이 복잡해질 때 대응이 쉽겠군용~!

그렇군용..

암튼 코딩 공부 재미땅

profile
오리너구리입니다

0개의 댓글