백준 온라인 저지 / 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);
}
}
}
'백준 알고리즘 > Lang-C#' 카테고리의 다른 글
[백준/C# (.NET)] 2480번 주사위 세개 (0) | 2021.08.13 |
---|---|
[백준/C# (.NET)] 1712번 손익분기점 (0) | 2021.08.12 |
[백준/C# (.NET)] 1181번 단어정렬 (0) | 2021.08.11 |
[백준/C# (.NET) 14928번 큰 수 (BIG)] (0) | 2021.08.11 |
[백준/C# (.NET)] 10757번 큰 수 A + B (0) | 2021.08.11 |