반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이번 문제는 '약수의 합'이다.
그리고, 과거에 풀었던 문제라 과거 코드가 남아있었다.
과거 코드
class Solution {
public int solution(int n) {
int answer = 0;
int temp = 0;
for(int i = 1; i <= n; i++) {
if(n % i == 0) {
temp = n / i;
if(temp < i) break;
if(temp == i) answer += i;
else answer += i + temp;
}
}
return answer;
}
}
이번의 과거 코드 역시 마음에 들지 않는다..
에라토스테네스의 체를 사용할까하다가 뭔가 비효율적인 것 같아서
핵심 코드 내용만 조금 가져와서 수정했다.
현재 코드
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = 1; i <= Math.sqrt(n); i++) {
if(n % i == 0) {
answer += i;
if(i != n / i) answer += n / i;
}
}
return answer;
}
}
일단 제일 뵈기 싫은 for문의 조건부터 수정했다.
에라토스테네스의 체를 구현했을때처럼 Math.sqrt(n)을 사용해서 for문 반복 횟수를 줄였다.
그리고 i로 나눈 값이 0일 때.. 즉, 약수일 때 i의 값이 n/i한 값과 같지 않으면
그 수 또한 약수이니 answer에 그 값을 더해줬다.
오늘도 즐거운 코딩...!
반응형