4836 - 색칠하기

박재현·2022년 2월 15일
0

알고리즘 부수기

목록 보기
19/43
post-thumbnail

문제 설명

링크

문제 풀이

  1. 빨간색 영역을 담아줄 2차원 배열 red_arr과 파란색 영역을 담아줄 2차원 배열 blue_arr을 생성한다.

  2. 각각의 색에 맞춰서 해당 배열에 x좌표 y좌표에 해당하는 값을 1로 바꿔준다.

  3. 10 * 10 이차원 배열을 탐색하면서 red_arr과 blue_arr에 1이 동시에 들어가있는 경우 result++ 한다.

문제 조건에 주어진 같은 색의 영역은 겹치지 않는다라는 조건을 보지 못했다.
같은 색의 영역이 겹치지 않으면 색에 구분없이 +1을 해준다.
탐색할 때 원소가 2인 경우에 result++을 해주면 구할 수 있다.

코드

T = int(input())
for tc in range(1, T+1):
    N = int(input())
    red_arr = [[0]*10 for _ in range(10)]
    blue_arr = [[0]*10 for _ in range(10)]
    result = 0

    for n in range(N):
        temp_arr = list(map(int, input().split()))
        if temp_arr[4] == 1:
            for i in range(temp_arr[0], temp_arr[2] + 1):
                for j in range(temp_arr[1], temp_arr[3] + 1):
                    if red_arr[i][j] == 0:
                        red_arr[i][j] = 1
        if temp_arr[4] == 2:
            for i in range(temp_arr[0], temp_arr[2] + 1):
                for j in range(temp_arr[1], temp_arr[3] + 1):
                    if blue_arr[i][j] == 0:
                        blue_arr[i][j] = 1
    for i in range(10):
        for j in range(10):
            if red_arr[i][j] == blue_arr[i][j] == 1:
                result += 1
    print(f'#{tc} {result}')
profile
공동의 성장을 추구하는 개발자

0개의 댓글