4836. [파이썬 S/W 문제해결 기본] 2일차 - 색칠하기 D2
[파이썬 S/W 문제해결 기본] 2일차
2021.04.21 - [Algorithm] - SWEA 4836 색칠하기 (python)
2021.04.19 - [Algorithm] - SWEA 4837 부분집합의 합 (python)
2021.04.21 - [Algorithm] - SWEA 4839 이진탐색 (python)
2021.04.21 - [Algorithm] - SWEA 4843 특별한 정렬 (python)
문제
그림과 같이 인덱스가 있는 10x10 격자에 빨간색과 파란색을 칠하려고 한다.
N개의 영역에 대해 왼쪽 위와 오른쪽 아래 모서리 인덱스, 칠할 색상이 주어질 때, 칠이 끝난 후 색이 겹쳐 보라색이 된 칸 수를 구하는 프로그램을 만드시오.
주어진 정보에서 같은 색인 영역은 겹치지 않는다.
예를 들어 2개의 색칠 영역을 갖는 위 그림에 대한 색칠 정보이다.
2
2 2 4 4 1 ( [2,2] 부터 [4,4] 까지 color 1 (빨강) 으로 칠한다 )
3 3 6 6 2 ( [3,3] 부터 [6,6] 까지 color 2 (파랑) 으로 칠한다 )
[입력]
첫 줄에 테스트 케이스 개수 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())
def purple(N,numbers):
# 같은색 영역은 겹치지 않는다는 조건이 있어서 단순히 색이 있는곳은 1을 더할예정
# 이런 조건이 없다면 다시 고려해봐야 함
# 배경 0으로 지정(초기값)
# 이중 리스트 생성할때 얕은 복사를 피하기 위해서 * 으로 표현하는 것이 아닌 for 로 생성해야 한다.
back_ground = [[0 for _ in range(10)]for _ in range(10)]
# N개의 사각형에 대한 반복문
for i in range(N):
# 시작점 끝점 길이 지정(x,y 범위 지정
x_range = range(numbers[i][0], numbers[i][2]+1)
y_range = range(numbers[i][1], numbers[i][3]+1)
# 좌표에 대입
for j in x_range:
for k in y_range:
back_ground[j][k] = 1 + back_ground[j][k]
# 카운트 초기값
count = 0
# 기존 배경에서 두개의 색이 칠해진 곳 찾기
for i in range(10):
for j in range(10):
if back_ground[i][j] == 2:
count += 1
return count
for tc in range(1, T+1):
N = int(input())
numbers = []
for _ in range(N):
numbers.append(list(map(int, input().split())))
result = purple(N, numbers)
print("#{} {}".format(tc, result))
'Algorithm' 카테고리의 다른 글
SWEA 5209 최소 생산 비용 (python) (0) | 2021.04.21 |
---|---|
SWEA 5208 전기버스2 (python) (0) | 2021.04.21 |
SWEA 4843 특별한 정렬 (python) (0) | 2021.04.21 |
SWEA 5207 이진탐색 (python) (0) | 2021.04.21 |
SWEA 4839 이진탐색 (python) (0) | 2021.04.21 |