9_yoon
개발저장소
9_yoon
전체 방문자
오늘
어제
  • 분류 전체보기 (101)
    • 알고리즘 (52)
      • BJ (40)
      • 프로그래머스 (0)
      • SWEA (10)
      • JO (2)
    • 이론 공부 (7)
      • 네트워크 (2)
      • 알고리즘 (2)
      • Java (1)
      • Web (1)
      • 기타 (1)
    • 개발 공부 (35)
      • Project (1)
      • JavaScript (1)
      • Typescript (1)
      • Spring (12)
      • Java (2)
      • Next JS (7)
      • React (3)
      • Vue (1)
      • Web (5)
      • 기타 (2)
    • 기타 (7)
      • SSAFY (7)
      • 일상 (0)

인기 글

태그

  • SWEA
  • 스프링
  • React
  • 김영한 스프링
  • 싸피7기
  • 싸피
  • 백준
  • 노마드코더
  • NextJS
  • SSAFY

최근 글

티스토리

hELLO · Designed By 정상우.
9_yoon

개발저장소

[BJ] 백준 10163 색종이(JAVA)
알고리즘/BJ

[BJ] 백준 10163 색종이(JAVA)

2022. 3. 8. 20:39
728x90
반응형

문제

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

 

풀이 방법

이 문제는 서브태스크로 채점이되는 문제이다. 서브태스크 문제는 약간 예외를 생각하기 좋은 것 같다.
문제를 간단하게 설명하자면 여러장의 색종이를 순서대로 놓는데 겹쳐서 놓을 수가 있다.  
출력값으로 색종이를 다 놓았을 때 각각의 색종이가 보이는 면적을 출력해야한다.
(https://yoon990.tistory.com/33 이 문제가 생각이 났다.)
그래서 위에서 언급한 문제를 응용해서 이번에는 무조건 1로만 채우는 것이 아니라 색종이의 번호를 넣어주는 식으로 생각을 했다. 첫번째 색종이 면적은 1로, 2번째면 2로 .. 이런식으로 N번째 색종이까지 다 채운 후,
마지막에 1부터 N까지 map에 자신에 해당하는 번호가 몇 개가 있는지 세서 출력해줬다.

 

제출 코드

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

public class BJ_10163_색종이 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken()); //색종이 장 수
		
		int[][] map = new int[1001][1001];
		int[][] papers = new int[N][4];
		
		for (int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken()); //열
			int y = Integer.parseInt(st.nextToken()); //행 
			int w= Integer.parseInt(st.nextToken()); //너비 => 열의 범위 
			int h = Integer.parseInt(st.nextToken()); //높이 => 행의 범위
			papers[i-1] = new int[] {x, y, w, h };
			for (int j = y; j < y+h; j++) {
				for (int k = x; k < x+w; k++) {
					map[j][k] = i;
				}
			}
		}
		
		for (int i = 1; i <= N; i++) {
			int cnt =0; 
			for (int j = papers[i-1][1]; j < papers[i-1][1]+  papers[i-1][3]; j++) {
				for (int k =  papers[i-1][0]; k <papers[i-1][0] +papers[i-1][2]; k++) {
					if(map[j][k] == i )cnt++;
				}
			}
			System.out.println(cnt);
		}
	}
}

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'알고리즘 > BJ' 카테고리의 다른 글

[BJ] 백준 1753 최단경로(JAVA)  (0) 2022.03.12
[BJ] 백준 10158 개미(JAVA)  (0) 2022.03.10
[BJ] 백준 2628 종이자르기 (JAVA)  (0) 2022.03.07
[BJ] 백준 15686 치킨배달 (JAVA)  (0) 2022.03.05
[BJ] 백준 2635 수 이어가기 (JAVA)  (1) 2022.03.02
    '알고리즘/BJ' 카테고리의 다른 글
    • [BJ] 백준 1753 최단경로(JAVA)
    • [BJ] 백준 10158 개미(JAVA)
    • [BJ] 백준 2628 종이자르기 (JAVA)
    • [BJ] 백준 15686 치킨배달 (JAVA)
    9_yoon
    9_yoon
    배울게 넘쳐나는 개발 세상에서 묵묵히 걸어가며 지식을 쌓는 신입 개발자

    티스토리툴바