본문 바로가기
백준

[백준] 2563번 : 색종이 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 10. 10.
728x90
반응형

 

 

2563번: 색종이

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 색종이를 붙이면서 겹치는 부분으로 고려하여 전체 색종이가 붙여진 면적을 계산하는 문제이다.

색종이를 붙일 도화지의 면적을 가로, 세로 100씩 생각하여 2차원 배열로 만든다.

이후 색종이를 붙일 때마다 붙여지는 면적을 1로 바꾼다.

이때 겹치는 부분이 생겨도 그대로 1로만 바꾸기 때문에 겹치는 부분에 대한 계산을 따로 하지 않아도 된다.

마지막에 0에서 1로 바뀐 면적만 계산해 주면 쉽게 결과를 구할 수 있다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 도화지의 면적을 2차원 배열로 하여 면적  1당 1칸의 공간을 만들어 0으로 초기화한다. paper = list(list(0 for _ in range(100)) for _ in range(100))
  3. 전체 붙일 색종이의 수를 입력받는다. T = int(sys.stdin.readline())
  4. 색종이의 수만큼 반복하며 for _ in range(T)
  5. 색종이를 붙인 좌표를 입력받는다. x, y = map(int, sys.stdin.readline().split())
  6. 각 색종이는 각 변이 10인 정사각형 모양이므로 각 변을 10칸씩 이동하며 for i in range(10): for j in range(10)
  7. 색종이의 면적을 1로 바꿔준다. paper[x + i][y + j] = 1
  8. 전체 색종이가 붙은 면적을 저장할 변수를 생성하고 초기화한다. answer = 0
  9. 도화지를 불러와 for i in paper
  10. 색종이가 붙은 면적의 개수를 세어 더해준다. answer += i.count(1)
  11. 최종 정답을 출력한다. print(answer)
반응형

3. 소스코드

import sys

paper = list(list(0 for _ in range(100)) for _ in range(100))

T = int(sys.stdin.readline())
for _ in range(T):
    x, y = map(int, sys.stdin.readline().split())
    for i in range(10):
        for j in range(10):
            paper[x + i][y + j] = 1
   
answer = 0            
for i in paper:
    answer += i.count(1)
    
print(answer)
728x90
반응형