반응형
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 |
Tags
- 빅분기실기
- docker 삭제
- 최소 스패닝 트리 자바
- m1 docker install
- 청년 AI Big Data 아카데미 13기
- 나누어 떨어지는 숫자 배열 java
- docker remove
- 프로그래머스 나누어 떨어지는 숫자 배열 파이썬
- 핸즈온 머신러닝
- 가운데 글자 가져오기 자바
- 프로그래머스 가운데 글자 가져오기 파이썬
- 빅데이터분석기사
- 프로그래머스 가운데 글자 가져오기 python
- 나누어 떨어지는 숫자 배열 python
- 코드업 1020 java
- 가운데 글자 가져오기 파이썬
- m1 docker
- docker 완전 삭제
- 트리의 지름 자바
- 청년 Ai Big Data 아카데미
- 프로그래머스 가운데 글자 가져오기 자바
- codeup 1020 java
- 최단 경로 알고리즘
- 최소 스패닝 트리
- codeup 1020 자바
- 트리의 지름 java
- 가운데 글자 가져오기 java
- 프로그래머스 나누어 떨어지는 숫자 배열 자바
- 코드업 1020 자바
- 가운데 글자 가져오기 python
Archives
- Today
- Total
NineTwo meet you
[백준/자바] 20061 모노미노도미노2 본문
반응형

설명
구현문제이다.
이 문제에서 중요한 점은 먼저 블록을 채우고 연한칸이 채워졌다고 지우는게 아니고 먼저 한 행이나 한 열이 같은 것을 먼저 지워야 한다!
코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.StringTokenizer; | |
public class BOJ20061 { | |
static int g[][] = new int[6][4]; | |
static int b[][] = new int[4][6]; | |
static int score = 0; | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
int n = Integer.parseInt(br.readLine()); | |
for(int i = 0; i < n; i++) { | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
int t = Integer.parseInt(st.nextToken()); | |
int x = Integer.parseInt(st.nextToken()); | |
int y = Integer.parseInt(st.nextToken()); | |
fill(t, x, y); | |
boolean circle = IsLineAllSame(); | |
while(circle) circle = IsLineAllSame(); | |
IslightColor(); | |
} | |
System.out.println(score); | |
System.out.println(total()); | |
} | |
static int total() { | |
int sum = 0; | |
for(int i = 0; i < 6; i++) { | |
for(int j = 0; j < 4; j++) { | |
if(g[i][j] == 1) sum++; | |
} | |
} | |
for(int i = 0; i < 4; i++) { | |
for(int j = 0; j < 6; j++) { | |
if(b[i][j] == 1) sum++; | |
} | |
} | |
return sum; | |
} | |
static void fill(int t, int x, int y) { | |
int ig = 6; | |
int ib = 6; | |
if(t == 1) { | |
for(int i = 0; i < 6; i++) { | |
if(g[i][y] != 0) { | |
ig = i; | |
break; | |
} | |
} | |
g[ig-1][y] = 1; | |
for(int i = 0; i < 6; i++) { | |
if(b[x][i] != 0) { | |
ib = i; | |
break; | |
} | |
} | |
b[x][ib-1] = 1; | |
}else if(t == 2) { | |
for(int i = 0; i < 6; i++) { | |
if(g[i][y] != 0 || g[i][y+1] != 0) { | |
ig = i; | |
break; | |
} | |
} | |
g[ig-1][y] = 1; | |
g[ig-1][y+1] = 1; | |
for(int i = 0; i < 6; i++) { | |
if(b[x][i] != 0) { | |
ib = i; | |
break; | |
} | |
} | |
b[x][ib-1] = 1; | |
b[x][ib-2] = 1; | |
}else { | |
for(int i = 0; i < 6; i++) { | |
if(g[i][y] != 0) { | |
ig = i; | |
break; | |
} | |
} | |
g[ig-1][y] = 1; | |
g[ig-2][y] = 1; | |
for(int i = 0; i < 6; i++) { | |
if(b[x][i] != 0 || b[x+1][i] != 0) { | |
ib = i; | |
break; | |
} | |
} | |
b[x][ib-1] = 1; | |
b[x+1][ib-1] = 1; | |
} | |
} | |
static void move(int d, int i) { | |
if(d == 0) { | |
for(int j = i; 0 < j; j--) { | |
g[j][0] = g[j-1][0]; | |
g[j][1] = g[j-1][1]; | |
g[j][2] = g[j-1][2]; | |
g[j][3] = g[j-1][3]; | |
g[j-1][0] = g[j-1][1] = g[j-1][2] = g[j-1][3] = 0; | |
} | |
}else { | |
for(int j = i; 0 < j; j--) { | |
b[0][j] = b[0][j-1]; | |
b[1][j] = b[1][j-1]; | |
b[2][j] = b[2][j-1]; | |
b[3][j] = b[3][j-1]; | |
b[0][j-1] = b[1][j-1] = b[2][j-1] = b[3][j-1] = 0; | |
} | |
} | |
} | |
static boolean IsLineAllSame() { | |
boolean check = false; | |
for(int i = 0; i < 6; i++) { | |
if(g[i][0] == 1 && g[i][1] == 1 && g[i][2] == 1 && g[i][3] == 1) { | |
move(0, i); | |
score++; | |
check = true; | |
break; | |
} | |
} | |
for(int i = 0; i < 6; i++) { | |
if(b[0][i] == 1 && b[1][i] == 1 && b[2][i] == 1 && b[3][i] == 1) { | |
move(1, i); | |
score++; | |
check = true; | |
break; | |
} | |
} | |
return check; | |
} | |
static void IslightColor() { | |
if(g[1][0] == 1 || g[1][1] == 1 || g[1][2] == 1 || g[1][3] == 1) move(0, 5); | |
if(g[1][0] == 1 || g[1][1] == 1 || g[1][2] == 1 || g[1][3] == 1) move(0, 5); | |
if(b[0][1] == 1 || b[1][1] == 1 || b[2][1] == 1 || b[3][1] == 1) move(1, 5); | |
if(b[0][1] == 1 || b[1][1] == 1 || b[2][1] == 1 || b[3][1] == 1) move(1, 5); | |
} | |
} |
반응형
'프로그래밍 문제 > 백준' 카테고리의 다른 글
[백준/자바] 17609 회문 (0) | 2021.10.10 |
---|---|
[백준/자바] 18405 경쟁적 전염 (0) | 2021.10.10 |
[백준/자바] 2096 내려가기 (0) | 2021.10.05 |
[백준/자바] 21611 마법사 상어와 블리자드 (0) | 2021.10.04 |
[백준/자바] 21610 마법사 상어와 비바라기 (0) | 2021.10.04 |