728x90
반응형
SW Expert Academy 4836번 색칠하기 문제는 10x10 격자에 빨간색과 파란색을 칠하는데 N개의 영역에 대해 왼쪽 위와 오른쪽 아래 모서리 인덱스, 칠할 색상이 주어질 때, 색이 겹쳐 보라색이 된 칸 수를 구하는 문제이다. 리스트 자료구조에 관한 문제로 난이도는 D2다.
SW Expert Academy 4836번 색칠하기 문제 정보
자료구조 분류
- 리스트 (2차원)
난이도
- D2
색칠하기 문제 요약
- 색을 칠할 영역의 개수 N의 범위는 2 이상 30 이하이다.
- 왼쪽 위 모서리 인덱스, 오른쪽 아래 모서리 인덱스의 범위는 0~9이다.
- 색상 정보 color는 1=빨강, 2=파랑이다.
- 같은 색인 영역은 겹치지 않는다.
문제 풀이 과정
- 10X10 격자를 크기가 10*10이고 값이 0인 2차원 리스트 canvas로 초기화한다.
- color는 0=빈칸, 1=빨강, 2=파랑, 3=보라로 정의한다.
- 색칠 정보를 참고하여 현재 색칠할 칸이 빈칸이면 자신의 색을 칠하고, 현재 색칠할 칸이 보라색이 아니고 자신의 색이 아니면 색이 겹치는 것이므로 보라색이 된다.
- 테스트 케이스 번호, 보라색 칸 수를 출력한다.
코드 및 설명
- canvas [][] - 10X10 격자의 색상 정보를 담은 2차원 리스트
- cInfo [][] - N개의 영역에 대한 색칠 정보를 담은 2차원 리스트 (왼쪽 위와 오른쪽 아래 모서리 인덱스, 칠할 색상)
- cnt - 보라색 칸 수
T = int(input())
for tc in range(T):
cnt = 0
canvas = [[0]*10 for _ in range(10)]
N = int(input())
cInfo = [[0]*5 for _ in range(N)]
for n in range(N):
cInfo[n] = list(map(int, input().split()))
for coloring in cInfo:
for row in range(coloring[0], coloring[2]+1):
for column in range(coloring[1], coloring[3]+1):
if canvas[row][column] == 0:
canvas[row][column] = coloring[4]
elif canvas[row][column] != 3 and canvas[row][column] != coloring[4]:
canvas[row][column] = 3
cnt += 1
print("#%d %d"%(tc+1, cnt))
SW Expert Academy 4836번 색칠하기 문제는 2차원 리스트 자료구조에 관한 문제이며 파이썬을 사용하였다. 난이도는 D2여서 해결법은 금방 생각해냈으나 2차원 리스트라 그런지 구현하는 데에 시간이 꽤 걸렸다.
728x90
반응형
'Algorithm Problem Solving > SW Expert Academy' 카테고리의 다른 글
[Python] SW Expert Academy - 4839. 이진탐색 (0) | 2021.07.25 |
---|---|
[Python] SW Expert Academy - 4837. 부분집합의 합 (0) | 2021.07.24 |
[Python] SW Expert Academy - 4831. 전기버스 (0) | 2021.07.23 |
[Python] SW Expert Academy - 4828. min max (0) | 2021.07.22 |
[Python] SW Expert Academy - 4835. 구간합 (1) | 2021.07.21 |
댓글