[백준_Python] 2563번: 색종이

Jason·2023년 8월 1일
post-thumbnail

1. 문제

2. 문제 해석

1) 첫인상

넓이에만 집착했다. 그렇기에 각각의 길이를 구하여 겹치는 부분을 찾아내는 방법을 생각하였다. 답이 안나왔다. 반나절이 걸려도 방법이 떠오르지 않아 결국 구글에 '백준 2563 파이썬'을 검색했다.

2) 다른 풀이 해석

다른 사람들은 말 그대로 2차원 배열에 집중해서 문제를 해결했다. 하나의 좋은 아이디어가 자원을 최소화 할 수 있음을 깨달았다.

우선 0으로만 이루어진 100 x 100 크기의 2차원 배열을 만들어
주어지는 행열 값 포함 오른쪽 10개, 위로 10개의 값을 1로 변환하였다.
이런 방식으로 접근하게 되면 겹쳐지는 것을 고려할 필요가 없어진다.
원래 1이었던 값이 1이 되기 때문이다.

그리고 2차원 배열에서 1의 개수를 세어서 그 값만을 출력한다.

3. 문제 풀이

# 숫자 입력
N = int(input())
# 도화지 2차원 배열화
board_range = [[0]*100 for _ in range(100)]
# 첫줄에 주어진 숫자만큼 반복
for _ in range(N):
    col, row = map(int, input().split()) 
    # 10개가 1로 변환되어야 한다
    for i in range(row, row + 10):
        for j in range(col, col+10):
            board_range[i][j] = 1  

# 면적 전역 변수 설정 
area = 0
for row_check in range(100):
    area += board_range[row_check].count(1)

print(area)

4. 배운점

항상 딜레마가 있다. 과연 어느 정도로 고민을 해야 하는가.
고민을 해서 문제가 해결이 되면 참 다행이다.
그런데 해결이 안되면?
시간은 시간대로 흘러가고 아무것도 얻어가는 것이 없다면?

이런 경우를 방지하기 위해서 최대 고민 시간을 설정하는 것이 좋다.

우선 2시간으로 잡아 놓고 고민하자
그리고 해결이 된다면 땡큐고
안되면 다른 사람들의 풀이를 통해 배우자.

profile
개발과 데이터에 관심이 많은 서버 개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기