코딩테스트/SWExpertAcademy

색칠하기 Python(SW Expert Academy)

멍토 2020. 2. 27.

난이도 : D2

문제번호 : 4836

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVF-WqqecDFAWg#

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

그림과 같이 인덱스가 있는 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는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

예시

입력 출력
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 색칠하기
= 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+1len(result)))

댓글

💲 광고입니다.