본문 바로가기

코딩 테스트/백준

[Python] 백준 2563 색종이

 

문제 분석

  • 가로, 세로 길이가 100인 정사각형 모양의 흰 도화지
  • 가로, 세로 길이 각 10인 색종이를 여러장 붙이고 색종이가 붙은 영역 넓이 return

 

코드 설계

  • 100 x 100 도화지를 False로 초기화하고
  • 색종이의 영역을 True로 변환
  • 이때 이미 칠해진 부분은 pass
  • 최종적으로 True인 영역의 범위를 return하면 그게 색종이의 넓이가 될 것

 

정답 코드

import sys
input = sys.stdin.readline

n = int(input())
colors = []
for _ in range(n) :
    colors.append(list(map(int, input().split())))

paper = [[False] * 101 for _ in range(101)] # 좌표 0~100
cnt = 0

for r,c in colors :
    for i in range(r, r+10) :
        for j in range(c, c+10) :
            if not paper[i][j] : # false 즉, 아직 색칠되지 않았다면 True로 바꾸기
                paper[i][j] = True
                cnt += 1
print(cnt)

 

다른 사람 코드 1

N = int(input())
array = [[0] * 100 for _ in range(100)]  # 도화지 범위 초기화
for _ in range(N):  # 입력 받은 도화지 개수만큼 돈다.
    y1, x1 = map(int, input().split())  # 왼쪽아래 x,y 좌표를 받는다.

    for i in range(x1, x1 + 10):  # 세로를 돈다.
        for j in range(y1, y1 + 10):  # 가로를 돈다.
            array[i][j] = 1  # 해당 범위 값을 0에서 1로 바꿔준다.

result = 0  # 넓이를 출력할 변수
for k in range(100):  # 전체 도화지를 돌면서
    result += array[k].count(1)  # 1 개수만 세어준다

print(result)

각 행마다 1의 개수를 count ( ) 함수를 이용해 센다.