반응형
문제
M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64, 81, 100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최솟값은 64가 된다.
답
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int total = 0;
int min = 0;
for (int i = n; i <= m; ++i){
double number = sqrt(i);
if(number == int(number)){
total += i;
if(min == 0){
min = i;
}
}
}
if(total != 0){
cout << total << endl;
cout << min << endl;
} else {
cout << -1 << endl;
}
return 0;
}
코드풀이
1. n, m 두 개의 정수를 입력 받음 (n: 시작점, m: 끝 점)
int n, m;
cin >> n >> m;
2. 완전제곱수의 합과 최소값을 저장할 변수를 초기화 해줌
int total = 0;
int min = 0;
3. n에서 m까지 반복
for (int i = n; i <= m; ++i){
double number = sqrt(i);
if(number == int(number)){
total += i;
if(min == 0){
min = i;
}
}
}
완전제곱수 검사:
- sqrt(i)는 ii을 반환 의 제곱근
- int(number)는 소수점 이하를 버린 정수형으로 변환
- if (number == int(number)): 제곱근이 정수라면 i는 완전제곱수입니다.예시:
- i=4i = 4: 4=2\sqrt{4} = 2 → 완전제곱수
- i=5i = 5: 5≈2.236\sqrt{5} \approx 2.236 → 완전제곱수X
합과 최소값 업데이트:
- total += i: i를 total에 합
- if (min == 0): min이 아직 설정되지 않았다면 (0일 때), min을 i로 설정
- 첫 번째 완전제곱수가 발견되었을 때만 min을 업데이트
반응형
'Study > C++' 카테고리의 다른 글
[C++] 터렛: 두 원의 방정식 (0) | 2024.12.18 |
---|---|
[C++] 뒤집힌 숫자 비교해서 더 큰 숫자 출력하기 (2) | 2024.12.10 |