풀이

문자열을 받은 뒤 해당 문자열에서 주어진 알파벳과 같은 문자를 세어 출력하면 되는 간단한 문제다.

#include <iostream>
#include <string>

using namespace std;

string str;

int main() {
	while (true) {
		int cnt = 0;
		getline(cin, str);

		if (str[0] == '#') break;

		if (str[0] >= 'A' && str[0] <= 'Z') {
			for (int i = 2; i < str.size(); i++) {
				if (str[i] == str[0]) cnt++;
				if (str[i] == str[0] + 32) cnt++;
			}
		}
		else {
			for (int i = 2; i < str.size(); i++) {
				if (str[i] == str[0]) cnt++;
				if (str[i] == str[0] - 32) cnt++;
			}
		}

		cout << str[0] << ' ' << cnt << '\n';
	}

	return 0;
}

문제

 

 

풀이

 주어진 n을 5로 나눈 몫 cnt5를 구한 다음, n에서  5 * 몫을 뺀 값을 3으로 나눈 나머지 cnt3의 값이 0이 나오거나 cnt5가 0보다 작을 때까지 반복 후, 전자면 cnt3 + cnt5를 출력하고, 후자면 정확하게 n이 될 수 없으므로 -1을 출력한다.

#include <iostream>
#include <vector>

using namespace std;

int main() {
	int n;
	int cnt3 = 0, cnt5 = 0;
	bool flag = true;

	cin >> n;

	cnt5 = n / 5;

	while (true) {
		if (cnt5 < 0) {
			flag = false;
			break;
		}
		if ((n - 5 * cnt5) % 3 == 0) {
			cnt3 = (n - 5 * cnt5) / 3;
			break;
		}
		cnt5--;
	}

	if (flag == false) cout << -1;
	else cout << cnt3 + cnt5;

	return 0;
}

문제

 

 

풀이

주어진 숫자가 6이 연속으로 세 번 나오는 수 중 몇 번째인지 구하면 된다.

#include <iostream>
#include <string>

using namespace std;

int main() {
	int n;
	int num = 666;
	int cnt = 0;

	cin >> n;

	while (true) {
		string s = to_string(num);

		for (int i = 0; i < s.length() - 2; i++) {
			if (s[i] == '6' && s[i + 1] == '6' && s[i + 2] == '6') {
				cnt++;
				if (cnt == n)
					break;
				break;
			}
		}

		if (cnt == n) break;
		num++;
	}

	cout << num;

	return 0;
}

문제

 

 

풀이

주어진 배열을 미리 선언한 두 배열과 비교하여 다시 칠해야할 정사각형의 개수 두 가지 중 작은 값을 출력하면된다.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

string boardWB[8] = { "WBWBWBWB",
					  "BWBWBWBW",
					  "WBWBWBWB",
					  "BWBWBWBW",
					  "WBWBWBWB",
					  "BWBWBWBW",
					  "WBWBWBWB",
					  "BWBWBWBW" };

string boardBW[8] = { "BWBWBWBW",
					  "WBWBWBWB",
					  "BWBWBWBW",
					  "WBWBWBWB",
					  "BWBWBWBW",
					  "WBWBWBWB",
					  "BWBWBWBW",
					  "WBWBWBWB" };

vector<string> board;

pair<int, int> func(int x, int y) {
	int cntWB = 0, cntBW = 0;

	for (int i = 0; i < 8; i++) {
		for (int j = 0; j < 8; j++) {
			if (board[i + x][j + y] != boardWB[i][j])
				cntWB++;
		}
	}

	for (int i = 0; i < 8; i++) {
		for (int j = 0; j < 8; j++) {
			if (board[i + x][j + y] != boardBW[i][j])
				cntBW++;
		}
	}

	return { cntWB, cntBW };
}

int main() {
	int n, m;
	int min = 99999;
	string str;
	

	cin >> n >> m;
	
	for (int i = 0; i < n; i++) {
		cin >> str;

		board.push_back(str);
	}

	for (int i = 0; i + 8 <= n; i++) {
		for (int j = 0; j + 8 <= m; j++) {
			pair<int, int> cnt;
			int tmp = 0;

			cnt = func(i, j);

			if (cnt.first > cnt.second) tmp = cnt.second;
			else tmp = cnt.first;

			if (min > tmp) min = tmp;
		}
	}

	cout << min;

	return 0;
}

 

'백준 > 브루트포스' 카테고리의 다른 글

2839번: 설탕 배달 [C++]  (0) 2023.03.27
1436번: 영화감독 숌 [C++]  (0) 2023.03.27
19532번: 수학은 비대면강의입니다 [C++]  (0) 2023.03.27
2231번 분해합 [C++]  (0) 2023.03.27
2798번: 블랙잭 / C++  (0) 2023.03.27

문제

 

 

풀이

조건을 만족하는 x, y가 나올 때까지 반복한 후 출력한다.

#include <iostream>

using namespace std;

int main() {
	int a, b, c, d, e, f;

	cin >> a >> b >> c >> d >> e >> f;

	for (int x = -999; x < 1000; x++) {
		for (int y = -999; y < 1000; y++) {
			if (a * x + b * y == c && d * x + e * y == f) {
				cout << x << " " << y;
				return 0;
			}
		}
	}
	
	return 0;
}

'백준 > 브루트포스' 카테고리의 다른 글

2839번: 설탕 배달 [C++]  (0) 2023.03.27
1436번: 영화감독 숌 [C++]  (0) 2023.03.27
1018번: 체스판 다시 칠하기 [C++]  (0) 2023.03.27
2231번 분해합 [C++]  (0) 2023.03.27
2798번: 블랙잭 / C++  (0) 2023.03.27

문제

 

 

풀이

i가 n의 생성자가 될 때까지 반복한 후 sum == n이라면 i를 출력, 생성자가 없다면 0을 출력하도록 한다.

#include <iostream>

using namespace std;

int main() {
	int n;

	cin >> n;

	for (int i = 1; i < n; i++) {
		int sum = i;
		int num = i;

		while (num > 0) {
			sum += num % 10;
			num /= 10;
		}

		if (sum == n) {
			cout << i;
			return 0;
		}
	}

	cout << "0";

	return 0;
}

문제

 

풀이

브루트포스 알고리즘인만큼 모든 합을 비교해서 풀었다

#include <iostream>
#include <vector>

using namespace std;

int main() {
	int n, m, sum, answer;
	int min = 300001;
	vector<int> v;

	cin >> n >> m;

	for (int i = 0; i < n; i++) {
		int num;

		cin >> num;
		v.push_back(num);
	}

	for (int i = 0; i < n - 2; i++) {
		for (int j = i + 1; j < n - 1; j++) {
			for (int k = j + 1; k < n; k++) {
				sum = v[i] + v[j] + v[k];
				if ((min > m - sum) && (m - sum >= 0)) {
					min = m - sum;
					answer = sum;
				}
			}
		}
	}

	cout << answer;
	
	return 0;
}

+ Recent posts