멀고도 험난한 개발 일지

[Swift 알고리즘] Int 끼리의 연산 결과 생긴 Float 는 어떻게 될까?

이드entity 2023. 3. 18. 16:03
반응형

 

원래 백준 풀다가 ㅎㅇ의 추천으로 프로그래머스로 전향..!

백준은 나중에 짬 좀 차면 하지 않을까,,

 

[오늘의 문제]

 

프로그래머스

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

programmers.co.kr

 

문제는 들어가보면 확인할 수 있지만,

정수 배열이 주어졌을 때 등비수열인지 등차수열인지 판단하여 다음에 올 숫자를 알아내는 문제이다

 

간단하다고 생각해서 촤르륵 코드를 썼다

 

.

.

.

 

[처음에 작성한 코드]

import Foundation

func solution(_ common:[Int]) -> Int {
    if (common[0] + common[2])/2 == common[1] {
        return common.last! + common[1] - common[0]
    } else {
        return common.last! * common[1] / common[0]
    }
}

제출해보니까 잘 되는가 싶더니 4번째 테스트 케이스에서 자꾸 실패,,,

 

계속 고민하다 정 이상한걸 모르겠어서 <질문하기>를 들어가보니 나랑 비슷한 사람들이 꽤 있었다 ㅎㅎㅎ,,,,

다 4번째 테스트 케이스에서 실패했다는데,

댓글 달린걸 보니까 [1, 2, 4]인 경우도 있다고 하더라???

 

??

 

그래서 뭐 어쩌라고

지금 코드에서도 저런 입력값일 때 잘 돌아가는데,,

 

라고 생각했는데

'/2'가 뭔가 거슬렸다...

 

설마..?

 

에 그 설마가 맞더라

 

.

.

.

 

[테스트 해보려고 작성한 코드]

import Foundation

func solution(_ common:[Int]) -> Bool {
    if common[1] == (common[0] + common[2])/2 {
        return true
    } else {
        return false
    }
}

print(solution([1, 2, 4])) // true

(1 + 4)/2 = 2.5인데 여기서 common[1]이 int형이기 때문에 자동으로 2.5에서 0.5를 버린 것

이라고 생각했는데 다른 테스트를 해보니까

 

import Foundation

func solution(_ common:[Int]) -> Int {
    print((common[0] + common[2])/2) // 2
    return (common[0] + common[2])/2
}

print(solution([1, 2, 4])) // 2

함수 안에서 print 해도 2가 나오고, 반환값도 2가 나온다

 

즉, 함수의 반환값이 Int 형이라 return 될 때 Int로 바뀌는 것도 아니고,

연산 결과가 다른 Int와의 연산에 재사용 되어 Int로 바뀌는 것도 아닌,

기존 type을 따라가도록 알아서 타입을 변환해주는 것 같다!

그 결과로 소숫점 아래 부분들이 버림 된거고!!

 

이걸 알고 난 다음에 코드를 살짝 바꾸니까 바로 해결

 

.

.

.

 

[바꾼 코드(정답)]

import Foundation

func solution(_ common:[Int]) -> Int {
    if common[0] - common[1] == common[1] - common[2] {
        return common.last! + common[1] - common[0]
    } else {
        return common.last! * common[1] / common[0]
    }
}

나누기 2라는 연산을 없도록!

 

.

.

.

 

[배운 점]

Int 끼리의 연산에서 소숫점이 생기며 다른 type 이 나왔을 때(Float, Double)

기존 타입이 되도록 소숫점 아래 숫자들은 버림 한다

반응형