[백준] 2563번 색종이 파이썬 풀이

Dev_ch·2023년 3월 16일
0

문제를 푸는 알고리즘만 알면 사실은 상당히 간단한 문제인데, 해당 알고리즘을 어떻게 설계할까 고민을 하는 과정이 있어 적어두면 좋을 것 같아 작성하게 되었다.

Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2007 > 초등부 2번문제 인데 요즘 초등학생은 똑똑한 것 같다(...)

해당 문제를 풀기위해선 도화지의 크기인 가로 세로가 100인 점에 주목을 하자.

이차원 배열로 100 * 100 인 도화지를 그린다고 가정한다면,

array = [[0] * 100 for _ in range(100)]

위와 같이 이차원 배열로 가로와 세로의 크기가 100인 도화지를 그려낼 수 있다. 그리고 이 도화지에 입력받은 검은색 색종이의 가로 * 세로 크기 만큼 그려주면 된다.

여기서 그려준다는 것은 선언할때 넣어둔 배열의 값은 전부 0 이기 때문에 0이 아닌 수로 각각의 칸마다 그려 주면된다.

for _ in range(n):
    a, b = map(int,input().split())
    for i in range(a, a + 10):
        for j in range(b, b + 10):
            array[i][j] = 1

입력받은 검은색 색종이의 수만큼 loop를 돌면서 왼쪽 변과 아래쪽 변의 떨어진 길이를 입력받고, 입력받은 변의 길이에 맞춰 loop를 돌려준다.

(문제에서 검은색 색종이는 10 * 10의 크기로 고정되어있기에 만약 왼쪽으로부터 3 만큼 떨어진 색종이의 가로 변의 길이는 range(3, 3+10)이 된다고 볼 수 있다, 이는 세로 변의 길이도 동일하다)

전체 코드

n = int(input())
array = [[0] * 100 for _ in range(100)]

for _ in range(n):
    a, b = map(int,input().split())
    for i in range(a, a + 10):
        for j in range(b, b + 10):
            array[i][j] = 1
            
cnt = 0

for i in range(100):
    cnt += array[i].count(1)

print(cnt)

세로 배열을 loop로 돌면서 행마다 검사를 통해 cnt를 누적해주고 print 하면 끄읏-!

profile
내가 몰입하는 과정을 담은 곳

0개의 댓글