AngelPlayer`s Diary

링크

https://www.acmicpc.net/problem/10163

 

10163번: 색종이

평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓여진다. 이때 색종이가 비스듬하게 놓이는 경우는 없다. 즉, 모든 색종이의 변은 서로 평행하거나, 서로 수직이거나 둘

www.acmicpc.net

 

 

 

문제 해석

- 입력
N 색종이 개수
왼 위x, 왼 위y, 너비, 높이 

 

색종이가 N개만큼 주어지고, 주어진 색종이를 평면에 붙인 후 각 색종이가 보이는 너비를 구하시오.

 

 

코드

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

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		int[][] map = new int[1001][1001];

		int N = Integer.parseInt(st.nextToken()); // 색종이 개수

		for (int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine());
			int startY = Integer.parseInt(st.nextToken());
			int startX = Integer.parseInt(st.nextToken());
			int width = Integer.parseInt(st.nextToken());
			int height = Integer.parseInt(st.nextToken());

			for (int r = startX; r < startX + height; r++) {
				for (int c = startY; c < startY + width; c++) {
					if (r >= 0 && r < map.length && c >= 0 && c < map[0].length) {
						map[r][c] = i;
					}
				}
			}

		}

		for (int i = 1; i <= N; i++) {
			int count = 0;
			for (int j = 0; j < map.length; j++) {
				for (int k = 0; k < map.length; k++) {
					if (map[j][k] == i) {
						count++;
					}
				}
			}
			System.out.println(count);
		}
	}
}

 

 

 

코드 해석

단순한 구현 문제이지만 좌표를 일반적인 방법과 조금 다르게 설명하여 오해의 소지가 있습니다.

 

원래 입력은 위와 같이 주어지는데 헷길리기 때문에 입력을 조금 변경하여서 풀었습니다.

 

 

이런식으로 보면 배열에 값을 집어넣을 때 조금 더 편하게 확인이 가능합니다.

 

저희의 목표는 각 색종이의 넓이입니다.

 

따라서 저는 각 색종이를 붙일 때마다 배열의 값을 다르게 주었고, 이후 이를 셈하는 방식으로 구현하였습니다. 

 

 

 

발생한 문제 & 해결 방안

~~

 

 

 

 

 

 

 

해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.

혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다!

source : https://github.com/ssh5212/conding-test-practice

공유하기

facebook twitter kakaoTalk kakaostory naver band