코딩테스트[파이썬]/백준 (BOJ)

백준 2563 - 색종이

softmoca__ 2024. 2. 12. 17:49
목차

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

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

 

 

가로,세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다.

이러한 방식으로 색종이를 한장 또는 여러장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램

[입력]

색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이으의 거리이고, 두번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이 수는 100이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다.

# 입력
3
3 7
15 7
5 2

#출력
260

 

처음 문제를 보고 각각의 입력을 받고 넓이를 구하고 다음 입력을 받아 넓이를 구한뒤 겹치는 부분을 뺄 로직을 생각 했다.

그 과정에서 중복이 3개 이상되면 겹치는 부분을 체크할 변수들이 너무 많아졌다...

 

결국 아래 링크의 유튜브에서 다른 접근 방법을 안뒤 다시 풀었다.

 

주요 풀이는 이와 같다.

1. 100 x 100 크기의 배열을 0으로 초기화

2. 주어진 입력값 만큼의 범위를 1로 체크 !

 (반복)

3. 1로 체크된 곳을 카운팅 !

 

 

 

 

 

정답 코드

arr=[[0]*100 for _ in range(100)]

n=int(input())
for _ in range(n):
    a,b=map(int,input().split())
    for i in range(10):
        for j in range(10):
            arr[a+i][b+j]=1

S=0
for i in range(100):
    S+=sum(arr[i])

print(S)

 

 

https://www.youtube.com/watch?v=-QLzMbkmfKY&t=160s&ab_channel=%EB%AC%B8%EC%96%B4%EB%B0%95%EC%82%ACIT%ED%8E%B8%EC%9D%98%EC%A0%90