1. 문제 링크

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

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 1부터 N개의 별을 오른쪽 정렬하여 각각의 줄에 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2439번 별 찍기 - 2 C++ 풀이입니다.

#include <iostream>
using namespace std;

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

	int N;
	cin >> N;

	for (int i = 1; i <= N; i++) {
		for (int j = N - i; j > 0; j--)
			cout << ' ';
		for (int j = 1; j <= i; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 사용하여 개수에 맞게 공백을 먼저 출력하고 이어서 *을 출력하면 됩니다.

1. 문제 링크

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

 

2438번: 별 찍기 - 1

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 1부터 N개의 별을 각각의 줄에 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2438번 별 찍기 - 1 C++ 풀이입니다.

#include <iostream>
using namespace std;

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

	int N;
	cin >> N;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= i; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 사용하여 개수에 맞게 *을 출력하면 됩니다.

1. 문제 링크

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

 

10804번: 카드 역배치

1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다. 

www.acmicpc.net

 

 

 

2. 문제 설명

10개의 구간을 입력받아 구간만큼 배열을 뒤집어서 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 10804번 카드 역배치 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 begin, end;
	vector<int> v(21);
	for(int i = 0; i < 21; i++) v[i] = i;

	for(int i = 0; i < 10; i++) {
		cin >> begin >> end;
		reverse(v.begin() + begin, v.begin() + end + 1);
	}
	for(int i = 1; i < 21; i++)
		cout << v[i] << ' ';

	return 0;
}

카드의 번호가 1부터 시작하므로 vector크기를 21로 선언하고, 1~20번 인덱스를 사용했습니다.

reverse함수를 사용하여 입력받은 구간만큼 배열을 뒤집었습니다.

reverse함수의 사용법은 revers(시작 지점, 끝 지점) 입니다.

시작 지점을 포함하고, 끝 지점을 포함하지 않는 범위까지 요소들을 뒤집어줍니다.

예를 들어 5 10이 입력되면 5~10번 인덱스를 뒤집어야 합니다.

v.begin()은 0번 인덱스를 의미하므로 v.begin() + begin은 5번 인덱스를 의미합니다.

v.begin() + end + 1은 11번 인덱스를 의미하므로 10번 인덱스까지 뒤집어집니다.

 

 

 

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

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

	int begin, end;
	vector<int> v(21);
	for(int i = 0; i < 21; i++) v[i] = i;

	for(int i = 0; i < 10; i++) {
		cin >> begin >> end;
		for (int j = 0; j < (end - begin) / 2 + 1; j++)
			swap(v[begin + j], v[end - j]);
	}
	for(int i = 1; i < 21; i++)
		cout << v[i] << ' ';

	return 0;
}

reverse함수 대신 swap함수를 사용해서 해당 범위를 뒤집는 방식으로 풀어도 됩니다.

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

[백준 2439번 C++] 별 찍기 - 2  (0) 2020.04.30
[백준 2438번 C++] 별 찍기 - 1  (0) 2020.04.30
[백준 1267번 C++] 핸드폰 요금  (0) 2020.04.30
[백준 2577번 C++] 숫자의 개수  (0) 2020.04.30
[백준 10093번 C++] 숫자  (0) 2020.04.29

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

+ Recent posts