난이도 : D2
문제번호 : 4836
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
그림과 같이 인덱스가 있는 10x10 격자에 빨간색과 파란색을 칠하려고 한다. |
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. ( 1 ≤ T ≤ 50 ) 다음 줄부터 테스트케이스의 첫 줄에 칠할 영역의 개수 N이 주어진다. ( 2 ≤ N ≤ 30 ) 다음 줄에 왼쪽 위 모서리 인덱스 r1, c1, 오른쪽 아래 모서리 r2, c2와 색상 정보 color가 주어진다. ( 0 ≤ r1, c1, r2, c2 ≤ 9 ) |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다. |
예시
입력 | 출력 |
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 |
#1 4 #2 5 #3 7 |
2. 문제풀이
파이썬 Intermediate 2일차 문제입니다. 색칠하기 문제인데요 중복되는 위치의 범위를 찾는 문제입니다. 셋의 집합 특성을 이용하여 풀었는데요 빨간색의 좌표와 파란색의 좌표를 가지고 있는 set을 2개 만들고 각각 좌표를 칠한후에 교집합을 이용하여 중복되는 부분만을 뽑아냅니다. 교집합의 개수만큼 남은 부분이 갯수가 됩니다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#D2 4836 색칠하기
T = int(input())
for t in range(T):
case = int(input())
#색상 1, 2의 위치를 저장하는 리스트, 내부값은 셋이다.
position = [set({}), set({})]
#케이스만큼 반복
for i in range(case):
x1, y1, x2, y2, color = map(int, input().split())
#x, y를 돌면서 set에 넣는다.
for a in range(x1, x2+1):
for b in range(y1, y2+1):
position[color-1].add((a, b))
#교집합을 이용하여 겹치는 부분만 꺼낸다.
result = position[0] & position[1]
#겹치는 만큼 출력
print('#{} {}'.format(t+1, len(result)))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
이진탐색 Python(SW Expert Academy) (0) | 2020.02.29 |
---|---|
부분 집합의 합 Python(SW Expert Academy) (0) | 2020.02.28 |
min, max Python(SW Expert Academy) (0) | 2020.02.26 |
구간합 Python(SW Expert Academy) (1) | 2020.02.25 |
숫자카드 Python(SW Expert Academy) (0) | 2020.02.24 |
댓글