끄적끄적 코딩
article thumbnail
[C++] 백준 10773번 제로
알고리즘 2019. 9. 4. 12:06

스택 문제입니다. 0을 누르면 pop하고 그 외에는 push를 해줍니다. 스택에 있는 수들을 전부 더해서 출력합니다. #include #include #include #include #include using namespace std; int main(int argc, char *argv[]) { int n; int num; int sum = 0; stack s; cin >> n; for (int i = 0; i > num; if (num == 0) { s.pop(); } else { s.push(num); } } for (int i = 0; !s.empty(); ++i) { sum += s.top(); s.pop(); } cout

article thumbnail
[C++] 백준 2004번 조합 0의 개수
알고리즘 2019. 9. 4. 11:48

nCm에서 끝자리 0의 개수를 찾는 문제입니다. 0의 개수는 소인수 2와 5로 찾을 수 있습니다. 소인수 2가 5개고 5가 2개면 0의 개수는 2개입니다. 1. n!에 대한 2와 5의 소인수 개수 2. (n - m)!에 대한 2와 5의 소인수 개수 3. m!에 대한 2와 5의 소인수 개수 (1.) - (2.) - (3.)을 해주면 2와 5의 개수를 구할 수 있습니다. 여기서 2와 5중 적은 것을 출력해줍니다. 소인수를 구하는 법은 x를 n으로 나눔 x를 n^2로 나눔, x를 n^3로 나눔, ..... x를 n^m-1로 나눔 x를 n^m로 나눔 나눈 값들을 전부 더하면 소인수의개수를 구할 수 있습니다. #include #include #include #include #include using namespa..

article thumbnail
[C++] 백준 1676번 팩토리얼 0의 개수
알고리즘 2019. 9. 4. 00:02

팩토리얼을 계산할때 0이 나오는 경우를 구하는 문제입니다. N은 500보다 작거나 같습니다. 2와 5의개수를 세어주면 되는데 5의 개수가 더 적기 때문에 5를 셉니다. 5로 나누어 떨어지는 경우 카운트를 증가합니다. 그리고 25는 100을 만들 수 있기에 25로 나누어떨어지는 경우도 세며, 125도 250, 500을 만들 수 있기에 125로 나누어떨어지는 경우도 세줍니다. #include #include using namespace std; int main(int argc, char *argv[]) { int n; int count = 0; cin >> n; for (int i = 1; i

article thumbnail
[C++] 백준 9375번 패션왕 신해빈
알고리즘 2019. 9. 3. 18:08

옷을 입을 수 있는 경우의 수를 구하는 문제입니다. 같은 부위의 옷은 하나만 입거나 벗을 수 있고, 전부다 벗을 수는 없습니다. 입력받은 부위를 벡터에 저장하고 개수를 입력해주었습니다. 그리고 입력받은 개수를 통해서 부위별 옷의 개수를 세서 경우의 수를 구했습니다. (x의 개수 + 1) * (y의 개수 + 1) * .... (n의 개수 + 1) - 1 +1은 벗은 경우이며, 마지막 -1은 전부 벗은 경우를 제외한 것입니다. #include #include #include #include #include using namespace std; int main(int argc, char *argv[]) { int ts; int n; int result; int flag; string s; vector v; c..

article thumbnail
[C++] 백준 11050번 이항 계수 1
알고리즘 2019. 9. 3. 17:04

이항 계수 문제입니다. 이항계수는 다음의 공식으로 나타낼 수 있습니다. (N-0) * (N-1) * (N-2) * .... * (N-K+1) ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ (K-0) * (K-1) * (K-2) * .... * (K-K+1) 예제 5 2의 경우 ( 5 * 4 ) / ( 2 * 1 )로 나타낼 수 있습니다. #include #include #include using namespace std; int main(int argc, char *argv[]) { int N, K; int num = 1; int div = 1; cin >> N; cin >> K; for (int i = 0; i < K; ++i) { num *= N - i; div *= K - i; } cout

article thumbnail
[C++] 백준 3036번 링
알고리즘 2019. 9. 3. 16:42

첫번째 수를 n번째 수로 나누었을 때 기약분수 형태로 나타내는 문제입니다. 첫번째 수와 n번째 수의 최대공약수를 구해서 값을 각각 최대공약수로 나눠서 출력했습니다. #include #include #include using namespace std; int GCD(int a, int b) { if (a % b == 0) { return b; } return GCD(b, a % b); } int main(int argc, char *argv[]) { int n; int div; int arr[110]; cin >> n; memset(arr, 0, sizeof(arr)); for (int i = 0; i > arr[i]; } for (int i = 1; i < n; ++i) {..

article thumbnail
[C++] 백준 2981번 검문
알고리즘 2019. 9. 3. 16:28

N개의 숫자들을 M으로 나누었을 때 나머지가 모두 같은 경우의 M을 모두 찾는 문제입니다. v[i]를 M으로 나눈 몫과 나머지는 다음으로 나타낼 수 있습니다. v[i] = M * 몫[i] + 나머지 나머지는 같은 경우를 찾기 때문에 나머지를 빼는 방식으로 가능한 공식에 대해서 해를 찾습니다. v[i-1]에 대해서 위의 공식을 이용해서 빼줍니다. v[i] - v[i-1] = M * (몫[i] - 몫[i - 1]) + (나머지 - 나머지) v[i] - v[i-1]이 정답이 되는데 모든 v[i] - v[i-1]에 대해서 최대 공약수를 찾고 그 약수를 출력해서 문제를 풀었습니다. #include #include #include using namespace std; int GCD(int a, int b) { if..

article thumbnail
[C++] 백준 2609번 최대공약수와 최소공배수
알고리즘 2019. 9. 2. 16:49

최대공약수와 최소공배수를 구하는 문제입니다. 소인수를 전부 구해서 배열에 넣습니다. arr[x][y]에서 x는 소인수를 의미하고 y는 두개의 자연수를 의미합니다. 최대공약수 maxResult *= min(pow(i, arr[i][0]), pow(i, arr[i][1])); 최소공배수 minResult *= max(pow(i, arr[i][0]), pow(i, arr[i][1])); #include #include #include #include using namespace std; int main(int argc, char *argv[]) { int x, y; int bigNum; int maxResult = 1; int minResult = 1; int arr[10010][2]; cin >> x; ci..

검색 태그