반응형
문제
https://www.acmicpc.net/problem/2563
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
🐍파이썬
더보기
❌ 실패한 코드
import sys
paper = int(sys.stdin.readline())
dic = {}
for i in range(paper):
a, b = map(int, sys.stdin.readline().split())
dic[i] = [(a, a+10), (b, b+10)]
sum = 0
for i in range(paper):
for j in range(i+1, paper):
#겹치는 부분 찾기(x축)
x = min(dic[i][0][1],dic[j][0][1]) - max(dic[i][0][0],dic[j][0][0])
if x > 0:
#겹치는 부분 찾기(y축)
y = min(dic[i][1][1],dic[j][1][1]) - max(dic[i][1][0],dic[j][1][0])
if y > 0:
sum += x*y
print(paper*100 - sum)
겹치는 부분의 x, y길이를 이용해 넓이를 구한 뒤 전체 넓이에서 빼주려고 시도했다.
주어진 테스트케이스는 통과했는데 히든 테스트케이스를 통과하지는 못했다.
import sys
paper = int(sys.stdin.readline())
arr = [[0]*101 for _ in range(101)]
cnt = 0
for i in range(paper):
a, b = map(int, sys.stdin.readline().split())
for i in range(b, b+10):
for j in range(a, a+10):
arr[i][j] = 1
for i in range(101):
cnt += arr[i].count(1)
print(cnt)
가로 세로 길이가 100인 도화지를 0으로 채운 이차원배열로 표현했다.
가로세로 길이가 10인 검은색 종이가 차지하는 부분을 1로 채웠다.
이러한 방법을 사용하면 이미 1인 부분은 또다시 카운팅 되지 않으므로 최종적으로 배열에 몇 개의 1이 있는지 세어주기만 하면 된다.
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준|파이썬] 21966: (중략) (실버5) (0) | 2023.04.27 |
---|---|
[백준|파이썬] 25757: 임스와 함께하는 미니게임 (실버5) (0) | 2023.04.23 |
[백준|파이썬] 2891: 카약과 강풍 (실버5) (0) | 2023.04.21 |
[백준|파이썬] 2775: 부녀회장이 될테야 (브론즈1) (0) | 2023.04.17 |
[백준|파이썬] 5766: 할아버지는 유명해! (실버4) (0) | 2023.04.14 |
[백준|파이썬] 1388: 바닥 장식 (실버4) (0) | 2023.04.13 |