Algorithm

[λ°±μ€€] 2563. 색쒅이 python

🐳 링크

λ°±μ€€ 2563번 색쒅이

πŸ• 문제

κ°€λ‘œ, μ„Έλ‘œμ˜ 크기가 각각 100인 μ •μ‚¬κ°ν˜• λͺ¨μ–‘μ˜ 흰색 도화지가 μžˆλ‹€. 이 도화지 μœ„μ— κ°€λ‘œ, μ„Έλ‘œμ˜ 크기가 각각 10인 μ •μ‚¬κ°ν˜• λͺ¨μ–‘μ˜ 검은색 색쒅이λ₯Ό μƒ‰μ’…μ΄μ˜ λ³€κ³Ό λ„ν™”μ§€μ˜ 변이 ν‰ν–‰ν•˜λ„λ‘ 뢙인닀. μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ 색쒅이λ₯Ό ν•œ μž₯ λ˜λŠ” μ—¬λŸ¬ μž₯ 뢙인 ν›„ 색쒅이가 뢙은 검은 μ˜μ—­μ˜ 넓이λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.
색쒅이
그림 좜처: https://www.acmicpc.net/problem/2563

예λ₯Ό λ“€μ–΄ 흰색 도화지 μœ„μ— μ„Έ μž₯의 검은색 색쒅이λ₯Ό κ·Έλ¦Όκ³Ό 같은 λͺ¨μ–‘μœΌλ‘œ λΆ™μ˜€λ‹€λ©΄ 검은색 μ˜μ—­μ˜ λ„“μ΄λŠ” 260이 λœλ‹€.

🐾 풀이 방법

맀우 λ‹¨μˆœν•˜κ²Œ, 2*2 μƒ‰μ’…μ΄μ˜ 넓이λ₯Ό κ³„μ‚°ν•œλ‹€κ³  μƒκ°ν•΄λ³΄μž.
μ΄λ•Œ, μƒ‰μ’…μ΄μ˜ λ„“μ΄λŠ” 2*2 = 4둜 계산할 μˆ˜λ„ 있고, 색쒅이λ₯Ό λͺ¨λ‘ 1*1짜리 칸으둜 λ‚˜λˆ„μ–΄ 각각의 넓이인 1+1+1+1 = 4 둜 계산할 수 μžˆλ‹€. μ½”λ“œλ‘œ κ΅¬ν˜„ν•  λ•Œμ—” μ•„λž˜ 방법을 μ΄μš©ν•  것이닀.

paperλΌλŠ” 101*101 배열을 μ„ μ–Έν•˜κ³ , μƒ‰μ’…μ΄μ˜ μ™Όμͺ½ ν•˜λ‹¨ 포인트의 μœ„μΉ˜κ°€ 주어지면 κ·Έ ν¬μΈνŠΈλ‘œλΆ€ν„° x+10, y+10 (μƒ‰μ’…μ΄μ˜ 길이가 10μ΄λ―€λ‘œ)λ§ŒνΌμ„ 1둜 μ±„μš΄λ‹€. 이후 paperμ—μ„œ 1인 곳의 합을 κ΅¬ν•˜λ©΄, 겹친 뢀뢄도 문제 없이 전체 μƒ‰μ’…μ΄μ˜ 넓이가 κ³„μ‚°λœλ‹€.

λͺ¨λ“  ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 성곡 μ½”λ“œ

paper = [[0] * 101 for _ in range(101)]
n = int(input())
area = 0
for i in range(n):
    x, y = map(int, input().split())
    for j in range(y, y+10):
        for k in range(x, x+10):
            paper[j][k] = 1


for row in paper:
    if 1 in row:
        area += sum(row)

print(area)