백준 Bronze1 2563 - 색종이

JH·2022년 10월 5일
0

백준 알고리즘

목록 보기
22/29
post-thumbnail

문제

입력

출력

예제

idea

친구가 공부하던 커리큘럼을 따라가다 보니 골드 풀다가 브론즈 풀다가 왔다갔다 하는데 사실 골드 풀다가 브론즈로 내려왔더니 아 이렇게 간단하게 생각하면 또 시간초과 or 메모리제한에 걸리겠구나 라는 내 꾀에 내가 넘어가서 좀 어렵게 풀었다.
그러다가 너무 어려워서 그냥 일단 해보고 안되면 그때 바꾸자 생각해서 했더니 됐다.
그냥 100 x 100의 사이즈이므로 이중배열을 이용하여 정해진 좌표에서 가로로 +10 세로로 +10 만큼의 배열 위치를 1로 변경해주었다. 이렇게 하면 중복된 수도 겹치지 않게 계산할 수 있다.
마지막으로 1의 수를 계산해주면 된다.

정리

  • 100 x 100 사이즈의 배열을 만듬(나는 알아보기 쉽게 101x101을 만들어 1~100으로 이용함)
  • 주어진 좌표 x,y를 for문을 이용하여 x~x+10, y~y+10 만큼을 1로 채움
  • 1~100의 좌표중 1이 몇개인지 확인

Code

import java.util.*;
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();
		
		int N=Integer.parseInt(st.nextToken());
		int paper[][]=new int[101][101];
		int x[]=new int[N];
		int y[]=new int[N];
		int answer=0;
		
		for(int i=0;i<N;i++) {
			st = new StringTokenizer(br.readLine());
			x[i]=Integer.parseInt(st.nextToken());
			y[i]=Integer.parseInt(st.nextToken());
		}
		
		for (int i = 0; i < N; i++) {
			for (int j = x[i]; j < x[i]+10; j++) {
				for (int k = y[i]; k < y[i]+10; k++) {
					paper[j][k]=1;
				}
			}
		}
		
		for(int i=1;i<=100;i++) {
			for(int j=1;j<=100;j++) {
				answer+=paper[i][j];
			}
		}
		
		
		System.out.println(answer);
	}
}

결과

0개의 댓글