Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 정수내림차순으로배치하기
- HTML
- 프로그래밍
- 건보필기
- 확인문제
- 프로그래밍언어
- 중소기업면접
- 이클립스
- 웹개발
- 코딩
- algorithm
- Linux
- 부스트코스
- BOJ
- 연결요소의개수
- 수박수박수박수박수?
- 웹
- 후기
- 프로그래머스
- 백준
- 공부
- 농은면접
- 필기후기
- CSS
- 웹프로그래밍
- 필기
- 인강
- 알고리즘
- 한국재정정보원
- java
Archives
- Today
- Total
공부하는 히욤이
[BOJ] 5212. 지구 온난화 본문
BaekJoon 5212. 지구 온난화
* 문제의 저작권은 BOJ 및 문제를 만든 사람에게 있습니다.
[문제 접근]
처음에는 BFS로 4방향을 돌아서 X가 2미만이면 좌표값을 .로 바꾸는 방법으로 했더니 .XXX. 일 경우 처음 X가 .으로 바뀌면서 현재 좌표의 양 옆 X개수도 바뀌기 때문에 전부 다 .....로 바뀌었다.
이걸 어떻게 따로 처리해야 할지 모르겠어서 int 배열을 만들어서 현재 좌표에서 4방향 X 개수를 세서 넣어주고
int배열에서 X가 2개 이상이면 원래 char 배열에 X값을 넣어주는 방법으로 조금 무식하게 풀었다.
그리고 X 좌표값들 중 제일 작은 값을 왼쪽 위, 왼쪽 아래 꼭지점 값으로 제일 큰 값을 오른쪽 위, 오른쪽 아래 꼭지점 값으로 해서 X를 포함하는 제일 작은 직사각형을 그렸다.
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_5212 {
static int[] dx = {1, 0, -1, 0};
static int[] dy = {0, -1, 0, 1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int R = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
char[][] map = new char[R][C];
for (int i = 0; i < R; i++) {
String s = br.readLine();
for (int j = 0; j < C; j++) {
map[i][j] = s.charAt(j);
}
}
int[][] nummap = new int[R][C];
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
int cnt = 0;
if (map[i][j] == 'X') {
for (int k = 0; k < 4; k++) {
int nx = i+ dx[k];
int ny = j + dy[k];
if (nx >= 0 && ny>=0 && nx <R && ny<C) {
if (map[nx][ny] == 'X') {
cnt+=1;
}
}
}
}
nummap[i][j] = cnt;
}
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (nummap[i][j] < 2) {
map[i][j] = '.';
}
}
}
int lx = Integer.MAX_VALUE;
int ly = Integer.MAX_VALUE;
int rx = Integer.MIN_VALUE;
int ry = Integer.MIN_VALUE;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (map[i][j] == 'X') {
if (i < lx) {
lx = i;
}
if (i > rx) {
rx = i;
}
if (j <ly) {
ly = j;
}
if (j > ry) {
ry = j;
}
}
}
}
for (int i = lx; i <= rx; i++) {
for (int j = ly; j <= ry; j++) {
System.out.print(map[i][j]);
}
System.out.println();
}
}
}
'Algorithm > BaekJoon' 카테고리의 다른 글
[BOJ] 2606. 바이러스 (0) | 2019.08.22 |
---|---|
[BOJ] 2667. 단지번호붙이기 (0) | 2019.08.22 |
[BOJ] 4949. 균형잡힌 세상 (0) | 2019.08.04 |
[BOJ] 10828. 스택 (0) | 2019.08.04 |
[BOJ] 10989. 수 정렬하기3 (0) | 2019.08.03 |