4613. 러시아 국기 같은 깃발

D4

<문제는 문제일 뿐이야..과몰입하지말자!>

problem

SW Expert Academy 러시아 국기 같은 깃발

 

SW Expert Academy

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

swexpertacademy.com


Solution

1. 흰색, 파란색, 빨간색의 범위를 반드시 나눠야하며, 이 중 변경할 곳의 최솟값을 찾는다.
2. 범위를 완전탐색을 통해 하나씩 수정할 곳을 확인하여 이 중 최솟값을 찾는다.

 

Code

def color(i,j,N):
    # White 범위 = 0 ~ i
    # Blue 범위  = i+1 ~ j
    # Red 범위   = j+1 ~ N-1
    white = blue = red = 0	# 각각의 개수(하나로 묶어도 됌)
    # white
    for k in range(i+1):
        for l in range(M):
            if flag[k][l] != 'W':	# 흰색으로 바꿔야할 곳 카운팅
                white += 1
    for k in range(i+1, j+1):
        for l in range(M):
            if flag[k][l] != 'B':	# 파란색으로 바꿔야할 곳 카운팅
                blue += 1
    for k in range(j+1, N):
        for l in range(M):
            if flag[k][l] != 'R':	# 빨간색으로 바꿔야할 곳 카운팅
                red += 1
    return white + blue + red	# 카운팅 총합
 
 
for test_case in range(1, int(input())+1):
    N, M = map(int, input().split())
    flag = [input() for _ in range(N)]
 
    min_val = N*M
    for i in range(N-2):		# 완전탐색(범위를 탐색)
        for j in range(i+1, N-1):
            res = color(i,j,N)	# 개수 확인
            if min_val > res:	# 최소 값 확인
                min_val = res
    print(f'#{test_case} {min_val}')

<부족한 점은 댓글로 남겨주시면 저에게 도움이 됩니다!>

<그림 출처: SWEA 러시아 국기 같은 깃발>

반응형

'Algorithm > SW Expert Academy Review' 카테고리의 다른 글

2607. 비슷한 단어  (0) 2024.01.20
13994. 새로운 버스 노선  (0) 2023.03.06
1210. [S/W 문제해결 기본] 2일차 - Ladder1  (0) 2023.03.06
1954. 달팽이 숫자  (0) 2023.03.06
1961. 숫자 배열 회전  (0) 2023.03.05