Life Engineering
[BOJ 2567] 색종이 - 2 (Java) 본문
https://www.acmicpc.net/problem/2567
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class P2567 {
static int[][] map=new int[100][100];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int N=Integer.parseInt(br.readLine());
int x, y;
int answer=0;
for (int i=0; i<N; i++) {
StringTokenizer st=new StringTokenizer(br.readLine(), " ");
x=Integer.parseInt(st.nextToken());
y=Integer.parseInt(st.nextToken());
for (int j=y; j<y+10; j++) {
for (int k=x; k<x+10; k++) {
map[j][k]=1;
}
}
}
for (int i=0; i<100; i++) {
for (int j=0; j<100; j++) {
if (map[i][j]==1) {
if (isContour(i,j-1,i,j+1)) {
answer++;
}
if (isContour(i-1, j, i+1, j)) {
answer++;
}
}
}
}
System.out.println(answer);
}
public static boolean isContour(int left_y, int left_x, int right_y, int right_x) {
if (left_y<0 || left_x<0 || right_y>=100 || right_x>=100) return true;
return (map[left_y][left_x]==0 && map[right_y][right_x]==1) || (map[left_y][left_x]==1 && map[right_y][right_x]==0);
}
}
괜히 어렵게 푼..듯..
가로, 세로로 검사해서 주변에 1 1 0, 0 1 1 이런 형태이면 둘레를 +1 하도록 해줬다.
근데 사실 이럴 필요가 없는게, 1로 표시된 애들 중에서 4방향을 검사해서 인접 4방향 중 0인 애들을 만나면 ++1 해서 아주 간단하게 풀 수 있다.
1로 표시된 애들 중에, 주변 4방을 검사해서 0인 애들이 있으면 그만큼 둘레라는 것을 캐치하는게 중요했다.
'Problem Solving' 카테고리의 다른 글
[BOJ 17413] 단어 뒤집기 2 (Java) (0) | 2022.02.13 |
---|---|
[BOJ 16926] 배열 돌리기 1(Java) (0) | 2022.02.11 |
[BOJ 1715] 카드 정렬하기 (Java) (0) | 2022.02.10 |
[BOJ 20056] 마법사 상어와 파이어볼 (Java) (0) | 2022.02.09 |
[SW Expert 1234] 비밀번호 (Java) (0) | 2022.02.09 |