[백준] 2563: 색종이 - 파이썬[python]

다인·2024년 8월 12일

백준

목록 보기
29/112
post-thumbnail

어떻게 풀까 고민하다가.. 자바로 풀었었던 방식을 기억해냈고 그걸 파이썬으로 풀어보았다. 아이디어가 재밌어서 이해한 걸 글로 풀어내려고 한당

풀이

num = int(input())
area = [[False for _ in range(100)] for _ in range (100)]
sum = 0

for _ in range(num):
    x, y = map(int, input().split())
    for i in range(x, x+10):
        for j in range(y, y+10):
            if area[i][j] == False:
                area[i][j] = True
                sum += 1

print(sum)
  • 먼저 100 * 100의 boolean 형식의 2차원 배열을 선언한다.
  • 핵심 아이디어는 입력에 적힌 (x,y) 점을 기준으로 위 아래 모두 10개의 점을 찍는다고 생각하는 것이다. 그리고 그 점을 모두 세어서 1씩 더해주면 우리가 원하는 넓이가 나온다!
  • 그래서 입력받은 x, y 점부터 10개씩만 False를 True로 바꾸어준다.
  • 여기서 포인트는 바로 sum을 더한다는 것이다! 나중에 for문을 돌아서 또 접근하면 결과 시간이 더 나오지 않을까? 그리고 겹치는 부분은 제외해야 하니까 False였을 때만 더한다.
  • 조심할 점은, 3+10=13이라고 해서 절대 3부터 13까지 모두 True로 바꾸면 안된다! 한 변의 길이는 10이니까 한 줄에 딱 10개씩만 True로 바꾸어야 한다.
  • 그리고 굳이 x-1부터 x+9까지로 안한 이유는 입력받을 수 있는 가장 멀리 있는 점은 '90 90'인데 '90 90'을 입력받더라도 90~99까지 점을 찍으면 돼서 딱 인덱스 범위에서 벗어나지 않기 때문이다!

결과

0개의 댓글