본문 바로가기
알고리즘 문제/Java

[goormlevel/Java] 장마

by 현장 2026. 6. 13.

-Code

import java.io.*;
import java.util.*;

class Main {
    static class Ground {
        int hight, waterAmount = 0;
        boolean isRain = false;

        public Ground(int hight) {
            this.hight = hight;
        }

        public void clear() {
            if (!this.isRain) return;
            this.waterAmount--;
            isRain = false;
        }

        public void rain() {
            this.waterAmount++;
            isRain = true;
        }

        public int totalHight() {
            return this.hight + this.waterAmount;
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        // 짐 갯수, 장마 기간
        int houseCnt = Integer.parseInt(st.nextToken());
        int days = Integer.parseInt(st.nextToken());
        // 땅 높이
        st = new StringTokenizer(br.readLine());
        Ground[] groundInfo = new Ground[houseCnt + 1];
        for (int i = 1; i <= houseCnt; i++) {
            groundInfo[i] = new Ground(Integer.parseInt(st.nextToken()));
        }
        // 비온날 받기
        for (int day = 1; day <= days; day++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            for (int i = start; i <= end; i++) {
                groundInfo[i].rain();
            }
            // 3의 배수 날 하수 시스템 작동
            if (day % 3 == 0) {
                // 3일 이내에 비온 위치 시스템 작동
                for (int i = 1; i <= houseCnt; i++) {
                    groundInfo[i].clear();
                }
            }
        }
        // 각 지면 높이 구하기
        StringBuilder answer = new StringBuilder();
        for (int i = 1; i <= houseCnt; i++) {
            answer.append(groundInfo[i].totalHight());
            if (i < houseCnt) answer.append(" ");
        }
        System.out.println(answer);
        br.close();
    }
}

하면서 배열 크기를 잘못 지정하는 실수 및  하수 시스템 작동을 잘못 설계해서 틀렸었습니다.