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
- Spring
- 백준
- 동적 프로그래밍
- Servlet
- 스프링 MVC
- 다이나믹 프로그래밍
- 포두부 보쌈
- 1로 만들기
- BFS
- mvc
- 투어
- 스프링
- 알고리즘
- 양꼬치
- 문자열 압축
- 맛집
- 고모네 콩탕
- HTTP API
- 쓰레드 풀
- 2589
- 2839
- 설탕 배달
- 맛집 투어
- 호유동
- 프로그래머스
- 완도산회
- dp
- 2020 KAKAO BLIND
- 서블릿
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 |