원래 백준 풀다가 ㅎㅇ의 추천으로 프로그래머스로 전향..!
백준은 나중에 짬 좀 차면 하지 않을까,,
[오늘의 문제]
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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)
기존 타입이 되도록 소숫점 아래 숫자들은 버림 한다
'멀고도 험난한 개발 일지' 카테고리의 다른 글
[Swift 알고리즘] split() vs components() (0) | 2023.03.14 |
---|---|
개발공부 ToDo - UI를 그릴 수 있게 된 뒤에는? (0) | 2022.12.24 |
WWDC21 - Discoverable Design (2) | 2022.10.03 |
이런저런_구글링_3 - UserDefaults, Singleton Pattern (0) | 2022.09.07 |
UIKit_유투브_신동규 - #5 UI 실습 (0) | 2022.07.18 |