1 ~ N 의 숫자를 차례대로 for loop을 돌린다.

약수의 개수가 홀수면 문이 열려있다.



그런데 약수의 개수가 홀수라면 완전제곱수이다.


그래서 1 ~ N까지의 완전제곱수 개수를 구하면 된다.

#include <cstdio>
/**
* https://www.acmicpc.net/problem/6359
* BOJ 백준온라인져지 6359 만취한 상범 풀이
*/
int main(){
int *openList = new int[101];
int testCase;
scanf("%d", &testCase);
while(testCase--){
int numberOfRoom;
scanf("%d", &numberOfRoom);
if(!openList[numberOfRoom])
for(int i = 1; i * i <= numberOfRoom; i++)
openList[numberOfRoom]++;
printf("%d\n", openList[numberOfRoom]);
}
}
view raw BOJ_6359.cpp hosted with ❤ by GitHub

완전제곱수에 1도 포함되는걸 몰라서 계속 틀렸다.


맞왜틀



#include <cstdio>
/**
* https://www.acmicpc.net/problem/1977
* BOJ 백준온라인져지 1977 완전제곱수 풀이
*/
int main(){
int minimum, maximum, sum = 0, resultMin = 0;
scanf("%d%d", &minimum, &maximum);
int i = 0;
while(++i){
if(i * i >= minimum && i * i <= maximum){
if(!resultMin) resultMin = i * i;
sum += i * i;
}else if(i * i > maximum) break;
}
if(sum) printf("%d\n%d", sum, resultMin);
else printf("-1");
}
view raw BOJ_1977.cpp hosted with ❤ by GitHub

+ Recent posts