본문 바로가기

Mobile/Swift

[코딩테스트 입문] Swift - Day 2

반응형


Q. 정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

func solution(_ num1:Int, _ num2:Int) -> Int { num1 * 1000 / num2 }

 

Q. 정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

func solution(_ num1:Int, _ num2:Int) -> Int { num1 == num2 ? 1 : -1 }

Q. 첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

func solution(_ denum1:Int, _ num1:Int, _ denum2:Int, _ num2:Int) -> [Int] {
    var number: Int = num1 * num2
    var denumber: Int = denum1 * num2 + denum2 * num1

    var x: Int
    
    var a: Int = max(number, denumber)
    var b: Int = min(number, denumber)
    
    while b != 0 {
        x = a % b
        a = b
        b = x
    }
    
    x = a
    
    return [denumber/x, number/x]
}

아래 답변은 프로그래머스에서 다른 사람이 작성한 답변이다. 내장 함수 filter 와 max 를 이용해서 최대 공약수를 구하는 공식을 만들었다. 어떻게 이렇게 간단하게 코드를 짤 수 있는지 .. 대단하다.

최대 공약수 부분만 보자면 1부터 계산된 분자, 분모 값까지의 자연수들을 필터링한다. 필터링 기준은 분자와 분모를 나눈 나머지 값이 0이 되는 값들만 필터링한다. 그 다음 맥스 값을 구하면 최대 공약수가 구해진다. 내가 작성한 while 문으로 구하는 방법보다 훨씬 간단하고 가독성이 좋다. 따로 변수를 선언할 필요없이 깔끔하게 계산이 가능하다.

// 다른 사람 답변
func solution(_ denum1:Int, _ num1:Int, _ denum2:Int, _ num2:Int) -> [Int] {
    let boonja = denum1 * num2 + denum2 * num1
    let boonmo = num1 * num2
    let gcd = (1...min(boonja, boonmo)).filter { boonja % $0 == 0 && boonmo % $0 == 0 }.max()!
    return [boonja/gcd, boonmo/gcd]
}

Q. 정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

func solution(_ numbers:[Int]) -> [Int] { numbers.map { $0 * 2 }}
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

 

반응형