반응형
용어 설명
공약수: 두 개 이상의 자연수의 공통인 약수
최대공약수:
공약수 중에서 가장 큰 수
공배수: 두 개 이상의 자연수의 공통인 배수
최소공배수:
공배수 중에서 가장 작은 수
알고리즘
- input 입력함수 선언
- 구분자설정
- 문자형 배열로 전환
- 입력값이 없는경우, 띄어쓰기 오류에 대한 처리
- 숫자입력이 아닌 경우, 오류처리
- 숫자형 배열로 전환
- solution 함수에 입력
- solution함수에서 반환한 문자열 출력
- gcd 최대공약수 구하는 함수 선언
- solution 최대공약수를 이용해 최소공배수를 구하고 문자열을 출력하는 함수선언
- result빈배열 생성
- gcd함수에서 구한 최대공약수를 배열의 첫번째에 추가
- 최소공배수를 구해 배열의 두번째에 추가
- 문자열 변수 answer에 최대공약수, 최소공배수를 출력하는 내용 담기
- 두 수가 서로소인 경우, 각각의 리턴값 만들기
- input함수 재시작
코드정리
//
// main.swift
// calGcdAndLcm
//
// Created by bang_hyeonseok on 2021/12/16.
//
import Foundation
// MARK: - input함수 선언
func input(){
print("두 개의 숫자를 입력하세요. ex)24 18" )
let inputNum = readLine()
if let inputNum = inputNum{
// 구분자 설정
let stringArray = inputNum.components(separatedBy: [" ","/",",","-","."])
// print(stringArray)
// 입력값이 없는경우, 띄어쓰기 잘 못한 경우 오류처리
if stringArray.count != 2 {
print("양식의 길이에 맞지않습니다. 두 개의 숫자만 입력해주세요")
input()
// 성공
} else {
// 숫자로 입력하지 않을 경우 오류처리
let firstNum: Int? = Int(stringArray[0])
guard let _ = firstNum else {
print("앞자리를 숫자로 입력하세요")
return input()
}
let secondNum: Int? = Int(stringArray[1])
guard let _ = secondNum else {
print("뒷자리를 숫자로 입력하세요")
return input()
}
//문자형 배열을 숫자형 배열로 변환
//다른 타입에 오류처리했기때문에 강제 추출
let numArray = stringArray.map {
Int(String($0))!
}
print(solution(numArray[0], numArray[1]))
input()
}
}
}
input()
// MARK: - 최대공약수를 구하는 함수
/**
- parameters:
- a: 앞 숫자
- b: 뒷 숫자
*/
func gcd(_ a: Int, _ b: Int) -> Int {
// r: 나머지
let r = a % b
if r == 0 {
return min(a,b)
} else {
return gcd(b,r)
}
// return 0 == r ? min(a,b) : gcd(b,r)
}
// MARK: - 최대공약수를 이용해 최대공약수와 최소공배수를 출력하는 함수
/**
- parameters:
- n: 앞 숫자
- m: 뒷 숫자
*/
func solution(_ n:Int, _ m: Int) -> String {
//초기값
var result: Array<Int> = []
var answer: String = "최대공약수와 최소공배수"
//최대공약수를 result배열의 첫번째에 추가
result.append(gcd(n, m))
//최고공배수를 구하는 결과값을 result 배열의 두번째에 추가
result.append(n * m / gcd(n, m))
//두 수가 서로소인경우 처리
if (result[0]) == 1 {
answer = "입력하신 두 숫자는 서로소 입니다. 서로소는 공약수가 1만 존재합니다.\n최대공약수: \(result[0])\n최소공배수: \(result[1])"
return answer
} else {
answer = "최대공약수: \(result[0])\n최소공배수: \(result[1])"
return answer
}
}
반응형
'모바일앱 > Swift' 카테고리의 다른 글
와일드카드 식별자 (0) | 2021.12.20 |
---|---|
for 문에서의 제어전달문 보충 (0) | 2021.12.16 |
중첩함수 보충 (0) | 2021.12.16 |
옵셔널 바인딩 보충 (0) | 2021.12.16 |
[알고리즘] 연, 월, 일 을 입력하여 요일을 영문으로 출력하는 코드만들기 (0) | 2021.12.12 |
날짜 계산하기 (0) | 2021.12.11 |
structures and Classes (+ enum) (0) | 2021.12.09 |
Loops (반복문) (0) | 2021.12.08 |