728x90
반응형
문제
정답 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static int M;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
String[] arr = new String[N];
for(int i = 0; i < N; i++){
arr[i] = br.readLine();
}
System.out.println(count(arr));
br.close();
}
public static int count(String[] arr){
int result = Integer.MAX_VALUE;
for(int i = 0; i < N-7; i++){
for(int j = 0; j < M-7; j++){
for(int k = 0; k < 2; k++){
char start = k == 0 ? 'W' : 'B';
int count = 0;
for(int a = i; a < i+8; a++){
for(int b = j; b < j+8; b++){
if(start != arr[a].charAt(b)){
count++;
}
start = start == 'W' ? 'B' : 'W';
}
start = start == 'W' ? 'B' : 'W';
}
result = Math.min(result, count);
if(result == 0) return 0;
}
}
}
return result;
}
}
- 메모리 14292KB
- 시간 136ms
문제를 이해하는 건 쉬웠지만 신경써줘야 할 게 많아 코드를 짜는데 오래 걸렸던 문제입니다.
- 숫자 N과 M을 받는다.
- N크기의 배열을 만들어 N번만큼 for문을 돌려 값을 라인당 String값으로 받는다.
- i와 j for문은 체스판의 시작점을 나타내는 for문이다. 8*8 체스판을 만들 수 있는 건 다 만들어봐야하기 때문에 for문 반복이 필요하다.
- k for문은 맨 왼쪽 위 칸이 흰색인 경우와 검은 색인 경우 2가지 모두 체크해줘야 하기 때문에 필요하다.
- 시작점을 기준으로 8*8 배열을 만들어 값을 확인해준다. 한 칸 확인하면 다음 칸으로 넘어가면서 비교 기준이 되는 start 값도 바꿔준다.
- 한 라인 비교가 끝나서 다음 라인으로 넘어갈 때 또한 start값을 바꿔서 넘어간다.
- 최소 개수를 구하는 것이기 때문에 Math.min 메소드를 활용해주면 끝!
728x90
반응형
'Computer Science (CS) > 알고리즘' 카테고리의 다른 글
[백준/Java] 2475번 검증수 (0) | 2024.09.23 |
---|---|
[백준/Java] 10250번 ACM 호텔 (1) | 2024.09.23 |
[백준/Java] 19532번 수학은 비대면강의입니다 (0) | 2023.06.02 |
[백준/Java] 2231번 분해합 (0) | 2023.06.01 |
[백준/Java] 2798번 블랙잭 (0) | 2023.06.01 |