출처 : 프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12928
난이도: Lv.1
문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한사항
- n 은 0 이상 3000이하인 정수입니다.
입출력 예
n | return |
12 | 28 |
5 | 6 |
1. 내가 짠 코드
func solution(_ n: Int) -> Int {
var sum: Int = 0
if n >= 0 && n <= 3000 { // 제한 사항 조건1
for i in 1...n {
if n % i == 0 { // 약수 구하기
sum += i // sum에 약수의 합을 저장
print(i) // 약수 출력해서 확인
}
}
return sum // sum을 리턴
} else {
return 0 // 위 조건에 부합되지 않을 경우 0을 리턴
}
}
오류란다.. 왜!! why!! 이유를 찾기 위해 구글링을 해봤더니
- index out of range(활용한 인덱스 범위 연산자가 초과함.)
- 옵셔널에서 nil값에 의한 오류.
라고 하는데, 솔직히 아직 잘 모르겠다 제한 사항 조건에 부합하고, 약수값도 출력해서 확인 완료했다.
흠흠.. 도저히 모르겠고 답답해서 다른사람 풀이를 봤다
2. 정답코드
func solution(_ n:Int) -> Int{
var sum : Int = 0
if n>0{
for i in 1...n{
if n % i == 0 {
sum += i
}
}
return sum
}
return 0
}
내 코드랑 다른게 뭐지? 오히려 제한 사항에 대해 내가 더 명확하게 적은거 아닌가?
내일 한번 더 확인 해야겠다.. ㅠㅠ

++++
3. 문제 해결
func solution(_ n: Int) -> Int {
var sum: Int = 0
if n >= 1 && n <= 3000 { // 제한 사항 조건1
for i in 1...n {
if n % i == 0 { // 약수 구하기
sum += i // sum에 약수의 합을 저장
print(i) // 약수 출력해서 확인
}
}
return sum // sum을 리턴
} else {
return 0 // 위 조건에 부합되지 않을 경우 0을 리턴
}
}
수정 한 점
if n >= 0 && n <= 3000 -> if n >= 1 && n <= 3000
먼저, core dumped가 뜨는 시점이 nil이 발생 했다는 점을 생각해 봤을 때 swift는 공간?이 중요한 것 같다고 생각이 든다.
그래서 공간에 키워드를 맞추고 코드를 살펴 보았는데, 제한 사항에서 n은 0 이상 3000이하인 정수에만 꽂혔던 것 같다.
5번 째 라인을 보면 for문에서 n는 1부터 n까지라고 정의되어 있는데, if문에서 0이상 << 을 나타냄으로써 n이 0일 때 문제가 되는 것 같다.
'Programmers' 카테고리의 다른 글
[iOS Swift] Lv.1 x만큼 간격이 있는 n개의 숫자 (0) | 2024.05.09 |
---|---|
[iOS Swift] Lv.1 나머지가 1이 되는 수 찾기 (0) | 2024.05.08 |
[iOS Swift] Lv.1 자릿수 더하기 (0) | 2024.05.08 |
[iOS Swift] Lv.1 평균 구하기 (0) | 2024.05.08 |
[iOS Swift] Lv.1 짝수와 홀수 (0) | 2024.05.08 |