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

+ Recent posts