https://school.programmers.co.kr/learn/courses/30/lessons/77884
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 약수의 개수와 덧셈 *
두 정수 "left"와 "right"가 매개변수로 주어집니다.
"left"부터 "right"까지의 모든 수들 중에서,
약수의 개수가 짝수인 수는 더하고,
약수의 개수가 홀수인 수는 뺀 수를 return 하도록
solution 함수를 완성하라.
* 제한사항 *
1 ≤ left ≤ right ≤ 1,000
* 알고리즘 분석과 이해 *
이 알고리즘은 주어진 범위에 포함된 모든 수에 대해 약수의 개수를 확인해서
짝수인 경우에는 더하고 홀수인 경우에는 뺀 값을 반환하는 알고리즘이네요.
이 알고리즘을 풀기 위해서는 각 수의 약수를 구하는 방법이 필요하고,
약수를 구하는 가장 간단한 방법은 해당되는 수를 1부터 자기 자신까지 나누어보며
나누어 떨어지는 수의 개수를 세는 것이죠,
그리고
약수의 개수가 짝수인지 홀수인지 확인하여 값을 더할지 뺄지 결정해야 하죠
* 로직 구상 *
먼저, 약수의 개수를 판단 해야하니까 "for-in 반복문"을 생각해볼 수 있겠고
주어진 수의 약수 개수를 확인하고,
약수의 개수가 짝수인지 판단 해야 하니까 "조건문(if-else)문"을 사용해야 해요.
약수 개수가 짝수인 경우 그에 해당하는 수를 더하고,
홀수인 경우 그에 해당하는 수를 빼야하니까 나머지 연산자를 활용해야겠죠?!
그 다음으로는 모든 수에 대해 반복을 해야 하는데,
"left"부터 "right"까지의 모든 수에 대해 위 과정을 반복하면
이 알고리즘에서 원하는 결과값을 얻어갈 수 있다고 봅니다.
* 코드구성 *
func solution(_ left: Int, _ right: Int) -> Int {
var result = 0 // 최종 결과값을 저장할 변수
먼저, "solution"이라는 함수를 정의해주는데, 두 개의 정수 "left"와 "right"를 입력으로 받고, 정수형 값을 반환하도록 합시다.
그리고 "result"라는 변수를 초기값 0으로 선언해서 최종 결과값을 저장할 공간을 만들어줍시다.
그 다음으로
// 주어진 범위 내의 모든 수에 대해 반복
for num in left...right {
"left"부터 "right"까지의 범위에 있는 모든 수에 대해 반복문을 수행 하는데,
여기서 범위에 있는 모든 수를 표현할때 "..."을 붙여줍니다.
그리고 그렇게 "left"부터 "right"까지의 각각의 수를 num이라는 변수로 받아 줍시다.
var divisorCount = 0 // 약수의 개수를 저장할 변수
다음로직으로, 약수의 개수를 세기 위한 변수 "divisorCount"를 선언 하고 "0"으로 초기화 시켜줍시다.
// 1부터 해당 수까지 나누어 떨어지는지 확인하여 약수의 개수를 구함
for i in 1...num {
if num % i == 0 {
divisorCount += 1
}
}
이후 해당 수의 약수를 구하기 위해 1부터 해당 수까지 반복문을 수행시켜주는데
만약 "num"을 "i"로 나눈 나머지가 "0"이면 "i"는 "num"의 약수가 되죠?!
이 경우 약수의 개수인 "divisorCount"를 "1"씩 증가시켜줍시다.
// 약수의 개수가 짝수인지 홀수인지에 따라 결과값에 더하거나 뺌
if divisorCount % 2 == 0 {
result += num
} else {
result -= num
}
}
return result // 결과값 반환
}
약수의 개수가 "짝수"인지 "홀수"인지를 판단해서
"짝수"면 해당 수를 "result"에 더하고 "홀수"면 빼주도록 합시다.
최종적으로 계산된 result 값을 반환합니다.
* 전체 코드 구성 *
func solution(_ left: Int, _ right: Int) -> Int {
var result = 0 // 최종 결과값을 저장할 변수
// 주어진 범위 내의 모든 수에 대해 반복
for num in left...right {
var divisorCount = 0 // 약수의 개수를 저장할 변수
// 1부터 해당 수까지 나누어 떨어지는지 확인하여 약수의 개수를 구함
for i in 1...num {
if num % i == 0 {
divisorCount += 1
}
}
// 약수의 개수가 짝수인지 홀수인지에 따라 결과값에 더하거나 뺌
if divisorCount % 2 == 0 {
result += num
} else {
result -= num
}
}
return result // 결과값 반환
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 부족한 금액 계산하기 (0) | 2024.03.18 |
---|---|
[Swift] Programmers - 문자열 내림차순으로 배치하기 (0) | 2024.03.15 |
[Swift] Programmers - 내적 (0) | 2024.03.13 |
[Swift] Programmers - 수박수박수박수박수박수? (0) | 2024.03.12 |
[Swift] Programmers - 가운데 글자 가져오기 (0) | 2024.03.11 |