03
11

브루트포스란?

가능한 모든 경우의 수를 전부 시도해보는 것. 무식하게 문제를 푸는 것이라고 할 수 있다.

 

예제 문제 1)

정수 n(1 <= n <= 100)이 주어질 때, 다음 식을 만족하는 (a, b, c)의 개수를 구하라. 단 a, b, c는 1이상 100이하인 자연수로 가정하고, a, b, c가 중복될 수 있음.

 

코드

더보기
int count = 0;
for (int a = 1; a <= 100; a++) {
    for (int b = 1; b <= 100; b++) {
        for (int c = 1; c <= 100; c++) {
            if (a + b*b + c*c*c == n) {
                count++;
            }
        }
    }
}
cout << count;

중복을 포함해서 브루트푸스를 사용한 방식이다. 모두 100번을 순회하면서, a 와 b * b + c * c * c가 n과 같다면, count의 수를 더해준다.

 

예제 문제 2)

정수 n (1 <= n <= 100)이 주어질 때, 다음 식을 만족하는 (a, b, c)의 개수를 구하는 문제를 불필요한 중복 제거를 하여 풀어보기. [ a + b ^ 2 + c ^ 3 = n]

 

코드

더보기
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	//정수 n이 주어질 때, 
	int n;
	cin >> n;
	int count = 0;

	for (int c = 1; c * c * c <= n; c++)
	{
		for (int b = 1; b * b <= n; b++)
		{
			if (n - (b * b) + (c * c * c) > 0)
			{
				++count;
			}
		}
	}

	cout << count << endl;
	return 0;
}

먼저 첫번째 수가 진행될때, c ^ 3 한 값이 n을 넘지않을 만큼만 순회해준다. 그리고 두번째로 b ^ 2의 값이 n을 넘지 않게 순회한 다음에 n에서 b ^ 2와 c^3을 한 값이 0 이상이면 count의 값이 늘어나게 해주었다.

'코딩 > 알고리즘&자료구조' 카테고리의 다른 글

비트마스킹 기법 구현  (0) 2025.03.10
STL  (0) 2025.02.18
[프로그래머스] 없는 숫자 더하기  (0) 2024.12.30
COMMENT