[SWEA] 4836 색칠하기

Yujin Jo·2022년 3월 24일
0

SWEA

목록 보기
10/22
post-thumbnail

문제 출처 : [SWEA] 4836 색칠하기
learn -> course -> programming intermediate -> list2 -> 색칠하기

문제

인덱스가 있는 10x10 격자에 빨간색과 파란색을 칠하려고 한다.

N개의 영역에 대해 왼쪽 위와 오른쪽 아래 모서리 인덱스, 칠할 색상이 주어질 때, 칠이 끝난 후 색이 겹쳐 보라색이 된 칸 수를 구하는 프로그램을 만드시오.

주어진 정보에서 같은 색인 영역은 겹치지 않는다.

입력

첫 줄에 테스트 케이스 개수 T가 주어진다. ( 1 ≤ T ≤ 50 )

다음 줄부터 테스트케이스의 첫 줄에 칠할 영역의 개수 N이 주어진다. ( 2 ≤ N ≤ 30 )

다음 줄에 왼쪽 위 모서리 인덱스 r1, c1, 오른쪽 아래 모서리 r2, c2와 색상 정보 color가 주어진다. ( 0 ≤ r1, c1, r2, c2 ≤ 9 )

color = 1 (빨강), color = 2 (파랑)

출력

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

코드

T = int(input())
for tc in range(1, T + 1):
    N = int(input())        # 영역의 개수
    color_list = [[0] * 10 for _ in range(10)]      # 10X10의 2차원 리스트 생성
    result = 0      # 최종 결과값을 저장할 변수 초기화

    # 영역의 수만큼 반복
    for i in range(N):
        x1, y1, x2, y2, color = map(int, input().split())       # x,y의 좌표와 색을 각각 받아옴
        for j in range(x1, x2 + 1):         # x좌표 간 사이 거리만큼 반복
            for k in range(y1, y2 + 1):     # y좌표 간 사이 거리만큼 반복
                if color == 1:
                    color_list[j][k] += 1   # red는 1 추가
                else:
                    color_list[j][k] += 2   # blue는 2 추가

    # 2차원 리스트를 순회하면서 보라색을 의미하는 3의 위치를 찾음
    for i in range(10):
        for j in range(10):
            # 빨강과 파랑이 더해진 값인 3이 존재하는 만큼 result에 1씩 더해줌
            if color_list[i][j] == 3:
                result += 1

    print('#{} {}'.format(tc, result))

풀이 방법

빨강색으로 칠해진 영역과 파랑색으로 칠해진 영역을 구분하기 위해서 어떤 방법을 쓰면 좋을지 생각하다가 우선 문제에서 주어진 빨강색 영역에 대해서 가로길이는 x좌표 간의 차, 세로길이는 y좌표 간의 차만큼 반복하면서 해당 영역을 1씩 더해주었다. 파랑색 영역도 마찬가지로 해당 좌표 범위를 돌면서 2를 더해주었다.
빨강색과 파랑색을 모두 표시해준 후 다시 전체 영역을 돌면서 보라색을 의미하는 숫자 3이 나올 경우 result 변수에 1을 더해주면서 총 보라색 영역을 찾았다.

profile
일단 해보자

0개의 댓글