백준 알고리즘/Lang-C#

[백준/C# (.NET)] 22864번 피로도

Jongung 2021. 8. 10. 23:25

백준 온라인 저지 / 22864 피로도

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

 

22864번: 피로도

첫 번째 줄에 $A$, $B$, $C$, $M$이 공백으로 구분되어 주어진다. (하루는 24시간이다.) 맨 처음 피로도는 0이다.

www.acmicpc.net

  • 사용언어 : C# (.NET)
  • 알고리즘 : 수학, 구현, 사칙연산

 

C#코드

1. 문제 정리

이번 문제는 총 4개의 입력을 받아 계산 후 출력하는 문제이다.

 

하루는 24시간이므로 for문을 사용하여 시간이 24 되기 전까지 돌리고 

for문 안에 A만큼 쌓이고 B만큼 처리하고 C만큼 줄어들게 만들면 된다.

 

2. 문자 4개 나눠서 받기

 string str = Console.ReadLine();
            string[] spt = str.Split(' ');

            int A = int.Parse(spt[0]);
            int B = int.Parse(spt[1]);
            int C = int.Parse(spt[2]);
            int M = int.Parse(spt[3]);

문자열로 받아 온 후 ' ' 공백을 사이로 A, B, C, M 총 4개의 변수로 나눠준다.

 

3. 받아온 문자 열로 for문 돌리기

 int value = 0; //피로도
 int work = 0; //일
 
if (M < A)
{
	work = 0;
}
else
{
	for (int time = 0; time < 24; time++)
	{
		if (value < 0)
		{
			value = 0;
		}
		value += A;
		if (value > M)
		{
		value -= A;
		value -= C;
		}
		else
		{
		work += B;
		}
	}
}

 

일은 0 이하로 줄어들 수 없기 때문에 M보다 A가 작을 경우 if문으로 예외처리를 해줬습니다.

그 이후 시간을 나타내는 변수(time)을 만들고 23이 될 때 까지 for문을 돌려줍니다. 

 

(FOR문 내용 설명)

 

피로도 또한 0 이하로 줄어들 수 없기 때문에 Value가 음수가 될 경우 0으로 바꿔줍니다. 

 

먼저 피로도를 더해준 다음 피로도가 M보다 클 경우 피로도를 줄이고 또 한시간을 쉰 게 되는 거니 C 만큼 피로도를 줄여준다. 

 

만약 피로도가 M보다 작을 경우 일에다가 B만큼 더해준다.

 

+완성코드+

 

using System;
using System.Text;
using System.Numerics;

namespace boj
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = Console.ReadLine();
            string[] spt = str.Split(' ');

            int value = 0;
            int work = 0;

            int A = int.Parse(spt[0]);
            int B = int.Parse(spt[1]);
            int C = int.Parse(spt[2]);
            int M = int.Parse(spt[3]);

            if (M < A)
            {
                work = 0;
            }
            else
            {
                for (int time = 0; time < 24; time++)
                {
                    if (value < 0)
                    {
                        value = 0;
                    }
                    value += A;
                    if (value > M)
                    {
                        value -= A;
                        value -= C;
                    }
                    else
                    {
                        work += B;
                    }
                }
            }
            Console.WriteLine(work);
        }
    }
}