1. 문제 링크

https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.

www.acmicpc.net

 

 

 

2. 문제 설명

3개의 숫자를 입력받아 곱한 후, 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지 구하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2577번 숫자의 개수 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int A, B, C, mul;
	int arr[10] = {0, };
	cin >> A >> B >> C;
	mul = A * B * C;
	while (mul > 0) {
		arr[mul % 10]++;
		mul /= 10;
	}
	for (int i = 0; i < 10; i++)
		cout << arr[i] << '\n';

	return 0;
}

각각의 숫자가 몇 번씩 쓰였는지 구하기 위해 arr[10]을 선언하고 0으로 초기화했습니다.

arr[mul % 10]을 통해 mul의 일의 자리 숫자를 구해서 arr배열의 해당 인덱스에 +1을 해줍니다.

일의 자리 숫자를 구했으니 mul /= 10으로 mul의 값을 바꿔줍니다.

마지막으로 arr배열의 값을 차례로 출력해주면 됩니다.

 

'Algorithm > Study' 카테고리의 다른 글

[백준 10804번 C++] 카드 역배치  (0) 2020.04.30
[백준 1267번 C++] 핸드폰 요금  (0) 2020.04.30
[백준 10093번 C++] 숫자  (0) 2020.04.29
[백준 2309번 C++] 일곱 난쟁이  (0) 2020.04.29
[백준 2587번 C++] 대표값2  (0) 2020.04.29

1. 문제 링크

https://www.acmicpc.net/problem/10093

 

10093번: 숫자

문제 두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오. 입력 두 정수 A와 B가 주어진다. (1 ≤ A, B ≤ 1015, A와 B의 차이는 최대 100,000) 출력 첫째 줄에 두 수 사이에 있는 수의 개수를 출력한다. 둘째 줄에는 두 수 사이에 있는 수를 오름차순으로 출력한다. 예제 입력 1 복사 8 14 예제 출력 1 복사 5 9 10 11 12 13...

www.acmicpc.net

 

 

 

2. 문제 설명

A와 B를 입력받은 후 A와 B의 사이에 있는 숫자의 개수와 숫자들을 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 10093번 숫자 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	long long A, B;
	cin >> A >> B;

	if (A == B) cout << 0;
	else if (A < B) {
		cout << B - A - 1 << '\n';
		for (long long i = A + 1; i < B; i++) cout << i << ' ';
	}
	else if (A > B) {
		cout << A - B - 1 << '\n';
		for (long long i = B + 1; i < A; i++) cout << i << ' ';
	}

	return 0;
}

1 <= A, B <= 10^15 이므로 int의 범위를 초과합니다. 따라서 long long을 써야 합니다.

A < B가 아니라 A, B이므로 A = B인 경우와 A > B인 경우도 고려해야 합니다.

'Algorithm > Study' 카테고리의 다른 글

[백준 1267번 C++] 핸드폰 요금  (0) 2020.04.30
[백준 2577번 C++] 숫자의 개수  (0) 2020.04.30
[백준 2309번 C++] 일곱 난쟁이  (0) 2020.04.29
[백준 2587번 C++] 대표값2  (0) 2020.04.29
[백준 2576번 C++] 홀수  (0) 2020.04.29

1. 문제 링크

https://www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

 

 

2. 문제 설명

9개의 수를 입력받은 후 7개의 합이 100이 되는 경우를 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2309번 일곱 난쟁이 C++ 풀이입니다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int sum = 0;
	vector<int> v(9);

	for (int i = 0; i < 9; i++) cin >> v[i], sum += v[i];
	sort(v.begin(), v.end());
	for (int i = 0; i < 8; i++) {
		for (int j = i + 1; j < 9; j++) {
			if(sum - v[i] - v[j] == 100) {
				for (int k = 0; k < 9; k++) {
					if (k == i || k == j) continue;
					else cout << v[k] << '\n';
				}
				return 0;
			}
		}
	}
}

9개의 수를 입력받으면서 누적합을 구합니다.

출력할 때 오름차순으로 출력해야 하므로 sort함수를 사용하여 정렬합니다.

이중 for문을 통해 0부터 8까지의 수 중에서 2개를 뽑은 경우의 수 i, j를 구합니다.

sum에서 v[i]와 v[j]의 값을 뺀 결과가 100이 되는지를 확인합니다.

100인 경우 앞에서부터 차례로 출력하면서 k가 i, j인 경우는 continue를 사용해 건너뛰면 됩니다. 

'Algorithm > Study' 카테고리의 다른 글

[백준 2577번 C++] 숫자의 개수  (0) 2020.04.30
[백준 10093번 C++] 숫자  (0) 2020.04.29
[백준 2587번 C++] 대표값2  (0) 2020.04.29
[백준 2576번 C++] 홀수  (0) 2020.04.29
[백준 2562번 C++] 최댓값  (0) 2020.04.29

+ Recent posts