1. 문제 링크

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

 

1267번: 핸드폰 요금

동호가 저번 달에 이용한 통화의 개수 N이 주어진다. N은 20보다 작거나 같은 자연수이다. 둘째 줄에 통화 시간 N개가 주어진다. 통화 시간은 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

 

2. 문제 설명

N개의 통화 시간을 입력받아 문제의 조건에 따라 계산하여 최솟값을 구하는 문제입니다.

 

 

 

3. 소스코드

BOJ 1267번 핸드폰 요금 C++ 풀이입니다.

#include <iostream>
using namespace std;

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

	int N, temp, m = 0, y = 0;
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> temp;
		y += (temp / 30 + 1) * 10;
		m += (temp / 60 + 1) * 15;
	}
	if (m < y) cout << "M " << m;
	else if (m > y) cout << "Y " << y;
	else if (m == y) cout << "Y M " << m;

	return 0;
}

30초 미만이거나 60초 미만이어도 요금이 나오므로 나눈 후 1을 더하고 요금을 곱하면 됩니다.

 

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

[백준 2438번 C++] 별 찍기 - 1  (0) 2020.04.30
[백준 10804번 C++] 카드 역배치  (0) 2020.04.30
[백준 2577번 C++] 숫자의 개수  (0) 2020.04.30
[백준 10093번 C++] 숫자  (0) 2020.04.29
[백준 2309번 C++] 일곱 난쟁이  (0) 2020.04.29

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

1. 문제 링크

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

 

2587번: 대표값2

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 가 된다. 평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다. 예를 들어 10, 40, 30, 60, 30의 경우, 크기 순서대로 늘어 놓으면 10 30 30 40 60 이 되고

www.acmicpc.net

 

 

 

2. 문제 설명

5개의 수를 입력받아 평균과 대표값을 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2587번 대표값2 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(5);

	for (int i = 0; i < 5; i++) cin >> v[i], sum += v[i];
	sort(v.begin(), v.end());
	cout << sum / 5 << '\n' << v[2];

	return 0;
}

중앙값을 구하기 위해 sort함수를 사용했습니다.

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

[백준 10093번 C++] 숫자  (0) 2020.04.29
[백준 2309번 C++] 일곱 난쟁이  (0) 2020.04.29
[백준 2576번 C++] 홀수  (0) 2020.04.29
[백준 2562번 C++] 최댓값  (0) 2020.04.29
[백준 2490번 C++] 윷놀이  (0) 2020.04.29

1. 문제 링크

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

 

2576번: 홀수

7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어, 7개의 자연수 12, 77, 38, 41, 53, 92, 85가 주어지면 이들 중 홀수는 77, 41, 53, 85이므로 그 합은 77 + 41 + 53 + 85 = 256 이 되고, 41 < 53 < 77 < 85 이므로 홀수들 중 최솟값은 41이 된다.

www.acmicpc.net

 

 

 

2. 문제 설명

7개의 자연수를 입력받아 홀수가 있으면 홀수의 합과 최솟값을 출력하고, 홀수가 없으면 -1을 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2576번 홀수 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
    
	int n, min = 100, sum = 0;

	for (int i = 0; i < 7; i++) {
		cin >> n;
		if (n % 2 == 1) {
			sum += n;
			if (n < min) min = n;
		}
	}
	if (sum == 0) cout << -1;
	else cout << sum << '\n' << min;

	return 0;
}

입력받는 수가 0보다 크고, 100보다 작으므로 min의 초기값을 100으로 할당했습니다.

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

[백준 2309번 C++] 일곱 난쟁이  (0) 2020.04.29
[백준 2587번 C++] 대표값2  (0) 2020.04.29
[백준 2562번 C++] 최댓값  (0) 2020.04.29
[백준 2490번 C++] 윷놀이  (0) 2020.04.29
[백준 2480번 C++] 주사위 세개  (0) 2020.04.29

1. 문제 링크

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

 

2562번: 최댓값

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

www.acmicpc.net

 

 

 

2. 문제 설명

9개의 자연수를 입력받아 최댓값과, 그 최댓값이 몇 번째 수인지 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2562번 최댓값 C++ 풀이입니다.

#include <iostream>
using namespace std;

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

	int n, max = 0, idx;

	for (int i = 1; i <= 9; i++) {
		cin >> n;
		if (n > max) {
			max = n;
			idx = i;
		}
	}
	cout << max << '\n' << idx;

	return 0;
}

입력받는 수가 자연수이므로 max의 초기값을 0으로 할당하면,

첫 번째 수가 무조건 max에 할당된 후 다음 수부터 비교할 수 있습니다.

몇 번째 숫자인지 구할 때 0이 아니라 1부터 시작하기 때문에 for문의 조건을 1 <= i <= 9로 했습니다.

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

[백준 2587번 C++] 대표값2  (0) 2020.04.29
[백준 2576번 C++] 홀수  (0) 2020.04.29
[백준 2490번 C++] 윷놀이  (0) 2020.04.29
[백준 2480번 C++] 주사위 세개  (0) 2020.04.29
[백준 2753번 C++] 윤년  (0) 2020.04.29

1. 문제 링크

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

 

2490번: 윷놀이

우리나라 고유의 윷놀이는 네 개의 윷짝을 던져서 배(0)와 등(1)이 나오는 숫자를 세어 도, 개, 걸, 윷, 모를 결정한다. 네 개 윷짝을 던져서 나온 각 윷짝의 배 혹은 등 정보가 주어질 때 도(배 한 개, 등 세 개), 개(배 두 개, 등 두 개), 걸(배 세 개, 등 한 개), 윷(배 네 개), 모(등 네 개) 중 어떤 것인지를 결정하는 프로그램을 작성하라.

www.acmicpc.net

 

 

 

2. 문제 설명

총 12개의 숫자를 입력받아 계산 후 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2490번 윷놀이 C++ 풀이입니다.

#include <iostream>
using namespace std;

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

	for (int i = 0; i < 3; i++) {
		int sum = 0, temp;
		for (int j = 0; j < 4; j++) cin >> temp, sum += temp;
		if (sum == 0) cout << 'D';
		else if (sum == 1) cout << 'C';
		else if (sum == 2) cout << 'B';
		else if (sum == 3) cout << 'A';
		else if (sum == 4) cout << 'E';
		cout << '\n';
	}

	return 0;
}

11번 라인의 for문을 이용해 4번씩 돌면서 temp에 입력받은 값을 sum에 누적시킨 후,

아래 if ~ else if문을 이용해 문제에서 주어진대로 출력하는 과정을 3번 반복하면 됩니다.

 

 

 

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

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

	int sum;
	vector<int> v(4);

	for (int i = 0; i < 3; i++) {
		cin >> v[0] >> v[1] >> v[2] >> v[3];
		sum = accumulate(v.begin(), v.end(), 0);
		if (sum == 0) cout << 'D';
		else if (sum == 1) cout << 'C';
		else if (sum == 2) cout << 'B';
		else if (sum == 3) cout << 'A';
		else if (sum == 4) cout << 'E';
		cout << '\n';
	}

	return 0;
}

vector를 이용해서 4개씩 숫자를 받고, accumulate함수를 이용해서 sum을 구한 후 결과를 출력해도 됩니다.

accumulate함수를 사용하기 위해서는 <numeric> 헤더를 include해야합니다.

accumulate함수의 사용법은 accumulate(시작 지점, 끝 지점, 초기값)입니다. 

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

[백준 2576번 C++] 홀수  (0) 2020.04.29
[백준 2562번 C++] 최댓값  (0) 2020.04.29
[백준 2480번 C++] 주사위 세개  (0) 2020.04.29
[백준 2753번 C++] 윤년  (0) 2020.04.29
[백준 2752번 C++] 세수정렬  (0) 2020.04.28

+ Recent posts