코딩테스트 & 문제 풀이
[C]프로그래머스_Lv1 : 약수의 개수와 덧셈
Hicecream
2023. 5. 6. 00:12
2022년 7월 22일에 작성됨
https://school.programmers.co.kr/learn/courses/30/lessons/77884
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
1. left부터 right 사이의 수들 구하기
2. 그 수들의 약수 구하기
3. 약수의 개수가 짝수인지 홀수인지 판별 하기
4. 짝수이면 수를 더하고, 홀수이면 수를 뺀다.
<약수 구하기>
a % b == 0 이면 b는 a의 약수이다.
ex)
6 % (1, 2, 3, 6) == 0 -> 1, 2, 3, 6은 6의 약수 O
6 % (4, 5) != 0 -> 4, 5는 6의 약수 X
소스 코드 (⭕)
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int left, int right) {
int answer = 0;
for (int i = left; i <= right; i++) { // left부터 right까지 반복
// i는 수, j는 i의 약수 구하는 변수, cnt는 i의 약수의 개수
int cnt = 0;
for (int j = 1; j <= i; j++) { // 1부터 i까지 반복
if (i % j == 0) cnt++; // 약수의 개수 카운트
}
if (cnt % 2 == 0) answer += i; // 약수의 개수가 짝수라면 더하기
else answer -= i; // 약수의 개수가 홀수라면 빼기
}
return answer;
}
코드 분석
1. 중첩 for문을 사용하여 첫 번째 for문은 left부터 right 사이의 수 만큼 반복하는 반복문이고, 두 번째 for문은 i의 약수를 카운트 하기 위한 반복문이다.
2. cnt는 j가 i의 약수일 때 +1 씩 카운트 해주어서 i의 약수의 개수를 구해준다.
3. cnt가 짝수이면 i를 더하고, 홀수이면 i를 빼는 과정을 반복하여 answer 값을 반환한다.
end
문제 분석이랑 코드 분석 적는 시간이 문제 푸는 시간에 비해 너무 오래 걸린다T_T 코드 분석은 주석만으로 설명이 될 때 그냥 안 적는게 나을까? 이럴땐 같은 말 반복하는 것 밖에 안돼서 의미 없는것 같기도..