수학 8

[수학] codeforces 1700A (C++)

https://codeforces.com/problemset/problem/1700/A Problem - 1700A - Codeforces codeforces.com 문제 해결 알고리즘 $n \times m$ 배열이 위의 내용처럼 $a_{ij} = (i-1)m + j$이라면, 최소 경로는 맨위의 행과 맨 오른쪽 열의 합을 더해준 값과 같다. 그러므로 각각의 값을 구한 뒤 겹치는 $a_{1m}$값을 빼주면 최소 경로 값이 나온다. 소스 코드 #include #define ll long long int using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); int t; cin >> t; ll n, m, result = 0; w..

[수학] BOJ 1193 분수찾기

https://www.acmicpc.net/problem/1193 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 문제 해결 알고리즘 X에서 num값을 빼준다. (num값은 1부터 1씩 커진다) 빼준 값이 홀수면 $num-X+1 / X$ 값을 출력해준다. 짝수면 $X / num-X+1$를 출력한다. 소스 코드 #include using namespace std; int main(){ int X; cin >> X; int num = 1; while(X > num){ X -= num; num++; } if(num % 2 == 0) cout

[수학] BOJ 1612 가지고 노는 1

https://www.acmicpc.net/problem/1612 1612번: 가지고 노는 1 동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 이 원숭이는 수를 이리저리 가지고 노는 것을 매우 좋아한다. 그중에서도 1을 가지고 노는 것을 매우매우매우매우매우 좋아한다. www.acmicpc.net 문제 해결 알고리즘 2와 5로 나눠지면 끝자리가 1이 나오지 않으므로 여기서 만약 나눠지면 -1을 출력한다. 숫자가 long long보다 길어지므로 모듈러 연산을 통해서 해결해준다. 소스 코드 #include #include using namespace std; int main() { long long a; cin >> a; long long cmp = 1; int result = 1; if (a ..

[구현] BOJ 15596 정수 N개의 합

https://www.acmicpc.net/problem/15596 15596번: 정수 N개의 합 C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang) www.acmicpc.net 문제 해결 알고리즘 vector에 들어있는 모든 수들을 전부 더해주고 리턴해주면 된다. 함수를 만들어주는 문제이기 때문에 프로그램 전체를 제출하면 컴파일 에러가 뜨게 된다. 소스 코드 #include long long sum(std::vector &a) { long long ans = 0; for(int i=0;i

[수학] BOJ 2553 마지막 팩토리얼 수

https://www.acmicpc.net/problem/2553 2553번: 마지막 팩토리얼 수 첫째 줄에 N이 주어진다. N은 20,000보다 작거나 같은 자연수 이다. www.acmicpc.net 문제 해결 알고리즘 0이 아닌 마지막 자리수를 출력해야하므로 우선 팩토리얼 계산할 때 마다 뒤에 있는 0을 제거하고, 오버플로우 방지를 위해 6자리정도만 남겨준 후 계속 계산해준다. (이 때, 충분하게 자리 수를 남겨줘야한다.) 그런 후 마지막 자리 수를 출력해준다. 소스 코드 #include using namespace std; int main(){ int N; cin >> N; long long result = 1; for(int i=1;i

[수학, 정수론] BOJ 9693 시파르

https://www.acmicpc.net/problem/9693 9693번: 시파르 N이 주어졌을 때, N!/10M이 정수가 되는 M 중 가장 큰 것을 출력하시오. www.acmicpc.net 문제 해결 알고리즘 1~N까지 모든 수를 2와 5로 나눠보면서 N!에 있는 2와 5의 개수를 찾고 둘 중 작은 수를 출력해준다. 소스 코드 #include using namespace std; int main(){ int cnt = 1; while(true){ int two_cnt = 0, five_cnt = 0; int N; cin >> N; if(N == 0) break; for(int i=1;i

[구현] BOJ 1748 수 이어 쓰기 1

www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. www.acmicpc.net 문제 해결 알고리즘 이 문제를 숫자들을 나열해서 풀이하려하면 시간초과가 난다. 그러므로 간단한 식을 써서 풀어야하는데, 간단하다. 1. 우선 주어진 수 $N$의 자리수를 구한다. 2. 결괏값(result)에 자리수 $i$에 대해 1부터 $N-1$의 자릿수까지 각각 $9 \times i \times 10 ^ {i-1}$ 더해준다. 3. 마지막으로 자리수 $N$에 해당하는 길이는 입력받은 수(tmp)보다 자리수가 하나 작은 가장 큰 수를 빼준 수에서 $N$만큼 곱해준 걸 결괏값(result)에 더해준다. 소스 코드 #include us..