Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jar 소스보기
- 성능개선
- 마리아디비
- JSON 분해
- 폐기하기
- batchInsert
- spring webflux
- JSON 분리
- JSONObject 분할
- Meta Table
- str_to_date
- 마이바티스 트랜잭션
- 스프링 배치 공식문서
- 스프링 배치 메타 테이블
- multi update
- JSONArray 분할
- org.json
- spring reactive programming
- git stage
- 문자형을 날짜형으로
- 스프링 웹플럭스
- 스테이지에 올리기
- 날짜형을 문자형으로
- 스프링 리액티브 프로그래밍
- 무시하기
- JobExecutionAlreadyRunningException
- date_format
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- JSON 분할
- nonblocking
Archives
- Today
- Total
ebson
boj.kr/1080 체스판 다시 칠하기 (silver4) 자바 풀이 본문
ALGORITHM STUDY WITH PYTHON/Bruteforce
boj.kr/1080 체스판 다시 칠하기 (silver4) 자바 풀이
ebson 2024. 6. 1. 07:501. N 행 M 열의 체스판을 순회하면서 아래를 수행
1.1. 0행 0열을 B로 시작하는 체스판으로 바꾸는 경우에 바꿔야 하는 칸의 개수를 카운트
1.2. 0행 0열을 W로 시작하는 체스판으로 바꾸는 경우에 바꿔야 하는 칸의 개수를 카운트
2. N 행 M 열의 체스판에서 8*8 크기의 체스판을 구하는 모든 경우에 아래를 수행
2.1. 0행 0열을 B로 시작하는 경우, cntList 으로 8*8 크기의 체스판에서 바꿔야 하는 칸의 개수를 추가
2.1. 0행 0열을 W로 시작하는 경우, cntList 으로 8*8 크기의 체스판에서 바꿔야 하는 칸의 개수를 추가
3. 모든 바꿔야하는 칸의 개수의 경우의 수 중에서 최소값을 출력
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
String[] board = new String[N];
for (int i = 0; i<N; i++){
board[i] = br.readLine();
}
int[][] cntListB = new int[N][M];
int[][] cntListW = new int[N][M];
for (int r=0; r<N; r++){
for (int c=0; c<M; c++) {
if (r % 2 == 0){
if (c % 2 == 0){
if(board[r].charAt(c) == 'W') {
cntListB[r][c] = 1;
} else {
cntListW[r][c] = 1;
}
} else {
if(board[r].charAt(c) == 'B') {
cntListB[r][c] = 1;
} else {
cntListW[r][c] = 1;
}
}
} else {
if (c % 2 == 0){
if(board[r].charAt(c) == 'B') {
cntListB[r][c] = 1;
} else {
cntListW[r][c] = 1;
}
} else {
if(board[r].charAt(c) == 'W') {
cntListB[r][c] = 1;
} else {
cntListW[r][c] = 1;
}
}
}
}
}
int cntB = 0;
int cntW = 0;
int ans = Integer.MAX_VALUE;
for (int i=0; i<N-7; i++){
for (int j=0; j<M-7; j++){
for (int r=0; r<8; r++){
for (int c=0; c<8; c++){
cntB += cntListB[i+r][j+c];
cntW += cntListW[i+r][j+c];
}
}
ans = Math.min(ans, cntB);
ans = Math.min(ans, cntW);
cntB = 0;
cntW = 0;
}
}
System.out.println(ans);
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
백준에서 자바로 답안을 제출하는 경우, class 이름은 Main 으로 해야한다.
문제에서 요구하는 모든 경우의 수에 대하여 브루트포스 방법으로 답을 구하는 문제였다. 완성된 체스판의 두가지 경우의 수에 대하여 8*8 크기의 체스판의 모든 경우에서 변경되는 칸의 개수를 리스트에 저장하고 최소값을 출력하였다.
'ALGORITHM STUDY WITH PYTHON > Bruteforce' 카테고리의 다른 글
boj.kr/14889 스타트와 링크 (silver2) 자바 풀이 (0) | 2024.06.01 |
---|---|
boj.kr/1080 체스판 다시 칠하기 (silver4) 파이썬 풀이 (0) | 2024.05.25 |
boj.kr/15686 치킨 배달 (gold5) 파이썬 풀이 (0) | 2023.04.22 |
boj.kr/2468 안전 영역 (silver1) 파이썬 풀이 (0) | 2023.04.21 |
boj.kr/14889 스타트와 링크 (silver2) 파이썬 풀이 (0) | 2023.04.20 |
Comments