문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1<=left<=right<=1,000
입출력 예
left | right | result | ||
13 | 17 | 43 | ||
24 | 27 | 52 |
문제 풀이
풀이 언어 : C++
#include <string>
#include <vector>
using namespace std;
int solution(int left, int right) {
int answer = 0;
int divisor_count; // 약수의 개수
for(int i=left; i<=right; i++)
{
divisor_count=0; // 약수의 개수 초기화
// 약수의 개수 구하기
for(int j=1; j<=i; j++)
{
if(i%j==0)
{
divisor_count++; // 약수 개수 증가
}
}
// 약수의 갯수가 짝수라면
if(divisor_count%2==0)
{
answer+=i; // 더하기
}
else // 약수의 개수가 홀수라면
{
answer-=i; // 빼기
}
}
return answer;
}
left부터 right 사이의 수들을 처리해야하니 일단 left부터 right까지 돌아가는 반복문을 만들어준다. 그리고 반복문을 돌면서 약수의 개수를 구하고 그 개수가 짝수인지 홀수인지 확인한 후 answer에 더하거나 빼주면 되는 것이다. 차례대로 진행해보자.
먼저 약수의 개수를 구한다. divisor_count라는 약수의 개수를 셀 변수를 하나 만들어주고 반복문 맨 앞에서 초기화 해준다. 반복문이 한번 돌아가면 다른 수로 개수를 구하는 것이기 때문에 0으로 초기화 해주어야 한다. 개수를 구하는 것도 반복문을 사용한다. 1부터 현재 수 i까지 반복문이 돌도록 하고 if문을 이용하여 i%j==0인 경우, 즉 j가 i의 약수인 경우만 divisor_cout를 업데이트 해준다.
반복문을 돌고 나오면 i의 약수의 개수가 구해져 있다. 이제 구해진 약수의 개수를 2로 나누어 나머지를 확인하고 나머지가 없다면 짝수이므로 answer+=i를 해주고 아닐 경우 홀수 이므로 answer-=i를 해준다.
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77884
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Code KATA > 알고리즘 코드카타' 카테고리의 다른 글
[2025.01.05] 부족한 금액 계산하기 (0) | 2025.01.06 |
---|---|
[2025.01.04] 문자열 내림차순으로 배치하기 (1) | 2025.01.03 |
[2025.01.02] [PCCE 기출문제] 9번 / 지폐 접기 (0) | 2025.01.02 |
[2025.01.02] [PCCE 기출문제] 1번 / 문자 출력 (1) | 2025.01.02 |
[2025.01.02] 내적 (0) | 2025.01.02 |