피로도

이윤설·2024년 3월 25일

https://www.acmicpc.net/problem/22864


제출코드

없음.. 아이디어가 도저히 안 떠올랐다.
수학공식을 세워서 구현하려고 했는데, 검색해보니까 단순히 수학공식으로 풀 수 있는 문제가 아니었다..!

모범답안

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

class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        /**
         *
         * 24시간동안
         * aSum이 현재 피로도이다. a를 더해도 m 이하라면, 무조건 일을 한다.
         * 피로도는 a만큼 증가한다.
         *
         * 일을 하면 피로도가 m을 넘을 경우, 무조건 휴식한다.
         * 주의) 현재 피로도가 음수라면 0으로 수정한다.
         */


        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        int sum = 0;
        int aSum = 0;

        for (int i = 0; i < 24; i++) {
            if (aSum + a <= m) {
                sum += b;
                aSum += a;
            } else {
                aSum -= c;
                if (aSum < 0) {
                    aSum = 0;
                }
            }
        }
        System.out.println(sum);
    }
}

생각보다 풀이는 간단했다. 답안을 보고나면 쉬운데.. 바로바로 생각해내기는 어려운 아이디어인 것 같다. 아직 그리디 알고리즘을 수월하게 풀려면 데이터가 더 쌓여야할 것 같다 ㅠㅠ..

배운점

  • "24시간동안 어떠한 작업을 한다"는 조건을 for (int i = 0; i < 24; i++) {} 으로 시간 단위를 작업을 처리할 수 있다.
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글