본문 바로가기

분류 전체보기715

[백준 14731] 謎紛芥索紀 (Large) [C] 풀이 정답은 2의 K제곱들의 합이다. "백준 13731, A" 문제에서 2의 제곱을 구하는 방식을 이용해 풀이했다. 2의 K제곱(D)들의 합(sum_D)을 차수와 계수의 곱에 곱해주는 것을 반복하면 된다. 소스코드 #include #define MOD 1000000007 int main() { int N; scanf("%d", &N); long long result = 0, C, K; for (int i = 0; i < N; i++) { scanf("%d %d", &C, &K); long long DC = (C*K)%MOD, sum_D = 1, D = 2; K--; while (K) { if (K & 1) sum_D = sum_D*D %MOD; D = D*D %MOD; K /= 2; } result = .. 2021. 8. 2.
[백준 14730] 謎紛芥索紀 (Small) [C] 소스코드 #include int main(){ int N, n1, n2, result = 0; scanf("%d", &N); for (int i = 0; i < N; i++){ scanf("%d %d", &n1, &n2); result += n1*n2; } printf("%d", result); } 출처 14730번: 謎紛芥索紀 (Small) 성민이는 이번 학기에 미적분학 과목을 수강하고 있다. 다항함수의 미분 단원 과제를 하던 도중 미분을 하기가 귀찮아진 성민이는 미분하려는 함수 f(x)가 주어지면, 미분 된 함수 f’(x)를 자동 www.acmicpc.net 2021. 8. 1.
[백준 13171] A [C] 풀이 비트 연산자를 사용해 풀이할 수 있다. X의 이진수를 right shift 해주면서, A를 한 번씩 제곱해주다가, X의 이진수의 가장 끝(맨 오른쪽) 숫자가 1일 때, result에 곱해주는 방식으로 풀이했다. A = 2, X = 6일 때 A X X & 1 result 2 110 false 1 4 11 true 4 16 1 true 64 0 소스코드 #include #define MOD 1000000007 int main() { unsigned long long A, X, result = 1; scanf("%llu %llu", &A, &X); A %= MOD; while (X > 0){ if (X & 1) result = (result*A) % MOD; X >>= 1; A = (A*A) % MOD;.. 2021. 8. 1.
[백준 1629] 곱셈 [C] 풀이 분할 정복을 이용한 거듭제곱 알고리즘의 기초적인 방법으로 풀이했다. 입력된 수는 int형으로 충분히 담아낼 수 있지만, 두 수의 곱은 이를 벗어나기 때문에, long long형으로 담아주어야 한다. Test Case에 주어지는 C의 값은 결과를 int형으로 출력할 수 있게 주어지는 듯 했다. 착한 문제지 쉬운 문제는 아니다. 홀수의 경우에는 A를 한번 더 곱해서 맞춰주어야 하므로 (B%2 ? A : 1) 으로 해결했다. 소스코드 #include long long mul(int A, int B, int C) { if (B > 1) { long long temp = mul(A, B/2, C); return ((temp*temp)%C * (B%2 ? A : 1)) % C; } else return A; .. 2021. 8. 1.
[백준 1074] Z [C] 풀이 사분면을 탐색해 방문횟수를 반환하는 방식보다는, 전체 허용 범위내 조건 충족시 출력을 하는 방식으로 풀이했다. 허용 범위가 아니라면, 다른 사분면에 있으므로 n*n을 누적해준다. 소스코드 #include int r, c, cnt; void Z(int row, int col, int n){ if (row == r && col == c){ printf("%d\n", cnt); return; } if (r >= row && c >= col && r < row + n && c < col + n) { Z(row, col, n/2); Z(row, col + n/2, n/2); Z(row + n/2, col, n/2); Z(row + n/2, col + n/2, n/2); } else cnt += n*n; } .. 2021. 8. 1.
[백준 1037] 약수 [C] 풀이 약수가 모두 주어지므로 가장 작은 약수와 가장 큰 약수의 곱이 N이다. 소스코드 #include int main(){ int N, val, max, min; scanf("%d", &N); for (int i = 0; i max && (max = val); val < min && (min = val); } printf("%d", max*min); } 출처 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, .. 2021. 8. 1.