본문 바로가기
Algorithm Problem Solving/SW Expert Academy

[Python] SW Expert Academy - 4836. 색칠하기

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 7. 24.
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
반응형

댓글