본문 바로가기

Algorithm/Math

(101)
(C++) - 백준(BOJ) 1010번 : 다리놓기 https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 조합 문제였습니다. 풀이방법 겹치지 않게 다리를 놓는 방법은 순서에 상관없이 뽑는 조합의 방식과 유사합니다. m개 중 n개를 뽑는 경우의 수를 출력하면 됩니다. Code #include using namespace std; int t; int comb[31][31]; int dfs(int n, int k){ if(n == k || k == 0) return 1; int &ret = comb[n][..
(C++) - 백준(BOJ)코딩 11758번 : CCW 답 www.acmicpc.net/problem/11758 11758번: CCW 첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다. www.acmicpc.net 대표적인 기하 알고리즘 중 하나인 CCW입니다. ※CCW : p1,p2,p3 점에서 볼 때 선분p1p2, 선분p2p3의 외적을 이용합니다. ※외적의 정의 : AXB = a*b*sina로 정의 되는데 이뜻은 vector A를 기준으로 vector B가 얼마나 회전하려는 성질을 가지고 있는지를 표시하는 척도라고 볼 수 있습니다. 따라서 외적의 값이..
(C++) - 백준(BOJ) 2942번 : 퍼거슨과 사과 #include #include using namespace std; int GCD(int a, int b)//가짓수는 r,g의 최대공약수의 약수의 개수 { if (b == 0) { return a; } return GCD(b, a%b); } int main() { int r, g; cin >> r >> g; int gcd = GCD(r, g); for (int i = 1; i
(C++) - 백준(BOJ) 2960번 : 에라토스테네스의 체 https://www.acmicpc.net/problem/2960 2960번: 에라토스테네스의 체 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다. www.acmicpc.net 에라토스테네스의 체를 구현하는 문제였습니다. Code #include using namespace std; int n, k, cnt, c[1001],ans; int main() { cin >> n >> k; for (int i = 2; i
(C++) - 백준(BOJ) 10178번 : 할로윈의 사탕 답 www.acmicpc.net/problem/10178 10178번: 할로윈의 사탕 할로윈데이에 한신이네는 아부지가 사탕을 나눠주신다. 하지만 한신이의 형제들은 서로 사이가 좋지않아 서른이 넘어서도 사탕을 공정하게 나누어 주지 않으면 서로 싸움이 난다. 매년 할로윈 www.acmicpc.net 단순 수학 문제였습니다. Code #include using namespace std; int main() { int t, candy, bs; cin >> t; while (t--) { cin >> candy >> bs; cout
(C++) - 백준(BOJ) 10101번 : 삼각형 외우기 #include using namespace std; int main() { int a[3], sum=0; for (int i = 0; i > a[i]; sum += a[i]; } if (sum != 180) { cout
(C++) - 백준(BOJ)코딩 10818번 : 최소, 최대 www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net loop를 사용해 최소, 최대를 찾아 출력하는 문제였습니다. Code #include using namespace std; int a[1000001], b = -1000001, s = 1000001,n; int main() { cin >> n; for (int i = 0; i > a[i]; if (b ..
(C++) - 백준(BOJ) 11653번 : 소인수분해 https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 간단한 수학문제였습니다. 풀이방법 1. n % cnt 의 결과가 양수 즉, 나머지가 남는다면 cnt를 나누어 떨어질때까지 1씩 증가시킵니다. 2. cnt를 출력합니다. Code #include using namespace std; int n; int main(){ cin >> n; int cnt = 2; while(n > 1){ int ret = n % cnt; if(ret) while((n % cnt)) cnt++; n /= cnt; cout