728x90
brute-force
: 무차별 대입
: 모든 경우의 수를 대입한다.
브루트 포스 단계
체스판을 만드는 모든 경우를 시도하여 최적의 방법을 찾는 문제
www.acmicpc.net
● [문제번호 2798] 블랙잭
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N, M;
scanf("%d %d", &N, &M);
int* num = (int*)malloc(N * sizeof(int));
for(int i = 0; i < N; i++)
scanf("%d", &num[i]);
int max = 0;
for(int a = 0; a < N; a++)
{
for(int b = 0; b < N; b++)
{
for(int c = 0; c < N; c++)
{
if(a == b || b == c || c == a)
continue;
int temp = num[a] + num[b] + num[c];
if(temp <= M)
if(max < temp)
max = temp;
}
}
}
printf("%d", max);
free(num);
return 0;
}
● [문제번호 2231] 분해합
#include <stdio.h>
int main()
{
int N;
scanf("%d", &N);
for(int i = 1; i <= N; i++)
{
// 생성자가 없는 경우
if(i == N)
{
printf("%d", 0);
break;
}
// 한자리씩 추출할 변수
int temp = i;
// 분해합을 구할 변수
int total = temp;
// 한자리씩 추출
while(1)
{
if(temp % 10 == 0)
break;
total += temp % 10;
temp /= 10;
}
// 생성자를 찾은 경우
if(total == N)
{
printf("%d", i);
break;
}
}
return 0;
}
● [문제번호 7568] 덩치
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N;
scanf("%d", &N);
int* weight = (int*)malloc(N * sizeof(int));
int* height = (int*)malloc(N * sizeof(int));
for(int i = 0; i < N; i++)
scanf("%d %d", &weight[i], &height[i]);
for(int i = 0; i < N; i++)
{
int rank = 1;
for(int j = 0; j < N; j++)
{
if(weight[i] < weight[j] && height[i] < height[j])
rank++;
}
printf("%d ", rank);
}
free(weight);
free(height);
return 0;
}
● [문제번호 1018] 체스판 다시 칠하기
#include <stdio.h>
int main()
{
int N, M;
scanf("%d %d", &N, &M);
char chess[50][51];
for(int i = 0; i < N; i++)
{
getchar();
for(int j = 0; j < M; j++)
scanf("%c", &chess[i][j]);
}
int min = 64;
for(int i = 0; i < N - 7; i++)
{
for(int j = 0; j < M - 7; j++)
{
int count = 0;
char check[2] = {'W', 'B'};
int flag = 0;
for(int r = i; r < i + 8; r++)
{
for(int c = j; c < j + 8; c++)
{
if(check[flag] != chess[r][c])
count++;
if(flag == 0)
flag = 1;
else if(flag == 1)
flag = 0;
}
if(flag == 0)
flag = 1;
else if(flag == 1)
flag = 0;
}
if(min > count)
min = count;
count = 0;
flag = 1;
for(int r = i; r < i + 8; r++)
{
for(int c = j; c < j + 8; c++)
{
if(check[flag] != chess[r][c])
count++;
if(flag == 0)
flag = 1;
else if(flag == 1)
flag = 0;
}
if(flag == 0)
flag = 1;
else if(flag == 1)
flag = 0;
}
if(min > count)
min = count;
}
}
printf("%d", min);
return 0;
}
● [문제번호 1436] 영화감독 숌
#include <stdio.h>
int six(int n)
{
int count = 0;
int ten = 10;
while(1)
{
// 666이 연속으로 3개이상 조건
if((n % ten) == 6)
count++;
else
{
if(count >= 3)
break;
count = 0;
}
n /= ten;
if(n == 0)
break;
}
if(count >= 3)
return 1;
else
return 0;
}
int main()
{
int N;
scanf("%d", &N);
if(N == 1)
{
printf("%d", 666);
return 0;
}
int count = 1;
int num = 1666;
while(1)
{
if(six(num) == 1)
count++;
if(count == N)
break;
num++;
}
printf("%d", num);
return 0;
}
728x90
'Baekjoon > 단계별로 풀어보기' 카테고리의 다른 글
[단계 13] 백트래킹 (8문제) (0) | 2021.01.22 |
---|---|
[단계12] 정렬 (9문제) (0) | 2021.01.14 |
[단계10] 재귀 (4문제) (0) | 2021.01.12 |
[단계09] 기본 수학2 (11문제) (0) | 2021.01.09 |
[단계08] 기본 수학1 (9문제) (0) | 2020.12.20 |
[단계07] 문자열 (10문제) (0) | 2020.12.20 |
[단계06] 함수 (3문제) (0) | 2020.12.18 |
댓글