코딩 테스트/BOJ

C# 10162 전자레인지

s0002 2023. 2. 1. 01:33

만약 입력값 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