티스토리 뷰

반응형

문제의 저작권은 SW Expert Academy에 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
TC= int(input())
for tc in range(1, TC+1):
    N = int(input())
    data= [[0]*10 for _ in range(10)]
    for _ in range(N):
        r1, c1, r2, c2, color = map(int, input().split())
        for i in range(r1, r2+1):
            for j in range(c1, c2+1):
                data[i][j] |= color
 
    cnt = 0
    for p in range(10):
        for q in range(10):
            if data[p][q] == 0b11:
                cnt += 1
 
    print(f'#{tc} {cnt}')
cs

 

조건을 보면 같은 색이 겹치지 않는 다고 나와있다. 

범위만 주의해서 color를 그냥 더해주면 답이나온다.

하지만 나는 같은 색이 겹쳐서 주어진 경우가 있다고 가정하고 풀었다.

이진법 풀이가 어려우신 분들은 다른 풀이를 보는 것을 추천한다.

 

data[i][j] |= color

이부분(|)은 이진법으로 변경했을 때 1인 부분이 있으면 1로 바꾼다.

date / color  / 변경된 data값

00  |=  01         01

00  |=  10         10

00  |=  11         11

10  |=  01         11

00  |=  11         11

이런식으로 하면 중복이 되어도 계산가능하다.

 

 if data[p][q] == 0b11:

0b11은 2의 이진법이다.

이부분은 전체를 순환했을 때 data의 값이 2인가를 판단 하는 거다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함