처음에 트럭이 주차장에 있을 수 있는 경우의 수를 고려해서 너무 복잡하고 어려웠는데
다른 블로그 참고해서 생각을 정리할 수 있었다
배열을 저렇게 많이 만들어도 되나 싶긴한데 제출하면 맞았다고 나온다
using System;
using System.Linq;
namespace _2979
{
class Program
{
static void Main(string[] args)
{
//비용 입력받기
int[] costs = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
//트럭 출입 시간 입력받기
int[] truck0= Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
int[] truck1= Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
int[] truck2= Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
//비용 각각 A, B, C로 표기
int A = costs[0];
int B = costs[1];
int C = costs[2];
//도착 시간, 떠난 시간별로 배열 만들기
int[] start = { truck0[0], truck1[0], truck2[0] };
int[] end = { truck0[1], truck1[1], truck2[1] };
//트럭별로 주차장에 머문 시간 저장할 배열
int[] x = new int[end.Max()+1];
int[] y = new int[end.Max()+1];
int[] z = new int[end.Max()+1];
int sum = 0;
//트럭이 그 시간에 주차장에 머물렀으면 배열에 1 저장
for(int i=start.Min(); i < end.Max(); i++)
{
if(i>=start[0] && i<end[0])
x[i] = 1;
if (i >= start[1] && i < end[1])
y[i] = 1;
if (i >= start[2] && i < end[2])
z[i] = 1;
}
//각 시간마다 머문 트럭의 수를 세고 그 때의 요금 계산해서 누적
for (int i = start.Min(); i < end.Max(); i++)
{
if (x[i] + y[i] + z[i] == 1)
sum = sum + A;
if(x[i] + y[i] + z[i] == 2)
sum = sum + B*2;
if (x[i] + y[i] + z[i] == 3)
sum = sum + C*3;
}
Console.WriteLine(sum);
}
}
}
참고
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=occidere&logNo=220867709209
[백준] 2979 - 트럭 주차
문제 링크: https://www.acmicpc.net/problem/2979시뮬레이션 문제는 풀때 참 편하다. 설명에 나와있...
blog.naver.com
https://www.acmicpc.net/problem/2979
2979번: 트럭 주차
첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100) 다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장
www.acmicpc.net
'코딩 테스트 > BOJ' 카테고리의 다른 글
C# 1654 랜선 자르기(틀림) (0) | 2023.01.26 |
---|---|
C# 2003 수들의 합2 (0) | 2023.01.20 |
C# 10808 알파벳 개수 (0) | 2023.01.19 |
C# 1439 뒤집기 (0) | 2023.01.18 |
C# 5585 거스름돈 (0) | 2023.01.18 |