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
- 2589
- 설탕 배달
- dp
- 포두부 보쌈
- 호유동
- 2638
- 양꼬치
- 알고리즘
- 2839
- 맛집 투어
- 투어
- 프로그래머스
- 쓰레드 풀
- 스프링 MVC
- Spring
- 서블릿
- mvc
- BFS
- 2020 KAKAO BLIND
- 문자열 압축
- 고모네 콩탕
- 백준
- 다이나믹 프로그래밍
- 스프링
- 동적 프로그래밍
- 맛집
- HTTP API
- 1로 만들기
- Servlet
- 완도산회
Archives
- Today
- Total
프로그래밍 공방
[백준] 1113번 : 수영장 만들기 본문
문제
문제해결방법
수영장의 넓이를 구하기 위해 물의 높이와 땅의 높이의 차를 계산한 배열을 따로 계산해두었다.
높이의 차가 양수인 영역들 중에 배열의 가장자리와 닿지 않는 영역들을 모두 더하면 수영장의 넓이가 된다.
코드
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 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayDeque; import java.util.Queue; import java.util.StringTokenizer; public class Main { public static int N, M; public static int[][] map, tempMap; public static int[][] dir = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; public static void makeTempMap(int h) { for(int i=0; i<N; i++) { for(int j=0; j<M; j++) tempMap[i][j] = h - map[i][j]; } } public static int calPool(int i, int j) { boolean flood = false; int size = 0; Queue<int[]> q = new ArrayDeque<>(); q.add(new int[]{i, j}); size += 1; tempMap[i][j] = 0; while(!q.isEmpty()) { int[] cur = q.poll(); for(int d=0; d<dir.length; d++) { int xx = cur[0] + dir[d][0]; int yy = cur[1] + dir[d][1]; if(xx>=0 && xx<N &&yy>=0 && yy<M) { if(tempMap[xx][yy]>0) { size += 1; tempMap[xx][yy] = 0; q.add(new int[]{xx, yy}); } } else flood = true; } } if(flood) size = 0; return size; } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); map = new int[N][M]; tempMap = new int[N][M]; for(int i=0; i<N; i++) { String s = br.readLine(); for(int j=0; j<M; j++) map[i][j] = s.charAt(j) -'0'; } int size = 0; for(int h=9; h>=1; h--) { makeTempMap(h); for(int i=0; i<N; i++) { for(int j=0; j<M; j++) { if(tempMap[i][j]>0) { size += calPool(i, j); } } } } System.out.println(size); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑 (0) | 2020.12.29 |
---|---|
[백준] 16932번 : 모양 만들기 (0) | 2020.12.29 |
[백준] 16234번 : 인구 이동 (0) | 2020.12.17 |
[백준] 1058번 : 친구 (0) | 2020.12.17 |
[백준] 9205번 : 맥주 마시면서 걸어가기 (0) | 2020.12.16 |