티스토리 뷰

반응형

😅 문제 

https://swexpertacademy.com/main/

 

SW Expert Academy

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

swexpertacademy.com

🤔 문제 상황 

- 여러가지 색칠을 하는데 겹치는 부분의 영역을 구하는 문제이다.

 

🧐 해결 전략 

- 색칠할 곳을 받을때마다 해당위치에 1을 더해주어 모든 색칠 후 색깔의 수를 요소로 가지고 있는 인덱스를 찾는다. 

🎰 코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
= int(input()) # testcase
result = []
for _ in range(T):
    board = [[0 for i in range(10)] for j in range(10)] # 색칠할 판 초기화
    N = int(input()) # 칠할 횟수
    ctype = [[[] for i in range(10)] for j in range(10)] # 색칠된 색의 종류 
    mxlen = 0 # 색깔 최대 개수 저장
    for i in range(N):
        x1, y1, x2, y2, c = map(int, input().split()) # (x1, y1), (x2, y2) c 색 종류
        for x in range(x1, x2+1):
            for y in range(y1, y2+1):
                if c not in ctype[x][y] : # 색칠이 되어있지 않을 경우에만 색칠
                    board[x][y] += c
                    ctype[x][y].append(c)
                    if len(ctype[x][y]) > mxlen :
                        mxlen = len(ctype[x][y])
    ck = mxlen*(mxlen+1)//2 # 색 종류의 합
    rlist = [(i,j) for i in range(10for j in range(10if board[i][j] == ck]
    result.append(len(rlist))
for i in range(T):
    print("#{} {}".format(i+1, result[i]))
 
cs

🧙‍♂️ 해설

100칸을 하나씩 파악하며 색칠을 해 나가는데 어떤 색으로 색칠을 하면 그것을 기록할 위치를 저장하기 위해 3차원 배열을 썼다(ctype).

📈 새로 학습한 것 & 실수 

- 2차원 배열을 선언할 때 [[0]*10]*10을 했더니 진짜 이상하게도 0행 0열 요소만 바꿔도 모든행 0열 요소에 다 적용된다.. 아마 곱하기를 하면 주소가 복사되는 경험이라 똑같은 주소가 여러개 생성(?)되는 것이 아닐까 예상된다.. [0 for i ..] 의 형태로 초기화 하는 습관을 들여야한다.

반응형

'알고리즘 학습 > 삼성 SWEA' 카테고리의 다른 글

SWEA - 구간합 [Python]  (0) 2020.08.24
SWEA - 숫자 카드 [Python]  (0) 2020.08.24
SWEA - 전기버스 [Python]  (0) 2020.08.24
SWEA - 회문[Python]  (0) 2020.05.02
SWEA - 글자수[Python]  (0) 2020.05.02
댓글