공부하기/백준

[Python] 백준 풀기 2563 - 색종이

XEV 2022. 10. 25. 20:55

파이썬 백준 2563번

브론즈1

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

 

2563번: 색종이

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변

www.acmicpc.net

 

 

 

문제 보기

2차원 배열을 활용하여 색종이로 평면을 덮는 문제

분류: 2차원 배열, 구현

 

 

 

문제 풀기

가로와 세로가 100, 100 인 2차원 배열을 만들고 모두 0으로 채워 넣는다.

그리고, 10 by 10 색종이가 위치하는 배열에 0을 1로 채워 넣는다.

 

2차원 배열로 각 색종이들의 포인트를 입력 받는다.

입력 받은 포인트를 하나씩 꺼내어 시작점에 위치 시킨다.

    for xy in point_ls:

각각 10번씩 i 와 j 에 대해 중복 for 문을 돌리고,

        for i in range(10):
            for j in range(10):

색종이 구석 포인트를 시작으로 가로 i 만큼 세로 j 만큼 1 로 채워나간다.

                paper[xy[0] + i][xy[1] + j] = 1

 

전체 100 by 100 의 2차원 배열에서 1차원 배열을 하나씩 꺼내어 1로 이루어진 전체 합을 구하고 이것을 모두 더해나간다.

    totalsum = 0
    for p in paper:
        totalsum += sum(p)

 

totalsum 을 return 하여 결과를 도출한다.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

def fnBlackArea(point_ls):
    paper = [[0] * 101 for _ in range(101)]
    
    for xy in point_ls:
        for i in range(10):
            for j in range(10):
                paper[xy[0] + i][xy[1] + j] = 1
                
    # for p in paper:         # test print
    #     print(p)
    
    totalsum = 0
    for p in paper:
        totalsum += sum(p)
    
    return totalsum


if __name__ == "__main__":
    N = int(inputdata().strip())
    point_ls = [list(map(int, inputdata().split())) for _ in range(N)]
    
    # print(point_ls)         # test print
    
    result = fnBlackArea(point_ls)
    print(result)



# 3
# 3 7
# 15 7
# 5 2

# 260

 

 

 

추가 하기

전체 종이가 20 by 20 이고

입력값이

2
3 7
5 2

로 주어졌을때의 모습.

import sys
inputdata = sys.stdin.readline

def fnBlackArea(point_ls):
    paper = [[0] * 21 for _ in range(21)]
    
    for xy in point_ls:
        for i in range(10):
            for j in range(10):
                paper[xy[0] + i][xy[1] + j] = 1
                
    for p in paper:         # test print, 0 과 1 색종이 시각화
        print(p)
    
    totalsum = 0
    for p in paper:
        totalsum += sum(p)
    
    return totalsum


if __name__ == "__main__":
    N = int(inputdata().strip())
    point_ls = [list(map(int, inputdata().split())) for _ in range(N)]
    
    print(point_ls)         # test print
    
    result = fnBlackArea(point_ls)
    print(result)



# 2
# 3 7
# 5 2

# [[3, 7], [5, 2]]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

# 160