https://www.acmicpc.net/problem/14719
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
풀이방법
첫째줄 + 마지막줄 제외 빗물로 카운트 채우고 조건달아서 빼주기
소스코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int col = Integer.parseInt(st.nextToken());
int row = Integer.parseInt(st.nextToken());
int block[] = new int[row];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < row; i++) {
block[i] = Integer.parseInt(st.nextToken());
}
int count = 0;
for (int i = 1; i < row-1; i++) { //첫번째줄, 마지막줄 빼고 빗물 채우기
count += (col - block[i]);
}
for (int i = 1; i < row-1; i++) {
int left = 0; //왼쪽 중 제일 큰 블록
int right = 0; //오른쪽 중 제일 큰 블록
//왼쪽탐색
for (int j = 0; j < i; j++) {
if(block[j] > left)
left =block[j];
}
//오른쪽 탐색
for (int j = i+1; j < row; j++) {
if(block[j] > right)
right =block[j];
}
int min = Math.min(left, right); //오른쪽, 왼쪽 중 작은 숫자 저장
if(block[i]!= col) { // 열의 숫자보다 적을시
if(left==0 || right ==0 || min<block[i]) {// left,right 중 0이 있을 시or 둘다 내 크기보다 작을시
count = count-(col-block[i]); //col-높이 만큼 count 감소
}else {
if(min<col) {
count = count-(col-min); //col- 작은수 만큼 count 감소
}
}
}
}
System.out.println(count);
}
}
'Algorithm > java' 카테고리의 다른 글
백준 3190 JAVA : 뱀 (0) | 2023.03.16 |
---|---|
백준 14503 JAVA : 로봇 청소기 (1) | 2023.02.01 |
백준 10997 JAVA : 별 찍기 - 22 (0) | 2023.01.29 |
백준 10994 JAVA : 별 찍기 - 19 (0) | 2023.01.29 |
백준 13015 JAVA : 별 찍기 - 23 (0) | 2023.01.29 |