자료구조&알고리즘/SWEA
[SWEA] 4613. 러시아 국기 같은 깃발
고쩡이
2024. 5. 5. 13:07
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
Algorithm
Idea
가능한 모든 경우를 탐색한다. 가능한 기준선 i, j 경우의 수를 모두 탐색하며 W,B,R개수를 세서 cnt에 더해준다.
이를 반복하여 cnt 최댓값을 구하고 이를 전체에서 빼서 채워야하는 최소 개수를 구해준다.
Python
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
arr = [input() for _ in range(N)]
mx = 0
for i in range(N-2):
for j in range(i+1, N-1):
cnt = 0
for s in range(i+1):
cnt += arr[s].count('W') # 하얀색 깃발 개수 count
for s in range(i+1, j+1):
cnt += arr[s].count('B')
for s in range(j+1, N):
cnt += arr[s].count('R')
mx = max(mx, cnt)
print(f'#{tc} {N*M-mx}')
Java
import java.io.*;
import java.util.*;
class Solution {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int test_case = 1; test_case <= T; test_case++) {
String[] inputs = br.readLine().split(" ");
int N = Integer.parseInt(inputs[0]);
int M = Integer.parseInt(inputs[1]);
String[] arr = new String[N];
for (int i = 0; i < N; i++) {
arr[i] = br.readLine();
}
int mx = 0;
for (int i = 0; i < N - 2; i++) {
for (int j = i + 1; j < N - 1; j++) {
int cnt = 0;
for (int s = 0; s <= i; s++) {
cnt += countColor(arr[s], 'W');
}
for (int s = i + 1; s <= j; s++) {
cnt += countColor(arr[s], 'B');
}
for (int s = j + 1; s < N; s++) {
cnt += countColor(arr[s], 'R');
}
mx = Math.max(mx, cnt);
}
}
System.out.println("#" + test_case + " " + (N * M - mx));
}
}
public static int countColor(String str, char color) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == color) count++;
}
return count;
}
}