코딩공부/프로그래머스

[프로그래머스]Lv.2 주차 요금 계산 C#

usingsystem 2023. 7. 17. 14:16
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/92341

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

소스코드

using System;
using System.Collections.Generic;
using System.Linq;
public class Solution
{
    public int[] solution(int[] fees, string[] records)
    {
        List<int> answer = new List<int>();

        int defTime = fees[0];
        int defPrice = fees[1];
        int unitTime = fees[2];
        int unitPrice = fees[3];

        Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>();
        for (int i = 0; i < records.Length; i++)
        {
            string[] strArr = records[i].Split(" ");
            string CarNumber = strArr[1];

            if (dic.ContainsKey(CarNumber) == false)
                dic.Add(CarNumber, records.Where(w => w.Contains(CarNumber)).OrderBy(o => o).ToList());
        }

        var sortDic = dic.OrderBy(o => o.Key);

        foreach (var item in sortDic)
        {
            int startT = 0;
            int endT = 0;

            int totalT = 0;
            for (int i = 0; i < item.Value.Count; i++)
            {
                string[] strArr = item.Value[i].Split(" ");
                string[] times = strArr[0].Split(":");
                int time = int.Parse(times[0]) * 60 + int.Parse(times[1]);
                string type = strArr[2];

                if (type.Equals("IN"))
                {
                    startT = time;
                }
                else
                {
                    totalT += time - startT;
                }
            }

            if (item.Value.Count % 2 == 1)
            {
                totalT += (24 * 60) - startT - 1;
            }

            int price = defPrice;
            if (defTime < totalT)
            {
                price += (((totalT - defTime) / unitTime)) * unitPrice;

                if (((totalT - defTime) % unitTime) != 0)
                    price += unitPrice;
            }

            answer.Add(price);
        }
        return answer.ToArray();
    }
}
728x90