공부방
러시아 국기 같은 깃발 / 완전 탐색 / 문제 사고력 본문
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
package SWEA;
import java.util.Scanner;
public class 나홀로러시아 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
for (int Tc = 1; Tc <= T; Tc++) {
int n=sc.nextInt();
int m=sc.nextInt();
char[][] map=new char[n][m];
for (int y = 0; y < n; y++) {
String str=sc.next();
char[] arr=str.toCharArray();
for (int x = 0; x < m; x++) {
map[y][x]=arr[x];
}
}//입력의 2차원 배열 입력받기
int min=Integer.MAX_VALUE;//최소값을 찾기 위한 최대값 생성
//W=흰
//B=파
//R=빨
for (int b = 1; b <n-1; b++) {
for (int r = b+1; r < n; r++) {
int count=0;
for (int y = 0; y < b; y++) {
for (int x = 0; x < m; x++) {
if (map[y][x]!='W') {
count++;
}
}
}//하얀색 범위에서 하얀색이 아닌 것들을 찾아주는 반복문
for (int y = b; y < r; y++) {
for (int x = 0; x < m; x++) {
if (map[y][x]!='B') {
count++;
}
}
}//파란색 범위에서 파란색이 아닌 것들을 찾아주는 반복문
for (int y = r; y < n; y++) {
for (int x = 0; x < m; x++) {
if (map[y][x]!='R') {
count++;
}
}
}
if (min>count) {
min=count;
}
}
}//파란색과 빨간색의 범위를 지정해주면 하얀색은 알아서 배정이 되고 흰 1 파1 빨2, 흰1 파2 빨1,...,흰2파1빨1까지
//모든 경우의 수를 구할 수 있는 완전 탐색 반복문
System.out.println("#"+Tc+" "+min);
}//테케 반복
}
}
느낀점 : 2차 배열로 문자 간격없이 받는 법 정확히 알고, 색을 바꿀 최소값은 각 행의 색이 아닌 것들의 최소값이기 때문에 그거를 빠르게 잡고 선 이차배열로 파란색과 빨간색의 범위를 잡아 하얀색의 범위를 정해 완전탐색을 시켜주면서 그 이차배열 안에 하얀색 범위와 파란색 범위와 빨간색 범위를 하나씩 색이 아닌 것들을 카운트 해줘 그 값이 가장 적은 값을 출력하게 할 수 있음.
'문법 > 알고리즘' 카테고리의 다른 글
처음에 한번 잘못 파고드면 쉬운 문제도 2시간../반복문은 끝까지/약수 (0) | 2023.03.04 |
---|---|
완전 탐색 (0) | 2023.03.04 |
반복문 사고력 (0) | 2023.03.02 |
큐를 이용한 마이쮸 문제 (0) | 2023.02.23 |
Swea 쇠막대기 자르기 (0) | 2023.02.20 |