반응형
문제링크: https://www.acmicpc.net/problem/16918
구현문제입니다.
접근방식
1. 단순구현으로 해결
3. 값이 짝수일때, 홀수일때로 나눠서 풀었다.
4. 짝수일때는 항상 모든 값이 O
홀수일때는 값이 변화하는 것을 시뮬레이션으로 구현
문제풀이
1. 짝수일때는 항상 모든 값이 O
홀수일때는 값이 변화하는 것을 시뮬레이션으로 구현
2. 홀수일때, copyed배열을 만들어서 변화하는 값을 저장해놓는 형식으로 구현
코드를 직접 확인하는게 더 빠를 것 같음
정답 코드
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
string arr[201];
int r, c, n;
int y_ar[4] = { -1,0,1,0 };
int x_ar[4] = { 0,1,0,-1 };
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> r >> c >> n;
for (int i = 0; i < r; i++)
cin >> arr[i];
if (n % 2 == 0) {
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++)
cout << 'O';
cout << "\n";
}
return 0;
}
string copyed[201];
for (int i = 0; i < r; i++)
copyed[i] = arr[i];
for (int i = 1; i < n; i += 2) {
for (int j = 0; j < r; j++)
copyed[j] = arr[j];
for (int j = 0; j < r; j++)
for (int k = 0; k < c; k++)
if (arr[j][k] == 'O') {
for (int u = 0; u < 4; u++) {
int ny = j + y_ar[u];
int nx = k + x_ar[u];
if (ny >= 0 && ny < r && nx >= 0 && nx < c)
copyed[ny][nx] = 'O';
}
}
for (int j = 0; j < r; j++)
for (int k = 0; k < c; k++) {
if (copyed[j][k] == 'O')
arr[j][k] = '.';
else {
arr[j][k] = 'O';
}
}
}
for (int i = 0; i < r; i++)
cout << arr[i] << "\n";
return 0;
}
반응형
'알고리즘 > 시뮬레이션' 카테고리의 다른 글
[백준] 21608-상어 초등학교(C++) (0) | 2022.04.24 |
---|---|
[백준] 20058-마법사 상어와 파이어스톰(C++) (0) | 2021.04.03 |
[백준] 20057-마법사 상어와 토네이도(C++) (2) | 2021.03.30 |
[백준] 20055-컨베이어 벨트 위의 로봇(C++) (0) | 2021.03.21 |
[백준] 8911-거북이(C++) (0) | 2021.01.10 |