개인공부용123 프로그래밍 블로그
문제 : https://algospot.com/judge/problem/read/PASS486 주어진 범위내에서 정해진 약수의 갯수를 가지는 수를 찾는 문제입니다. 이를 해결하기위해서 주어진 범위내에서 수의 약수를 배열에 미리 저장해두고 찾는 방식을 사용했습니다. 가장작은수인 2부터 10,000,000까지 차례대로 약수의 갯수를 미리 구해서 문제를 해결했습니다. 이를 위해 에라토스테네스의 체를 이용해서 소인수분해한 수 중 최소의 수를 찾은후 그것을이용해서 각 수의 약수의 갯수를 구했습니다. #include #include using namespace std; const int MAX = 10000000; int MinPrime[MAX + 1]; // 최소 소수 int MinPrimeNum[MAX + 1]..
문제 : https://algospot.com/judge/problem/read/POTION 마법의 약을 만드는데 넣어야할 재료의 최소량을 구하는 문제입니다. 유클리드알고리즘을 이용해서 마법의 약을 만드는데 필요한 재료들의 최소공배수를 찾은후 가지고있는 모든 재료들중 가장 높은 비율로 나머지 재료들을 맞춰야합니다. 이떄 이 비율의 분모는 최소공배수여야합니다 왜냐하면 맞춰진 재료들이 정수여야하기때문입니다. #include #include using namespace std; int n; // 재료의수 int recipe[200]; int cur[200]; int answer[200]; int gcd(int a, int b) { if (a < b) swap(a, b); return b == 0 ? a : g..
문제 : https://algospot.com/judge/problem/read/RATIO 플레이한 횟수 N, 승리 횟수 M 일떄 몇연승을 했을경우 승리율을 높일수있는지 찾는 문제이다 (승리율은 승리횟수 / 플레이한 횟수를 한 정수이다) 연승한 횟수 + 승리 횟수 / 연승한 횟수 + 플레이한 횟수 와 승리 횟수 / 플레이한 횟수를 비교해서 이분법을 사용해서 답을 찾으면 됩니다. (문제를 풀때 decision함수의 인자로 long long을 사용하지않으면 범위를 초과해서 결과가 나오지않습니다.) #include using namespace std; #define MAX_SWIN 2000000000 long N, M; // 플레이횟수, 승리횟수 int decision(long long s_win, long ..