코딩복습장

[백준] 2563번(python 파이썬) - 색종이 본문

코딩 테스트/python(파이썬)

[백준] 2563번(python 파이썬) - 색종이

코복장 2023. 3. 3. 22:56
728x90

문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.

입력

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다

출력

첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

 

 

 

 

풀이


최근에 난이도가 높은 문제만 풀다보니 머리가 복잡해졌다 ㅠㅠ

 

그래서 오늘은 상대적으로 난이도가 쉬운 문제를 풀어보았다.

 

이 문제는 처음에 이게 실버5..? 라는 생각을 했는데

 

문제를 쭉 읽다가 색종이의 크기 10, 도화지의 크기가 100이하라는 설명을 읽고 납득을 했다ㅋㅋ

 

도화지의 크기가 100이하인데 1초를 준다? -> 전부 돌려도 된다!

 

시간복잡도는 전부 돌렸을 경우 색종이 100번받기  -> O(n)

for문 두개를 시간복잡도에 곱하지 않은 이유는 색종이의 크기가 10으로 정해져있기 때문

10*10은 정수이므로 시간복잡도에서 지워진다.

 

문제 풀이과정은 다음과 같다.

 

1. 색종이의 개수를 받기

 

2. 2차원 list 0으로 채워서 초기화 크기 (101*101)

 

3. 받은 색종이 왼쪽모서리좌표를 사용 -> 1로 10*10정사각형 채워주기(이중 for문)

 

4. 2차원 list를 전부합해서 출력 -> 답

 

이상으로 오늘의 포스팅을 마치겠다 !!

 

 

 

 

 

 

 

구현코드


from sys import stdin
input = stdin.readline

n = int(input())
arr = [[0] * 101 for _ in range(101)] # 도화지의 크기가 100이하

for _ in range(n): # 색종이를 1로 채워준다
    a, b = map(int, input().split())
    for i in range(a, a+10):
        for j in range(b, b+10):
            arr[i][j] = 1

res = 0
for i in arr: # 모두더한다
    res += sum(i)

print(res) # 정답출력
728x90
Comments