2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift] Programmers - 두 수의 나눗셈

2024. 2. 19. 20:17ㆍIOS/Swift-Algorithm (Programmers)
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/120806

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

* 두 수의 나눗셈 *

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에

1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

문제를 잘 보면 num 1과 2가 매개 변수로 아래와 같이 주어져 있습니다.

 

func solution(_ num1:Int, _ num2:Int) -> Int {

 

그랬을 때 num1을 2로 나눈 값에! 1000을 곱해야 합니다.

 

먼저 변수 division을 선언해주고 그 안에 정수가 선언된 num1과 2를 나눈 값을 넣어줍니다.

이후, division 를 반환하여 1000을 곱하는 방식 아주 단순하죠?

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

 

or

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

 

네 틀렸습니다.

 

왜 틀렸을까요?!

말 그대로 num1과 2를 나눈 값에 1000을 곱해서 반환하도록 했는데

사실 여기에는 큰 문제가 있습니다.

위 코드에는 큰 문제가 하나 있다면 바로 정수 나눗셈으로 인하여

소수점 이하의 값이 잘려나가게 된다는 점을 이해하셔야 합니다.

이게 바로 이 알고리즘의 핵심인거죠.

 

따라서 소수점 이하의 값을 버리지 않고 정.확.하.게 계산하기 위해서는

다른 방법을 사용해야 하는 것 입니다.

 

정수는 소수점 이하가 없는 수를 의미하고,

정수를 나누는 연산은 소수점 이하의 값을 버리고

결과적으로 정수 부분만 반환하는 것을 이야기 하는것이며

정수 나눗셈을 수행하면 소수점 이하의 값이 손실이 되는 상황이 발생하게 됩니다.

 

예를 들어 5를 2로 나누는 경우 결과는 2.5가 되어야 하는게 정상이잖아요?

하지만, 정수 나눗셈을 사용하게 되면 소수점이 사라지고 2가 되버립니다.

즉, 정수 나눗셈에서는 소수점 이하의 값은 버려지기 때문에 0.5가 손실되는 것이죠.

그렇다면 소수점 이하의 값을 유지 하기 위해서는

'실수형 데이터 타입'을 사용해야 한다는 것입니다.

그런데 실수형 데이터 타입은 많은 분들이 "double" 이라고 보고 계실꺼에요.

문제를 다시 보겠습니다.

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에

1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성하라.

저는 이렇게 아래 코드와 같이 진행 했습니다.

import Foundation

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

 

자 위 코드를 보면 num1에 1000을 곱한 후에 num2로 나누어서 소수점 이하의 값이 버려지지 않도록 한 코드입니다.

그런 다움에 정수 부분만 반환될 수 있도록 한 것이죠!

앞서서 말 했듯이 소수점 이하의 값을 유지하기 위해선 double을 사용 해야한다고 했죠?

저는 double을 사용 하지 않고 단순히 num1에 1000을 곱하고 그 다음 num2로 나눈 방식을 사용했습니다.

그말은 실수형 데이터 타입도 사용이 가능 하다 라는 뜻되죠?

앞서 우리는 num1과 2 자체는 현재 int(정수)선언 되어 있는걸 볼 수 있습니다.

이 정수 데이터 타입을 실수형 데이터 타입으로 형 변환을 시키면 쉽게 진행할 수 있는거죠.

import Foundation

func solution(_ num1:Int, _ num2:Int) -> Int {
    let division = Int ((Double(num1) / Double(num2)) * 1000)
    return division
}

 

위 코드와 같이 두개의 정수를 매개변수로 받아들이고,

Double의 형태로 각각의 정수 값을 형 변환 시켜

나눗셈 연산을 실수형으로 수행하는 방식으로 수행할 수 있습니다.

이후, 형변환된 두 값을 나누고 그 결과를 1,000으로 곱합니다.

이 때 나온 값은 소수점 이하를 포함한 결과가 됩니다.

728x90