728x90
반응형
SW Expert Academy에서 학습용으로 문제를 가져왔습니다. 문제가 될 시 수정, 삭제하겠습니다.
https://swexpertacademy.com/main/main.do
문제 :
그림과 같이 인덱스가 있는 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는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
input
3
2
2 2 4 4 1
3 3 6 6 2
3
1 2 3 3 1
3 6 6 8 1
2 3 5 6 2
3
1 4 8 5 1
1 8 3 9 1
3 2 5 8 2
output
#1 4
#2 5
#3 7
code
Test_case=int(input())
for t in range(1,Test_case+1):
area=[[0 for _ in range(10)] for _ in range(10)] #원소가 0인 10x10행렬 만들기
count=0 #겹치는 칸의 개수
N=int(input())
for i in range(1,N+1):
row1,col1,row2,col2,color=map(int,input().split())
for row in range(row1,row2+1): #행의 시작과 끝까지
for col in range(col1,col2+1):
if color==1: #만약 색이 빨간색이면
if area[row][col]==0: #만약 색이 아무것도 없는 빈칸이면
area[row][col]=1 #빨간색으로 칠하고
elif area[row][col]==2: #만약 색이 파란색이면
area[row][col]=3 #파란색을 보라색으로 칠해라.
count+=1 #그런다음 겹치는 칸의 개수를 세어주기 위해 +1을 해준다.
else: #만약 색이 파란색이면
if area[row][col]==0: #만약 색이 아무것도 없는 빈칸이면
area[row][col]=2 #파란색으로 칠해라.
elif area[row][col]==1: #만약 색이 빨간색이면
area[row][col]=3 #빨간색을 보라색으로 칠해라.
count+=1 #그런다음 겹치는 칸의 개수를 세어주기 위해 +1을 해준다.
print("#{} {}".format(t,count))
문제를 흐름의 순서에 따라 정리해봅시다.
1.원소가 0인 10x10격자 행렬(area 변수로 지정)을 리스트의 내포기능으로 만들어 줍니다. 그 후 문제에서 요구하는 겹치는 칸의 개수인 count라는 변수를 만들어 줍니다.
2.입력받는 순서에 맞게 첫번째 행렬인 (row1,col1), 두번째 행렬인 (row2,col3), color(문제에서 지정한대로 color=1이면 빨간색, color=2이면 파란색을 의미)를 사용자로부터 입력받을 수 있도록 해줍니다.
3.행과 열을 이중 for문으로 크게 두가지로 빨간색 행렬일때와 파란색행렬일 때로 나눠줍니다. 그 후 area[row][col](=>리스트의 슬라이싱)가 빈칸일때, 파란색일때, 빨간색일때로 구별해줘서 만약 빨간색으로 칠하려는데 이미 파란색이면 보라색, 파란색으로 칠하려는데 빨간색이면 보라색일때의 칸 수를 따로 세어줍니다.
4.마지막으로 테스트케이스의 t와 보라색인 부분을 세어준 count를 출력하면 끝입니다.
반응형
'Programming > SWEA' 카테고리의 다른 글
[SWEA 4839].[파이썬 S/W 문제해결 기본] 2일차 - 이진탐색 (0) | 2021.08.02 |
---|---|
[SWEA 4837].[파이썬 S/W 문제해결 기본] 2일차 - 부분집합의 합 (0) | 2021.08.01 |
[SWEA 4835].[파이썬 S/W 문제해결 기본] 1일차 - 구간합 (1) | 2021.07.31 |
[SWEA 4834].[파이썬 S/W 문제해결 기본] 1일차 - 숫자 카드 (0) | 2021.07.31 |
[SWEA 4831].[파이썬 S/W 문제해결 기본] 1일차 - 전기버스 (0) | 2021.07.30 |