백준 2563 (색종이) - Python

김종언·2024년 1월 14일
0

백준

목록 보기
5/18

문제

내가 생각한 해결방법:
문제에서 색종이의 정확한 위치가 아니라 도화지와의 거리를 제시해준다. 거리의 차를 통해서 색종이끼리 겹치는 거리가 얼마인지 구한다음, (10x10)x3 = 300인 넓이에서 겹치는 만큼 빼주길 바라는거겠지? 직접 손으로 그리면서 풀어보자.

좀 더 자세하게는, strage라는 배열을 만들어서 각각의 도화지의 x,y값을 담은 배열을 넣어주겠다. 그리고 index에 따라 작은 x 큰 x, 작은 y 큰 y의 관계를 생각해 겹치는 색종이의 넓이를 구하겠다.

풀이

결론적으로는 위에 생각한 해결방법대로 하지 못했다.
2차원 배열 안에서 x, y값 전부를 왔다갔다 하며 크기를 비교해야 하기에 구현하는데에 어려움을 겪었다. 가능은 하겠지만 방법을 알아볼수록 이 문제에서 요구하는 방향과는 멀어짐을 느꼈다.
다른 해결방법이 도저히 떠오르지 않아 힌트를 좀 얻었다. 흰 도화지 자체를 0으로 채워진 이차원 배열이라 생각하라는 힌트였다.

n = int(input())

white_list = [[0 for _ in range(100)] for _ in range(100)]

for i in range(n):
    x, y = map(int, input().split())
    for j in range(x, x + 10):
        for k in range(y, y + 10):
            white_list[j][k] = 1

print(sum(sum(white_list, [])))

아이디어를 얻고 나니 구현하는 데에는 문제없었다. x,y 좌표를 얻고 가로 세로 길이가 10이니 10을 더해줘서 해당하는 요소에 1을 저장하고 더한값을 출력했다.

print(sum(sum(white_list, [])))

여기서 sum 함수의 사용법이 포인트다. sum(iterable, /)에서 /자리는 어떤 공간에 요소들을 하나로 이어붙일지 결정한다. 위에서는 []을 사용했다. 즉 이차원 배열의 모든 요소를 뽑아 일차원으로 묶었다. 이는 내가 자바스크립트에서 자주 사용했던 flat() 메소드와 같은 역할을 한다. 이차원 배열의 인덱스를 더 쉽게 조작하기위해 사용할 수 있다.

코멘트.

벌써 난항을 겪다니 역시 난 애송이다. 아직 갈 길이 멀다. 가자.

profile
나는 김종언이다.

0개의 댓글