Python/online judge

백준 [2563.색종이] | Python

구름솜:D 2023. 11. 17. 17:03
728x90

✏️ 문제

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

 

2563번: 색종이

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

www.acmicpc.net

 

✏️ 풀이방법

1. 가로1,가로2=가로1+10, 세로1,세로2=세로1+10 를 하나의 배열에 놓고 [가로2-가로1,세로2-세로1] 을 계산한 리스트를 두고 각각의 색종이의 길이 안에 겹치는 범위가 있는지 비교

2. 겹치는 범위가 있다면 전체 넓이 - 겹치는 부분의 넓이

-> 비교를 너무 많이 연산해야할 것 같은 생각이 들었다. 그래서 다른 방법으로 접근했다.

 

1. 0으로 초기화된 배열 선언

2. 색종이의 넓이만큼 1로 변경

3. 색종이의 수만큼 2번의 과정 반복

3. 1로 되어있는 곳 count

 

 

📌 코드

n = int(input())
page = []
length = []
height = []
result = 0
for i in range(n):
    page.append(list(map(int,input().split())))
    length.append(page[i][0])
    height.append(page[i][1])
    col,row = max(length), max(height)
graph =[[0 for i in range(col+10)] for j in range(row+10)]

# 색종이의 넓이만큼 1로 바꾸기
for i in range(n):
    x,y = page[i]
    for l in range(10):
        for h in range(10):
            graph[y+h-1][x+l-1] = 1

# 그래프에서 1의 값 count
for i in range(row+10):
    for j in range(col+10):
        if graph[i][j] ==1:
            result +=1

print(result)

 

📌 결과

#입력
3
3 7
15 7
5 2

#출력
260

 

 

🤔 시행착오

n = int(input())
page = []
# length = 0
# height = 0 #AttributeError: 'int' object has no attribute 'append'
# length = ""
# height = "" #AttributeError: 'str' object has no attribute 'append'
length = []
height = []
result = 0
for i in range(n):
    page.append(list(map(int,input().split())))
    # length.append(max(page[i][0]))
    # height.append(max(page[i][1]))
    length.append(page[i][0])
    height.append(page[i][1])
    col,row = max(length), max(height)
graph =[[0 for i in range(col+10)] for j in range(row+10)]

for i in range(n):
    x,y = page[i]
    for l in range(10):
        for h in range(10):
            graph[y+h-1][x+l-1] = 1

for i in range(row+10):
    for j in range(col+10):
        if graph[i][j] ==1:
            result +=1

print(result)

- 변수를 숫자형과 문자열로 선언하고 리스트 메소드인  append를 사용해서 오류가 발생했다 

- 색종이의 넓이를 1로 바꾸는 과정에서 이미 1로 바꾼 2차원 리스트의 위치는 건너뛰는 조건문을 추가하려고 했는데 어처피 대입연산자로 바꾸는거라 기존의 값이 1이여도 1로 대입되어 변경되는것이 없기 때문에 조건문을 추가로 작성할 필요가 없다