728x90
1. 문제
https://codeup.kr/problem.php?id=2042
[출처 : 코드업(https://codeup.kr/)]
이번문제는 좌표의 값이 0일때 그 좌표의 k 범위안에 있는 1을 더해 가장 큰 좌표를 구하는 문제입니다.
이런한 문제는 n*n배열이 아닌
"(n+(k/2))*(n+(k/2))"배열을 만들어주면 꼭지점과 상관없는 간단한 코트를 작성할수 있습니다.
2. 풀이방법
STEP 1. x,y좌표와 k가 주어질때 k범위안의 1을 더하는 함수작성
STEP 2. 입력된 좌표를 전부 확인하면서 가장 큰 좌표를 체크
3. 해답
#include <stdio.h>
int arr[19][19] = { 0, };
int Count(int x, int y, int k) {
int c = 0;
// x,y에서 k범위안에 불이 있는곳을 체크
for (int i = x - (k / 2); i <= x + (k / 2); i++) {
for (int j = y - (k / 2); j <= y + (k / 2); j++) {
if (arr[i][j] == 1) c++;
}
}
return c;
}
int main() {
int n, k;
int x, y, c, max = 0;
scanf("%d", &n);
scanf("%d", &k);
for (int i = 2; i < n + 2; i++) {
for (int j = 2; j < n + 2; j++) {
scanf("%d", &arr[i][j]);
}
}
for (int i = 2; i < n + 2; i++) {
for (int j = 2; j < n + 2; j++) {
// 해당좌표가 불이나있으면 패스
if (arr[i][j] == 1) continue;
c = Count(i, j, k);
// 가장 불이 많은 곳을체크
// 불의 개수가 (k*k-1)이면 주변이 불로 둘러싸인 경우
if (c > max && c < (k*k - 1)) {
max = c;
x = i;
y = j;
}
}
}
if (max > 0) printf("%d %d", x - 1, y - 1);
else printf("119");
return 0;
}
'프로그래밍 > CodeUp' 카테고리의 다른 글
CodeUp[Q_2115] : 팩토리얼 계산 (Large) (0) | 2020.03.30 |
---|---|
CodeUp[Q_2112] : 매우 큰 수의 비교 (0) | 2020.03.29 |
CodeUp[Q_2041] : 회원들의 나이 차이 (0) | 2020.03.27 |
CodeUp[Q_2035] : 앉을 수 있는 자리 (0) | 2020.03.26 |
CodeUp[Q_2034] : 인수 분해 (0) | 2020.03.25 |