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
- 전송계층
- 코딩공부
- 프로토콜
- 자바
- 스프링
- BAEKJOON
- 서버
- 백준
- TCP
- 개발자
- Spring
- 개발공부
- 알고리즘
- 클라이언트
- Dynamic Programming
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 정렬
- DP
- IP
- 코딩테스트
- SSAFY
- 네트워크모델
- 알고리즘공부
- 싸피
- 네트워크
- Java
- Lan
- cs공부
- 다이내믹프로그래밍
- 구현
Archives
- Today
- Total
오늘 하루, develop
백준 14719번 - 빗물 (java) 본문
💡 문제 링크
https://www.acmicpc.net/problem/14719
💡 아이디어
2차원 배열을 활용해서 풀이를 설계했는데 입력값을 보고, 더 좋은 풀이가 있겠다는 생각이 들었다.
입력이 2차원 배열이 아닌, 높이의 1차원 배열이었기 때문이다.
그러나 주어진 조건과 범위를 확인했을 때 2차원 배열로도 충분히 해결이 가능할 것이라고 판단하여 그대로 진행 후, 다른 풀이도 확인했다.
- 2차원 배열 생성
- 블록이 있는 칸에는 1, 없는 칸에는 0 저장
- 행 별로 칸을 확인
- 해당 행에 첫 블록을 만나면 start를 true로 처리
- 첫 블록을 만난 이후 (start=true)
- 1) 빈칸을 만나면, 빗물이 고일 수 있는 공간이므로 count 증가
- 2) 블록을 만나면, 지금까지의 빗물 저장, count 초기화
- 다음 행에서는 start와 count 모두 초기화
💡 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_G5_14719_빗물 {
static int H, W;
static int[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
map = new int[H][W];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < W; i++) {
fill(i, Integer.parseInt(st.nextToken()));
}
int result = 0; //빗물의 총량
for (int i = 0; i < H; i++) {
boolean start = false; //이번 행에서 블록을 만난 적이 있는지 체크
int count = 0; //이번 행에서 빗물이 고이는 칸 수
for (int j = 0; j < W; j++) {
if (!start && map[i][j] == 1) { //이번 행에서 블록을 처음 만난 경우
start=true;
}
else if (start && map[i][j] == 0) { //빗물이 고일 수 있는 공간
count++;
}
else if (start && map[i][j] == 1) { //이미 블록을 만난 후 또 다른 블록을 만난 경우 빗물 저장
result += count; //빗물 저장
count = 0; //빗물이 고이는 칸 초기화
}
}
}
System.out.println(result);
}
//map을 채우는 함수
public static void fill(int col, int num) {
for (int i = 1; i <= num; i++) {
map[H - i][col] = 1;
}
}
}

'알고리즘' 카테고리의 다른 글
| 백준 1202번 - 보석 도둑 (java) (0) | 2024.07.12 |
|---|---|
| 자바 Comparator 간단 정리 (feat. 정렬) (0) | 2024.07.11 |
| 백준 5052번 - 전화번호 목록(java) (0) | 2024.07.10 |
| 백준 1744번 - 수 묶기(java) (2) | 2024.07.05 |
| 백준 27211번 - 도넛 행성(java) (0) | 2024.06.19 |