1. 유형
문자열
2. 풀이
검은색을 뒤집을때 오른쪽, 왼쪽, 아래쪽을 뒤집어야 한다. 이때 뒤집은 횟수를 check배열에 저장한다
check배열을 탐색하면서 값이 홀수이면 칸을 바꾸고, 짝수이면 칸을 뒤집지 않는다
java로 풀 경우 입출력에 시간을 많이 써서 시간초과가 난다.
이때 BufferdReader와 StringBuilder를 써야한다.
3. 코드
package 문자열;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class back_14711타일뒤집기 {
static int dr[] = { 0, 0, 1 };
static int dc[] = { -1, 1, 0 };
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.valueOf(in.readLine());
char map[][] = new char[n][n];
int check[][] = new int[n][n];
String tmp = in.readLine();
for (int i = 0; i < n; i++) {
map[0][i] = tmp.charAt(i);
sb.append(map[0][i]);
}
sb.append('\n');
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] == '#') {
check[i][j]++;
for (int d = 0; d < 3; d++) {
int nr = i + dr[d];
int nc = j + dc[d];
if(nr<0 ||nr>=n || nc<0 || nc>=n) continue;
check[nr][nc]++;
}
}
}
for(int j=0;j<n;j++) {
if(check[i][j]%2==0) {
map[i+1][j] = map[i][j]=='#' ? '#' : '.';
sb.append(map[i+1][j]);
}else {
map[i+1][j] = map[i][j]=='#' ? '.' : '#';
sb.append(map[i+1][j]);
}
}
sb.append('\n');
}
System.out.println(sb);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 - 1276] 골드5 - 교각 놓기 (2) | 2020.10.31 |
---|---|
[백준 - 17828] 골드5 - 문자열 화폐 (그리디) (0) | 2020.10.30 |
[백준 - 2638] 골드4 - 치즈 (bfs) (0) | 2020.10.29 |
[백준 - 3190] 골드5 - 뱀 (0) | 2020.10.29 |
[백준 - 14890] 골드3 - 경사로 (0) | 2020.10.29 |