091

[C#] TQC+ 문제 CS_609: 본문

Programming Language/C#

[C#] TQC+ 문제 CS_609:

공구일 2025. 6. 15. 16:28
728x90

🔍C#: CS_609.

주어진 휴게시간 이상의 값을 쉰 날의 휴게시간을 매니저와 직원을 나눠 누적합을 구하시오.

 

1. 문제 정답

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;
namespace CSD06
{
    class CSD06
    {
        static void Main(string[] args)
        {
            try
            {
                string str = Console.ReadLine();

                int hh = Convert.ToInt32(str.ToString());

                List<Manager> mgers = new List<Manager>();
                List<Worker> wors = new List<Worker>();
                using(StreamReader reader = new StreamReader("read.txt")){
                    string line;
                    while ((line = reader.ReadLine()) != null){
                        string[] part = line.Split(',');
                        int hour = Convert.ToInt32(part[3]);
                        if(part[1] == "m"){
                            Manager m = chkManager(mgers, part);
                            if(hour >= hh){
                                m.takeLeave(hour);
                            }
                        } else {
                            Worker w = chkWorker(wors, part);
                            if(hour >= hh){
                                w.takeLeave(hour);
                            }
                        }
                    }
                }

                int ml = 0, wl = 0;
                foreach (Manager m in mgers)
                {
                    ml += m.leavehours;
                }
                foreach (Worker w in wors)
                {
                    wl += w.leavehours;
                }
                Console.Write("Manager{0}hr/Worker{1}hr", ml, wl);

            }
            catch
            {
                Console.Write("error");
            }
            Console.ReadKey();
        }
        private static Manager chkManager(List<Manager> ms, string[] data)
        {
            foreach (Manager m in ms)
            {
                if (m.name == data[0].ToString()){
                    return m;
                }
            }
            Manager newm = new Manager(data[0].ToString());
            ms.Add(newm);
            return newm;
       }
       private static Worker chkWorker(List<Worker> ss, string[] data)
       {
          foreach (Worker s in ss)
          {
              if (s.name == data[0].ToString())
              {
                 return s;
              }
           }
           Worker news = new Worker(data[0].ToString());
           ss.Add(news);
           return news;
        }
    }
    interface ILeave{
        void takeLeave(int hours);
    }
    public class Staff : ILeave
    {
        public string name = "";
        public bool isleader = false;
        public int leavehours = 0;
        public void takeLeave(int hours){
            leavehours += hours;
        }
    }

    public class Manager : Staff
    {
        public Manager(string n)
        {
            this.name = n;
            this.isleader = true;
        }
    }

   public class Worker : Staff{
        public Worker(string n){
            this.name = n;
        }
   }
}

 

2. 정답

- 파일에서 이름이 같은 경우에는 해당 매니저 객체의 시간에 누적해야하므로 주어진 함수 chkManager/Worker을 이용하여 구해줍니다.  매니저와 직원 클래스의 경우, 문제에서 ILeave을 구체화하라고 했으나 각각할 필요없이 구체화된 함수는 아예 같은 내용이므로, 두 클래스의 부모 함수에서 구체화해주는 것이 좋습니다.

728x90

'Programming Language > C#' 카테고리의 다른 글

[C#] TQC+ 문제 CS_610:  (1) 2025.06.15
[C#] TQC+ 문제 CS_608:  (1) 2025.06.15
[C#] TQC+ 문제 CS_607:  (0) 2025.06.15
[C#] TQC+ 문제 CS_606:  (0) 2025.06.15
[C#] TQC+ 문제 CS_605:  (0) 2025.06.15