Algorithm

Baekjoon 백준 알고리즘 - 색종이( 2563 )

jssvs 2024. 2. 18. 17:02
반응형

1. 문제 소개

 

2. 코드


def set_test_case():
    T = int(input())
    rectangles = []
    for i in range(T):
        in_temp = input().split(" ")
        r = [int(in_temp[0]),int(in_temp[1])]
        rectangles.append(r)

    return rectangles

def solution():
    size = 10
    max_size = 100
    area = 0

    matrix = [[0 for i in range(max_size)] for j in range(max_size)]
    rectangles= set_test_case()

    # 색종이 영역 마킹
    for rectangle in rectangles:
        for j in range(rectangle[0],rectangle[0]+size):
            for k in range(rectangle[1],rectangle[1]+size):
                matrix[j][k] = 1

    # 색종이 영역 완전 탐색 = 배열 요소 1은 1X1 의 넓이로 본다.
    for i in range(max_size):
        for j in range(max_size):
            if matrix[i][j] == 1:
                area+=1

    print(area)

if __name__ == '__main__':
    solution()

3. 코멘트

  • 처음에는 색종이의 꼭지점 좌표를 이용해, 겹치는 영역 또는 빈 영역이 발생할 수 있는 경우의 룰(특징)을 정의해서 사각형을 계산해 답을 도출 하는 방법으로 고민했다. ( CCW, 컨벡스헐 알고리즘을 적용해서 풀 수 있다는 피드백) 
  • 내가 생각한 방식은 꽤 복잡하고, 주어진 조건(도화지 크기, 색종이 수 제한) 과 1초라는 제한 시간은 완전 탐색 방식으로 푸는게 간단하다는 스터디원의 풀이를 보고 나도 다시 풀었다. 
  • 방법은 간단하게 도화지 크기 (100 * 100)의 2차원 배열을 만들고, 색종이의 영역 만큼 마킹을 한 후 마킹된 원소를 넓이로 보고 답을 출력한다.
  • 오랜만에 알고리즘 스터디를 해서 너무 재밌었다. 생업 때문에 자주는 아니더라도 꾸준히 모였으면 좋겠다.
  • 이 글을 보고 알고리즘 스터디에 관심이 있는 분들은 언제든지 연락을... :) 
 
반응형