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
- AuthenticationPrincipal
- 리소스 서버
- 외부설정
- Application Event
- 스프링 부트
- cors
- 리소스핸들러
- application.properties
- @Profile
- HATEOAS
- 다익스트라
- 스프링부트
- Spring Security
- Application Runner
- 백준
- @ConfigurationProperties
- EnableAutoConfiguration
- 브루트포스
- webjar
- Application Argument
- 백기선
- 정적 리소스
- HttpMessageConverters
- 알고리즘
- JsonSerializer
- 백트래킹
- OAuth2
- JPA
- rest api
- WebApplication Type
Archives
- Today
- Total
아카이브
[KAKAO BLIND 2018] 1차 - 프렌즈4블록 본문
package programmers.kakao_previous.blind_2018;
public class Friends4Block_1st {
static char[][] map;
static boolean[][] visit;
static int R, C;
public static void main(String[] args) {
R = 4;
C = 5;
String[] board = {"CCBDE", "AAADE", "AAABF", "CCBBF"};
int ans = solution(R, C, board);
System.out.println(ans);
}
public static int solution(int m, int n, String[] board) {
int answer = 0;
map = new char[R][C];
initMap(board);
while (true) {
printMap();
visit = new boolean[R][C]; // 삭제대상 체크
int check = 0; // 몇개가 삭제대상으로 찍혔는지
for (int r = 0; r < R - 1; r++) {
for (int c = 0; c < C - 1; c++) {
char ch = map[r][c];
char right = map[r][c + 1];
char cross = map[r + 1][c + 1];
char down = map[r + 1][c];
if (ch == ' ') continue; // 빈공간은 대상이 아니다
if (ch == right && ch == cross && ch == down) { // 오른쪽, 대각선, 아래가 같으면
visit[r][c] = true;
visit[r][c + 1] = true;
visit[r + 1][c + 1] = true;
visit[r + 1][c] = true;
check++; // 삭제대상 카운트 증가
}
}
}
if (check == 0) { // 삭제대상이 없으면
break; // while 종료
}
int delCnt = delete(); // 삭제 카운트
answer += delCnt; // 누적합
down(); // 밑으로 내려줌
}
return answer;
}
// 삭제
static int delete() {
int delCnt = 0;
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
if (visit[r][c]) {
map[r][c] = ' ';
delCnt++;
}
}
}
return delCnt;
}
static void initMap(String[] board) {
for (int i = 0; i < board.length; i++) {
String row = board[i];
for (int j = 0; j < row.length(); j++) {
char ch = row.charAt(j);
map[i][j] = ch;
}
}
}
// 밑으로 내리기
static void down() {
for (int c = 0; c < C; c++) {
for (int r = R - 1; r >= 0; r--) {
if (map[r][c] == ' ') {
for (int i = r - 1; i >= 0; i--) {
if (map[i][c] != ' ') {
map[r][c] = map[i][c];
map[i][c] = ' ';
break;
}
}
}
}
}
}
static void printMap() {
System.out.println("============printMap============");
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
}
'자료구조&알고리즘' 카테고리의 다른 글
[백준]1987.알파벳 (0) | 2020.09.14 |
---|---|
[백준]13549.숨바꼭질3 (0) | 2020.09.14 |
[백준]1753.최단경로 (0) | 2020.09.14 |
[백준]1238.파티 (0) | 2020.09.14 |
[백준]1389.케빈 베이컨의 6단계 법칙 (0) | 2020.09.11 |