반응형
SMALL
문제
문제풀이
일단 최대 시간 (100분) 을 리스트로 만들어 할당해주고 각 시간대별로 트럭의 시간표를 스캔하여 해당 시간대에 해당 트럭이 있었는지를 확인하고 count해주었다 .
그렇게 특정 시간대의 트럭 갯수에 따라 미리 입력된 요금에서 갯수를 곱하고 해당 값을 최종값에 더해주어 출력하는 방식으로 해결하였다.
아래는 두가지 버전이 있는데 하나는 입력값 없이 배열로 넣어줄경우
또하나는 입력값을 배열화 하는 경우다.(코드가 많이 더럽다.)
배열로 하는 경우
using System;
using System.Collections.Generic;
using System.Linq;
namespace BOJ00
{
class Program
{
static void Main()
{
int[] charge = { 5, 3, 1 }; //트럭 갯수당 주차비
int[] aTruck = { 1, 2, 3, 4, 5 }; //a트럭의 주차시간
int[] bTruck = { 3, 4 }; //b트럭의 주차시간
int[] cTruck = { 2, 3, 4, 5, 6, 7 }; //c트럭의 주차시간
List<int> timeList = new List<int>(); //최대 시간 리스트 생성.
for (int j = 1; j < 101; j++) // 시간리스트에 시간 요소 할당
{
timeList.Add(j);
}
int finalSum = 0; //최종 금액용 변수 초기화
foreach (int time in timeList)
{
int sum = 0; //시간대별 트럭 갯수 카운트용 변수 초기화
if (aTruck.Contains(time)) //a트럭이 해당 시간대에 있었는가?
sum++;
if (bTruck.Contains(time)) //b트럭이 해당 시간대에 있었는가?
sum++;
if (cTruck.Contains(time)) //c트럭이 해당 시간대에 있었는가?
sum++;
if (sum == 3) //시간대별 트럭의 갯수에 따라 최종 금액용 변수에 더하기
finalSum = finalSum + charge[2] * sum;
else if (sum == 2)
finalSum = finalSum + charge[1] * sum;
else if (sum == 1)
finalSum = finalSum + charge[0];
}
Console.WriteLine(finalSum); //최종 금액 출력
}
}
}
결과창
입력값을 받는 경우
using System;
using System.Collections.Generic;
namespace BOJ00
{
class Program
{
static void Main()
{
List<int> charge = new List<int>(); //트럭 갯수당 주차비
List<int> aTruck = new List<int>(); //a트럭의 주차시간
List<int> bTruck = new List<int>(); //b트럭의 주차시간
List<int> cTruck = new List<int>(); //c트럭의 주차시간
List<int> timeList = new List<int>(); //최대 시간 리스트 생성.
//차레대로 추차비, a트력 주차시간 b트력 주차시간 c트력 주차시간 순으로 입력했을경우 입력값을 리스트로 만들어주는 과정
for (int k = 0; k < 4; k++)
{
string[] input = Console.ReadLine().Split(' ');
if (input.Length < 4 && charge.Count == 0)
{
charge.Add(int.Parse(input[0]));
charge.Add(int.Parse(input[1]));
charge.Add(int.Parse(input[2]));
}
else if (aTruck.Count == 0)
{
for (int j = int.Parse(input[0]); j < int.Parse(input[1]); j++)
{
if (j == int.Parse(input[1])) break;
aTruck.Add(j);
}
}
else if (bTruck.Count == 0)
{
for (int j = int.Parse(input[0]); j < int.Parse(input[1]); j++)
{
if (j == int.Parse(input[1])) break;
bTruck.Add(j);
}
}
else if (cTruck.Count == 0)
{
for (int j = int.Parse(input[0]); j < int.Parse(input[1]); j++)
{
if (j == int.Parse(input[1])) break;
cTruck.Add(j);
}
}
}
for (int j = 1; j < 101; j++) // 시간리스트에 최소부터 최대까지 시간 요소 할당
{
timeList.Add(j);
}
int finalSum = 0; //최종 금액용 변수 초기화
foreach (int time in timeList)
{
int sum = 0; //시간대별 트럭 갯수 카운트용 변수 초기화
if (aTruck.Contains(time)) //a트럭이 해당 시간대에 있었는가?
sum++;
if (bTruck.Contains(time)) //b트럭이 해당 시간대에 있었는가?
sum++;
if (cTruck.Contains(time)) //c트럭이 해당 시간대에 있었는가?
sum++;
if (sum == 3) //시간대별 트럭의 갯수에 따라 최종 금액용 변수에 더하기
finalSum = finalSum + charge[2] * sum;
else if (sum == 2)
finalSum = finalSum + charge[1] * sum;
else if (sum == 1)
finalSum = finalSum + charge[0];
}
Console.WriteLine(finalSum); //최종 금액 출력
}
}
}
결과창
다음부터는 입력값을 헷갈리지 않게 변수에 담아서 하자....
반응형
LIST
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 1764 듣보잡 C# 알고리즘 풀이 (0) | 2023.01.20 |
---|---|
[프로그래머스] 완주하지 못한 선수 C# 풀이 (0) | 2023.01.19 |
[BOJ] 10808 알파벳 개수 C# 풀이 (0) | 2023.01.19 |
[프로그래머스] 최소 직사각형 C# 풀이 (0) | 2023.01.18 |
[BOJ] 11659 구간 합 구하기 4 C# 풀이 (0) | 2023.01.18 |