만약 입력값 T가 C에 설정된 10으로 나누어 떨어지지 않으면 바로 -1 출력
그렇지 않으면(T가 10으로 나누어 떨어지면)
반복문을 통해서 각 버튼 A, B, C를 누르는 횟수의 모든 경우 i, j, k에 대해서
i*300+j*60+k*10==T가 되는 i, j, k와 countSum(i + j + k)을 구해서 구조체 리스트에 담고 countSum의 최솟값을 기억하는 과정을 반복한다
이때 반복하는 횟수는 T/각 버튼에 설정된 시간이다 (0부터 최대로 누르는 횟수까지 검사)
단, i, j, k가 0일 경우 반복 조건을 <로 설정했을 때 반복문을 빠져나가므로 <=으로 작성한다
foreach문을 통해 리스트의 countSum 값이 countSum의 최솟값 min과 같을 때의 i, j, k를 찾아서 출력한다
using System;
using System.Collections.Generic;
namespace _10162
{
class Program
{
static void Main(string[] args)
{
int T = int.Parse(Console.ReadLine());
int[] times = { 300, 60, 10 };
int[] count = new int[3];
int countSum = 0;
int min = T / times[2];
List<IJKMin> ijkminSts = new List<IJKMin>();
IJKMin ijkminSt = new IJKMin();
//int l = 0;
if (T % times[2] != 0)
Console.WriteLine(-1);
else
{
for (int i = 0; i <= T/times[0]; i++)
{
for(int j = 0; j <= T / times[1]; j++)
{
for(int k = 0; k <= T / times[2]; k++)
{
if (T == times[0] * i + times[1] * j + times[2] * k)
{
countSum = i + j + k;
//Console.WriteLine("반복중 {0},{1},{2},{3}", i, j, k,countSum);
ijkminSt.i = i;
ijkminSt.j = j;
ijkminSt.k = k;
ijkminSt.countSum = countSum;
ijkminSts.Add(ijkminSt);
min = Math.Min(countSum, min);
}
}
}
}
foreach(var s in ijkminSts)
{
//Console.WriteLine("리스트 {0},{1},{2},{3}", s.i, s.j, s.k,s.countSum);
if (s.countSum== min)
{
Console.Write("{0} {1} {2}", s.i, s.j, s.k);
}
}
}
}
}
struct IJKMin
{
public int i;
public int j;
public int k;
public int countSum;
}
}
https://www.acmicpc.net/problem/10162
10162번: 전자레인지
3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은
www.acmicpc.net
'코딩 테스트 > BOJ' 카테고리의 다른 글
C# 1158 요세푸스 문제 (0) | 2023.02.19 |
---|---|
C# 2581 소수 (0) | 2023.02.06 |
C# 2231 분해합 (0) | 2023.01.31 |
C# 1654 랜선 자르기(틀림) (0) | 2023.01.26 |
C# 2003 수들의 합2 (0) | 2023.01.20 |