[2563번] 색종이 ( 구현, 1칸을 배열 1칸으로 생각하는 센스!, 무턱대고 배열에 집어넣지 말자. )

Loopy·2024년 1월 6일
0

코테 문제들

목록 보기
78/113

ArrayList에 x,y를 저장하고 겹치는 부분을 제거하는 방식으로 구현하려고 했는데, 구현이 어려워서 도대체 어떻게 푸는 걸까 싶었다.
다른 사람들은 0부터 100까지 이중 배열을 만들고 색종이가 들어오는 x,x+9와 y,y+9까지를 채우고 만약에 채워졌다면 방문하지 않도록 구현했다.
위의 아이디어로 구현해보자.


✅ 문제

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	static boolean[][] A = new boolean[101][101];
	static int area = 0;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());

		for (int t = 0; t < N; t++) {
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			for (int i = x; i < x + 10; i++) {
				for (int j = y; j < y + 10; j++) {
					if (!A[i][j]) {
						A[i][j] = true;
						area++;
					}
				}
			}
		}

		System.out.println(area);


	}
}

내 생각에 실버 낮은 번호는 더 어려운 문제를 푸는 과정 하나를 떼서 물어보는 같다.
이 문제는 방문 배열 처리해주는 과정을 색종이 칸으로 비유해서 간접적으로 문제로 낸 것 같다.
무턱대고 배열에 넣고 구현하는 것이 먼저 떠오르지만, 그러지말고 알고리즘적으로 내가 사용했던 방법을 염두에 두고 문제를 접근해야할 것 같다. (예: 방문 배열, -= 연산 등)

profile
잔망루피의 알쓸코딩

0개의 댓글