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
- 문자열 압축
- 2638
- 프로그래머스
- 설탕 배달
- 동적 프로그래밍
- 호유동
- 백준
- mvc
- 맛집 투어
- 포두부 보쌈
- 다이나믹 프로그래밍
- 맛집
- Spring
- 2020 KAKAO BLIND
- 스프링
- 2589
- 알고리즘
- 양꼬치
- 2839
- 완도산회
- 서블릿
- 고모네 콩탕
- dp
- 1로 만들기
- 투어
- HTTP API
- BFS
- 스프링 MVC
- 쓰레드 풀
- Servlet
Archives
- Today
- Total
프로그래밍 공방
[백준] 19235번 : 모노미노도미노 본문
문제
문제해결방법
이 문제는 몇 가지 함수를 만들고 사용해서 풀었다.
1. 보드에서 n번째 라인이 완성되었는지 체크하는 함수
2. 보드에서 n번째 라인을 지우는 함수
3. 보드의 n번째 열에 블록을 쌓는 함수
4. 보드에 있는 블록들 중 내려갈 수 있는 블록이 있으면 내리는 함수
5. 보드의 연한 칸에 블록이 있다면 몇 개의 라인에 있는지 알려주는 함수
또 Blue 보드 같은 경우에는 x, y를 바꿔서 똑같이 풀어주었다.
코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | package blogQueue; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main19235_모노미노도미노 { public static int[][] blue = new int[6][4], green = new int[6][4]; public static boolean check(int[][] map, int line) { for(int i=0; i<map[line].length; i++) { if(map[line][i]==0) return false; } return true; } public static void removeLine(int[][] map, int line) { for(int i=0; i<map[line].length; i++) map[line][i] = 0; } public static void inputBlock(int[][] map, int col, int type) { int height = 0; if(type==1) { while(height<map.length && map[height][col]==0) height++; map[height-1][col] = 1; } else if(type==3) { while(height<map.length && map[height][col]==0) height++; map[height-1][col] = 1; map[height-2][col] = 1; } else { while(height<map.length && map[height][col]==0 && map[height][col+1]==0) height++; map[height-1][col] = 2; map[height-1][col+1] = 2; } } public static void redraw(int[][] map) { for(int i=map.length-1; i>=0; i--) { for(int j=0; j<map[i].length; j++) { int height = i+1; if(map[i][j]==1) { while(height<map.length && map[height][j]==0) height++; } else if(map[i][j]==2) { while(height<map.length && map[height][j]==0 && map[height][j+1]==0) height++; j++; int temp = map[height-1][j-1]; map[height-1][j-1] = map[i][j-1]; map[i][j-1] = temp; } int temp = map[height-1][j]; map[height-1][j] = map[i][j]; map[i][j] = temp; } } } public static int countLine(int[][] map) { int c = 0; for(int i=0; i<2; i++) { for(int j=0; j<map[i].length; j++) { if(map[i][j]!=0) { c++; break; } } } return c; } public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int score = 0; int N = Integer.parseInt(br.readLine()); for(int n=0; n<N; n++) { StringTokenizer st = new StringTokenizer(br.readLine()); int t = Integer.parseInt(st.nextToken()); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); inputBlock(green, y, t); if(t==2) t=3; else if(t==3) t=2; inputBlock(blue, x, t); boolean flag = true; while(flag) { flag = false; for(int i=2; i<green.length; i++) { if(check(green, i)) { score++; flag = true; removeLine(green, i); } } redraw(green); } int dl = countLine(green); for(int i=0; i<dl; i++) removeLine(green, green.length-1-i); redraw(green); flag = true; while(flag) { flag = false; for(int i=2; i<blue.length; i++) { if(check(blue, i)) { score++; flag = true; removeLine(blue, i); } } redraw(blue); } dl = countLine(blue); for(int i=0; i<dl; i++) removeLine(blue, blue.length-1-i); redraw(blue); } int block = 0; for(int i=0; i<green.length; i++) { for(int j=0; j<green[i].length; j++) { if(green[i][j]!=0) block++; if(blue[i][j]!=0) block++; } } System.out.println(score); System.out.println(block); br.close(); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[프로그래머스] 경주로 건설 (0) | 2021.02.28 |
---|---|
[프로그래머스] 카드 짝 맞추기 (0) | 2021.02.21 |
[백준] 19236번 : 청소년 상어 (0) | 2021.02.19 |
[프로그래머스] 자동완성 (0) | 2021.02.18 |
[백준] 3694번 : 로봇 프로젝트 (0) | 2021.02.16 |