#include <stdio.h>
int main()
{
int map[9][9] = {}; //9*9 맵을 생성한다
int num_two=0;
int a1, a2, b1, b2, c1, c2, d1, d2; //a1, a2는 와드 위치, b1, b2는 렌즈 위치, c1, c2는 부쉬의 왼쪽위, 부쉬의 오른쪽아래는 d1과 d2이다.
int i,j, farm; //for문용
int bush[9][9] = {}; //부쉬를 생성한다
scanf("%d %d", &a1, &a2);
scanf("%d %d", &b1, &b2);
scanf("%d %d", &c1, &c2);
scanf("%d %d", &d1, &d2);
for(i=0; i<9; i++)
{
//와드부분
map[a1][a2] = 1; //처음에 와드를 설치한곳은 1임
for(j=0; j<5; j++)//주변은 5*5정사각형 모양으로 출제되었기 때문에 그렇다.
{
map[a1+1][a2] = 2;
map[a1][a2+1] = 2;
map[a1+1][a2+1] = 2; //주변은 2로 바꿈(5*5 사이즈로 문제에 출제됨)
map[a1-1][a2] = 2;
map[a1][a2-1] = 2;
map[a1-1][a2-1] = 2;
map[a1+1][a2-1] = 2;
map[a1-1][a2+1] = 2;
}
if(map[c1++][c2] == map[a1++][a2] || map[c1][c2++] == map[a1][a2++] || map[c1++][c2++] == map[a1++][a2++] || map[c1--][c2] == map[a1--][a2] || map[c1][c2--] == map[a1][a2--] || map[c1--][c2--] == map[a1--][a2--])
{
map[a1][a2] = 3; //와드와 부쉬가 겹치면 그곳은 밝힐 수 없기 때문에 부쉬로 변경
}
if(map[d1++][d2] == map[a1++][a2] || map[d1][d2++] == map[a1][a2++] || map[d1++][d2++] == map[a1++][a2++] || map[d1--][d2] == map[a1--][a2] || map[d1][c2--] == map[a1][a2--] || map[d1--][d2--] == map[a1--][a2--])
{
map[a1][a2] = 3; //와드와 부쉬가 겹치면 그곳은 밝힐 수 없기 때문에 부쉬로 변경
}
if(map[a1][a2] == map[c1][c2] || map[a1][a2] == map[d1][d2])
{
for(j=0; j<5; j++)
{
map[a1+1][a2] = 2;
map[a1][a2+1] = 2;
map[a1+1][a2+1] = 2; //주변은 2로 바꿈(5*5 사이즈로 문제에 출제됨)
map[a1-1][a2] = 2;
map[a1][a2-1] = 2;
map[a1-1][a2-1] = 2;
map[a1+1][a2-1] = 2;
map[a1-1][a2+1] = 2;
map[c1][c2] = 2;
map[c1++][c2] = 2;
map[c1][c2++] = 2;
map[c1++][c2++] = 2;
map[c1--][c2] = 2;
map[c1][c2--] = 2;
map[c1--][c2--] = 2;
map[d1][d2] = 2;
map[d1++][d2] = 2;
map[d1][d2++] = 2;
map[d1++][d2++] = 2;
map[d1--][d2] = 2;
map[d1][d2--] = 2;
map[d1--][d2--] = 2;
//와드와 부쉬가 겹치면 그곳은 밝힐 수 없지만, 부쉬 안에 와드를 넣으면 부쉬와 와드 모두다 2(밝혀진다)가 된다.
}
}
//렌즈 부분
map[b1][b2] = 8; //a는 문자열이니 8로 대체하여서 푼다.(어짜피 map출력하는거 아님)
if(map[b1++][b2] == map[a1++][a2] || map[b1][b2++] == map[a1][a2++] || map[b1++][b2++] == map[a1++][a2++] || map[b1--][b2] == map[a1--][a2] || map[b1][b2--] == map[a1][a2--] || map[b1--][b2--] == map[a1--][a2--])
{
for(j=0; j<5; j++)
{
map[b1++][b2] = 7;
map[b1][b2++] = 7;
map[b1++][b2++] = 7;
map[b1--][b2] = 7;
map[b1][b2--] = 7;
map[b1--][b2--] = 7;
//렌즈가 와드와 겹치면 렌즈의 영향범위는 와드가 밝혀줄 수 있는 시야 + 렌즈의 영향범위는 c라 한다면 , c의 범위는 와드가 밝혀줄 수 있는 범위에서 제외된다. 그러니까 7로 표기한다.
}
}//location of bush : 9*9 & does not have lenz on it = the wad can see it for 9*9 but I can't think about the code my lord
//나의 경우인 렌즈의 영향범위에 와드가 포함되있을 경우이다 만약에 그런 경우에는 와드는 즉시 삭제되어 와드의 기능을 잃어 버린다. 그렇기에 7을 확인하는 것은 하지 않아도 된다.(7=렌즈의 영향범위)
//계산부문
for(farm=0; farm<9; i++) {
if(map[a1][a2] == 2) {
//와드가 밝혀준 칸의 갯수를 확인한다.
num_two++;
}
}
//그리고 출력함ㅋ
printf("%d", num_two);
}
return 0;
}
/*
#include <stdio.h>
int main()
{
int map[9][9] = {}; ///9*9 맵을 생성한다
int num_two=0;
int a1, a2, b1, b2, c1, c2, d1, d2; ///a1, a2는 와드 위치, b1, b2는 렌즈 위치, c1, c2는 부쉬의 왼쪽위, 부쉬의 오른쪽아래는 d1과 d2이다.
int i,j; ///for문용
scanf("%d %d", &a1, &a2); ///와드의 위치
scanf("%d %d", &b1, &b2);
scanf("%d %d", &c1, &c2);
scanf("%d %d", &d1, &d2);
///와드부분
for(i=-2; i<=4; i++) ///5*5 크기로 바꿈
{
for(j=-2; j<=4; j++)///-2로 바꾸는 이유는 와드의 위치를 중심으로 주변 5*5 영역을 확인하기 위한 것이니까 와드가 맵의 중앙에 있으면 와드를 중앙으로 동서남북으로 2칸씩이 시야 범위가 되는데 그래서 -2에서 시작헤서 2까지 반복해야지 와드를 중심으로 한 5*5영역을 모두 확인 가능함.
{
if(a1+i-1 >= 0 && a1+i-1 < 9 && a2+j-1 >= 0 && a2+j-1 < 9)
{
map[a1+i-1][a2+j-1] = 2; ///2로 바꿈
map[a1-1][a2-1] = 1;
///처음에 와드를 설치한곳은 1임
}
}
}
for(i=c1; i<=d1; i++)
{
for(j=c2; j<=d2; j++)
{
if(i >= 0 && i < 9 && j >= 0 && j < 9)
{
if(map[i][j] == 2)
{
map[i][j] = 3; ///와드와 부쉬가 겹치면 그곳은 밝힐 수 없기 때문에 부쉬로 변경
}
}
}
}
///나의 경우인 렌즈의 영향범위에 와드가 포함되있을 경우이다 만약에 그런 경우에는 와드는 즉시 삭제되어 와드의 기능을 잃어 버린다. 그렇기에 7을 확인하는 것은 하지 않아도 된다.(7=렌즈의 영향범위)
///계산부문
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(map[i][j] == 2)
{
///와드가 밝혀준 칸의 갯수를 확인한다.
num_two++;
}
}
}
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%d ", map[i][j]); ///맵의 상태를 확인한다
}
printf("\n");
}
/// 그리고 출력함ㅋ
printf("%d", num_two);
return 0;
}
*/ codeup 2차원 배열 2차원 차이 배열 만들기 5-4
#include <sstdio.h>
int main()
{
int n, m, k, i, j, s, e, u, x1, x2, y1, y2;
scanf("%d %d %d", &n, &k, &m);
int d[n+2][m+2] = {};
for(i=0; i<n+2; i++) {
for(j=0; j<n+2; j++) {
d[i][j] = 0;
}
}
for(i=0; i<k; i++) {
scanf("%d %d %d %d %d", &x1, &x2, &y1, &y2, &u);
d[x1][y1] += u;
d[x2+1][y2+1] += u;
d[x1][y2+1] -= u;
d[x2+1][y1] -= u;
}
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
printf("%d ", d[i][j]);
}
}
for(i=2; i<=n; i++) {
for(j=2; j<=n; j++) {
d[i][j] += d[i-1][j-1];
}
}
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
printf("%d ", d[i][j]);
}
}
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int map[9][9] = {}; //9*9 맵을 생성한다
int num_two=0;
int a1, a2, b1, b2, c1, c2, d1, d2; //a1, a2는 와드 위치, b1, b2는 렌즈 위치, c1, c2는 부쉬의 왼쪽위, 부쉬의 오른쪽아래는 d1과 d2이다.
int i,j; //for문용
scanf("%d %d", &a1, &a2); //와드의 위치
scanf("%d %d", &b1, &b2);
scanf("%d %d", &c1, &c2);
scanf("%d %d", &d1, &d2);
//와드부분
map[a1][a2] = 1; //처음에 와드를 설치한곳은 1임
for(i=-2; i<=2; i++) //5*5 크기로 바꿈
{
for(j=-2; j<=2; j++)//-2로 바꾸는 이유는 와드의 위치를 중심으로 주변 5*5 영역을 확인하기 위한 것이니까 와드가 맵의 중앙에 있으면 와드를 중앙으로 동서남북으로 2칸씩이 시야 범위가 되는데 그래서 -2에서 시작헤서 2까지 반복해야지 와드를 중심으로 한 5*5영역을 모두 확인 가능함.
{
if(a1+i >= 0 && a1+i < 9 && a2+j >= 0 && a2+j < 9) {
map[a1+i][a2+j] = 2; //2로 바꿈
}
}
}
for(i=c1; i<=d1; i++)
{
for(j=c2; j<=d2; j++)
{
if(i >= 0 && i < 9 && j >= 0 && j < 9)
{
if(map[i][j] == 2)
{
map[i][j] = 3; //와드와 부쉬가 겹치면 그곳은 밝힐 수 없기 때문에 부쉬로 변경
}
}
}
}
//렌즈 부분
map[b1][b2] = 8; //a는 문자열이니 8로 대체하여서 푼다.(어짜피 map출력하는거 아님)
for(i=c1; i<=d1; i++)
{
for(j=c2; j<=d2; j++)
{
if(i >= 0 && i < 9 && j >= 0 && j < 9)
{
if(map[i][j] == 2)
{
map[i][j] = 3;
}
}
}
}
//나의 경우인 렌즈의 영향범위에 와드가 포함되있을 경우이다 만약에 그런 경우에는 와드는 즉시 삭제되어 와드의 기능을 잃어 버린다. 그렇기에 7을 확인하는 것은 하지 않아도 된다.(7=렌즈의 영향범위)
//계산부문
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(map[i][j] == 2)
{
//와드가 밝혀준 칸의 갯수를 확인한다.
num_two++;
}
}
}
// 그리고 출력함ㅋ
printf("%d", num_two);
return 0;
}
고침 원래 답은 27인데 왜 16이 나오는 거지