반응형
SMALL
알고리즘 문제

풀이
using System;
using System.Collections.Generic;
using System.Linq;
namespace BOJ00
{
class App1
{
List<int> lists = new List<int>() { 1, 2, 3, 1, 2, 3 }; //공연 대관 가능날짜 리스트 생성후 인덱스 할당
List<double> resultLists = new List<double>(); // 메서드에서 사용할 리스트 생성후 선언
public App1()
{
Console.WriteLine(Final(6, 3)); //메서드에서 첫번째 숫자는 리스트의 인덱스 Count, 두번째는 공연할 밴드의 숫자(공연날짜)
Console.WriteLine(Final(6, 2));
}
double Final(int N, int L)
{
int num = 0;
double result = 0;
resultLists.Clear(); // 메서드를 불러올때마다 최소값을 구하기 위한 리스트 인덱스 요소들 초기화
for (int i = L; i <= N; i++) //i는 밴드의 수이고 그 수는 리스트의 인덱스 수만큼 (공연장 대여가 가능한 날수 만큼)이 될때까지 돈다.
{
for (int j = 0; j < N; j++) //j = 0부터 6까지 총 여섯번 순회한다.
{
double sum = 0; //요소의 합을 더해줄 sum 값 초기화
num = j; //아래for문에서 이전보다 +1된 인덱스 부터 돌기 위해 num을 만들어 j를 할당해 주고
if (j == N - (i - 1)) //j의 숫자가 커져 인덱스의 요소 범위를 벗어나게 된다면 break; (밴드 수마다 나올수 있는 경우의 수는 N - (i - 1) 와 같다)
{
break;
}
else //그렇지 않다면 밴드의 수마다 나올수 있는 경우의 수를 돈다.
{
for (int k = 0; k < i; k++) //i의 값에 따라(L의 값에 따라)i만큼 돌거고 (3이라면 0,1,2 총 3번돌것이고 4라면 0,1,2,3 총 4번 돌것이다.
{
sum = sum + lists[num];// num은 j의 숫자(리스트에서 합을 구할 인덱스의 시작지점)
num++; // for 문을 순회할때마다 다음 인덱스를 더해준다.
if (k == i) break; // 만약 k가 i만큼(L만큼) 커진다면 break; (인덱스의 범위를 벗어날수도 있기 때문에)
}
result = Math.Round(sum / i, 15); // double 형식의 result 변수에 Sum값에서 밴드의 수 (공연날짜들을) 를 나눈값을 소수점 15번째 자리까지 포함하여 나타낸다.
resultLists.Add(result); // result 를 리스트에 담는다.
}
}
}
double min = resultLists.Min(); //min 변수는 리스트에서 최소값을 담아줄것이고
return min; //min을 리턴한다.
}
}
}
결과창

반응형
LIST
'Algorithm > BOJ' 카테고리의 다른 글
| [백준] 1차원 배열 전체 합 구하기 C# 사용 (1) | 2023.01.18 |
|---|---|
| [BOJ] 10988 팰린드롬 C# 사용 (1) | 2023.01.17 |
| [BOJ] 1181 단어 정렬 C# 이용 (1) | 2023.01.12 |
| [BOJ] 10173 니모를 찾아서 C# 이용 (0) | 2023.01.12 |
| [BOJ] 4458 첫 글자를 대문자로 C# 이용 (1) | 2023.01.12 |