출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
https://www.acmicpc.net/problem/6359
#include <iostream>
#include <cstring>
using namespace std;
int N;
int cache[101];
int sum;
void people(int num)
{
for (int i = 1; i <= num; i++)
{
for (int j = 1; i * j <= num; j++)
{
cache[i * j] = !cache[i * j];
}
}
for (int i = 1; i <= num; i++)
sum += cache[i];
cout << sum;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
while (N--)
{
int num;
cin >> num;
people(num);
cout << "\n";
memset(cache, 0, sizeof(cache));
sum = 0;
}
}
그렇게 어려운 문제는 아니었지만 짚고 넘어가야할 것들이 몇 개 있어서 블로그에 올린다.
N 이하의 제곱수만 세는 간단한 방법이 있긴 하지만, dp 문제이기 때문에 dp스럽게 저렇게 푼다. 각 단계마다 그 단계의 배수들이 toggle 되게 만들면 된다.
여기서 짚고 넘어가야할 두가지!!!!!
백준 1915 가장 큰 정사각형(dynamic programming) (0) | 2020.07.09 |
---|---|
백준 1965 상자넣기(dynamic programming) (0) | 2020.07.09 |
백준 1904 01타일(dynamic programming) (0) | 2020.07.08 |
백준 1890 점프(dynamic programming) (0) | 2020.07.07 |
백준 11051 이항 계수2(dynamic programming) (0) | 2020.07.07 |
댓글 영역