문제
뒤집기 게임의 룰은 다음과 같다.
- 뒤집기 게임을 진행할 맵과 뒤집기 횟수 N이 주어진다. 이때 맵은 10×10정삭각형 모양의 2차원 배열 형태이면 모든 원소들이 0으로 되어있는 상태이다.
- 뒤집기 행위는 뒤집을 원소가 1이면 0으로 만들고, 0이면 1로 만든다는 뜻이다.
- 첫번째 뒤집을 때는 1행의 원소들과 1열의 원소들을 모두 뒤집는다. 두번째 뒤집을 때는 2행의 원소들과 2열의 원소들을 모두 뒤집는다. 마찬가지로 i번째 뒤집을 때는 i행의 원소들과 i열의 원소들을 모두 뒤집는다. 이렇게 총 N번의 뒤집기를 한다. (행과 열의 번호는 1번부터 시작한다.)
N이 주어졌을 때 뒤집기 게임을 모두 시행하고 난 뒤의 맵을 출력하는 프로그램을 작성해보자
입력
입력 첫째 줄에는 뒤집을 횟수 N이 주어진다. N은 10 이하의 자연수이다.
출력
뒤집기 게임을 하고난 뒤의 맵의 상태를 출력한다. ( 맵은 숫자 사이에 공백을 두고 출력한다.)
예제 입력
1
예제 출력
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
예제 입력
3
예제 출력
1 0 0 1 1 1 1 1 1 1
0 1 0 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include <stdio.h>
int main() {
int input;
scanf("%d", &input);
int i,j,z;
int arr[10][10];
for(i=0; i<10; i++){
for(j=0; j<10; j++){
arr[i][j] = 0;
}
}
for(z=0; z<=input-1; z++){
for(i=0; i<10; i++){
if(arr[i][z] == 1){
arr[i][z] = 0;
}else{
arr[i][z] = 1;
}
}
for(j=0; j<10; j++){
if(arr[z][j] == 1){
arr[z][j] = 0;
}else{
arr[z][j] = 1;
}
}
if(arr[z][z]==1){
arr[z][z]=0;
}else{
arr[z][z]=1;
}
}
//테스트
for(i=0; i<10; i++){
for(j=0; j<10; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
|
'[C++] 알고리즘 교육 > 1~4. 기본기' 카테고리의 다른 글
[알고리즘 3.1.9] 간단한 완전 탐색 - maxofarr (0) | 2019.04.26 |
---|---|
[알고리즘 3.1.8] 간단한 완전 탐색 - 행렬 뒤집기 (0) | 2019.04.26 |
[알고리즘 3.1.6] 간단한 완전 탐색 - eightnine (0) | 2019.04.26 |
[알고리즘 3.1.5] 간단한 완전 탐색 - GCD LCM (0) | 2019.04.25 |
[알고리즘 3.1.4] 간단한 완전 탐색 - 상자 색칠 (0) | 2019.04.25 |
댓글