본문 바로가기

코딩테스트 \파이썬\자바/SWEA D4

[SWEA][D4] 4613. 러시아 국기 같은 깃발 D4 파이썬

문제출처

https://swexpertacademy.com/main/code/problem/problemSubmitHistory.do?contestProbId=AWQl9TIK8qoDFAXj

4613. 러시아 국기 같은 깃발 D4 파이썬

 

 

2016년은 삼/성/전/자/가 러시아 현지법인을 설립한지 20주년이 된 해이다. 이를 기념해서 당신은 러시아 국기를 만들기로 했다.

먼저 창고에서 오래된 깃발을 꺼내왔다. 이 깃발은 N행 M열로 나뉘어 있고, 각 칸은 흰색, 파란색, 빨간색 중 하나로 칠해져 있다.

당신은 몇 개의 칸에 있는 색을 다시 칠해서 이 깃발을 러시아 국기처럼 만들려고 한다. 다음의 조건을 만족해야 한다.

  • 위에서 몇 줄(한 줄 이상)은 모두 흰색으로 칠해져 있어야 한다.

  • 다음 몇 줄(한 줄 이상)은 모두 파란색으로 칠해져 있어야 한다.

  • 나머지 줄(한 줄 이상)은 모두 빨간색으로 칠해져 있어야 한다.


이렇게 러시아 국기 같은 깃발을 만들기 위해서 새로 칠해야 하는 칸의 개수의 최솟값을 구하여라.


     

     



첫 번째 예제이다. 왼쪽에 있는 그림이 입력이다. 중간에 있는 그림에 X가 적힌 칸들을 새롭게 색칠하여 오른쪽에 있는 그림과 같은 깃발을 만들면 최적이다.


[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 두 정수 N,M(3≤N,M≤50)이 공백으로 구분되어 주어진다.

다음 N개의 줄에는 M개의 문자로 이루어진 문자열이 주어진다. i번 째 줄의 j번째 문자는 깃발에서 i번째 행 j번째 열인 칸의 색을 의미한다.

‘W’는 흰색, ‘B’는 파란색, ‘R’은 빨간색을 의미한다. ‘W’, ‘B’, ‘R’외의 다른 문자는 입력되지 않는다.

2
4 5
WRWRW
BWRWB
WRWRW
RWBWR
6 14
WWWWWWWWWWWWWW
WWRRWWBBBBBBWW
WRRRWWWBWWWWRB
WWBWBWWWBWRRRR
WBWBBWWWBBWRRW
WWWWWWWWWWWWWW



[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 러시아 국기 같은 깃발을 만들기 위해서 새로 칠해야 하는 칸의 개수의 최솟값을 구하여 T 줄에 걸쳐서 출력한다.

#1 11
#2 44

<PASS> for 문으로 경우를 전부 구하기

 

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
32
33
# 2020.03.12.목
# 4613 러시아국기같은 깃발 D4 
# [배열] for 문으로 찾기
 
for tc in range(1,int(input())+1):
    n,m = map(int,input().split()) # 행렬의 크기 3~50
    arr = [list(input()) for _ in range(n)]
    mymin = n*m
    # 1 for문으로 경우 전부 계산
    one_cnt = 0
    for w in range(0,n-2): # 화이트
        for k in range(0,m):
            if arr[w][k] != 'W':
                one_cnt += 1
 
        two_cnt = 0
        for b in range(w+1,n-1): # 블루
            for k in range(0,m):
                if arr[b][k] != 'B':
                    two_cnt += 1
 
            three_cnt = 0
            for r in range(b+1,n): # 레드
                for k in range(0,m):
                    if arr[r][k] != 'R':
                        three_cnt += 1
          
            cnt = one_cnt + two_cnt + three_cnt
            if mymin > cnt:
                mymin = cnt
    print(f'#{tc} {mymin}')