안녕하세요! 피피아노입니다 🎵
이번 포스팅에서는 Swift에서 제곱수를 판별하는 방법에 대해서 정리를 해보려고 합니다.
그럼 바로 시작하겠습니다.
문제 설명
먼저 문제부터 간단하게 살펴보겠습니다.
어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 리턴하고 아니라면 2를 리턴을 해줘야 합니다.
예를 들어서 n이 144라면 12를 제곱했을 때 나올 수 있는 숫자이므로 1을 리턴해주고, 976은 어떤 수를 제곱해도 나올 수 없는 숫자이니 2를 리턴합니다.
제한사항: 1 <= n <= 1,000,000
문제 풀이
우선 Swift에서 제곱근을 구하기 위해 사용할 수 있는 함수인 sqrt함수를 사용해봤습니다. sqrt 함수는 Double을 반환하므로 바로 사용할 수 없고 n을 Double로 변환해야 했습니다. 그리고 해당 값을 특정 변수에 저장해야 했는데 저는 메모리 효율성과 시간 효율성을 조금이라도 챙기기 위해 var 변수 대신 let 변수로 선언하였습니다.
let sqrtValue = sqrt(Double(n))
제곱근은 소수점을 포함한 실수(Double)로 반환되며, 이 값이 정수인지 확인해야 합니다.
이를 위해 floor 함수를 사용하여, 제곱근 값의 소수점을 버리고 가장 가까운 작은 정수로 내림 처리를 해주었습니다. 그런 다음, 원래의 제곱근 값(sqrtvalue)과 내림 처리된 값(floor(sqrtvalue))을 비교하였습니다. 그리고 if else문을 사용해서 만약 두 값이 같다면, 이는 sqrtvalue가 정수라는 뜻이며, 주어진 값 n이 어떤 수의 제곱임을 의미합니다. 이 경우, 1을 반환하게 코드를 작성했습니다.
반대로, 두 값이 다르다면 제곱근에 소수점 이하 값이 존재하므로 sqrtvalue는 정수가 아닙니다. 따라서 n은 제곱수가 아니며, 이 경우 2를 반환합니다.
*floor 함수: 주어진 실수를 내림하여 가장 가까운 작은 정수로 반환하는 함수입니다. 즉, 소수점 아래 자리를 무시하고 작은 방향으로 내림합니다.
if sqrtvalue == floor(sqrtvalue) {
return 1
} else {
return 2
}
}
전체 소스 코드
import Foundation
func solution(_ n: Int) -> Int {
let sqrtvalue = sqrt(Double(n))
if sqrtvalue == floor(sqrtvalue) {
return 1
} else {
return 2
}
}
느낀 점
제곱수를 확인하기 위해 어떤 함수를 사용해야 할지 몰랐지만, 이번 기회를 통해 sqrt 함수와 floor 함수를 사용하는 방법을 배우게 되었습니다. 이 과정에서 sqrt 함수가 Double형 값을 반환한다는 등의 특징도 알게 되었고, 이를 활용한 다양한 응용 방법도 익힐 수 있었습니다.
감사합니다.
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > Swift' 카테고리의 다른 글
[Swift] stride와 enumerated 알아보기 (2) | 2024.11.24 |
---|---|
[Swift] 과일 장수 문제 풀이 및 회고 (4) | 2024.11.20 |
[Swift] n의 배수 고르기 문제 회고 (5) | 2024.11.14 |
[Swift] 배열의 유사도 회고 (11) | 2024.11.08 |
[Swift] Actor 이해하기 (1/2) (27) | 2024.11.04 |