• Home
  • About
    • Dochoi의 소소한 코딩 모음 photo

      Dochoi의 소소한 코딩 모음

      코딩을 하면서 느낀점들을 모은 공간입니다.

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
    • AI
    • Algorithm
    • Algorithm-Test
    • Cloud
    • Docker
    • Kubernetes
    • iOS
    • Culture
  • Projects

[프로그래머스] : [1차]셔틀버스

16 Jun 2020

Reading time ~1 minute

algorithm-test
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

void parse_time(string &s, int *hour, int *min)
{
    *hour = 0;
    *min = 0;
    for(int i = 0; i < 5; i++)
    {
        if (i < 2)
            *hour = *hour * 10 + s[i] - '0';
        else if ( i > 2)
            *min  = *min * 10 + s[i] - '0';
    }
}

string solution(int n, int t, int m, vector<string> timetable) {
    string answer = "";
    vector<int> v;
    int answer_int = 0;
    
    for(int i = 0; i < timetable.size(); i++) // 시간을 int로 변환
    {
        int hour, min;
        parse_time(timetable[i], &hour, &min);
        v.push_back(hour * 60 + min);
    }
    sort(v.begin(), v.end());
    int base_time = 9 * 60; // 09 : 00 시
    int cur_idx = 0; //현재 사람
    int available = m; 
    while (1)
    {
        if (v[cur_idx] > base_time || available == 0 || v.size() == cur_idx)//탈 사람이 없으면 or 만차이면 or 모든 사람을 태워버렸다면
        {
            n--; //다음버스
            if (n == 0) //마지막 버스였다면
            {
                if (available != 0)// 자리가 있었다면
                    answer_int = base_time;
                else //자리가 없었다면
                  answer_int = v[cur_idx - 1] - 1; //cur_idx는 0이 아닐 것이므로
                break;
                
            }
           available = m; // 인원 가용수 초기화
            base_time += t; // 다음시간
        }
        else
        {
            if (v[cur_idx] <= base_time) // 탈 사람이 있으면
            {
                available--; // 인원을 하나 줄이고
                cur_idx++;// 다음인원으로 넘어간다.
            }
        }
    }
    if (answer_int / 60 < 10) // 역파싱
        answer = '0';
    answer.append(to_string(answer_int/ 60));
        answer += ':';
        if (answer_int % 60 < 10)
        answer += '0';
    answer.append(to_string(answer_int % 60));
    return answer;
}

구현방법

HH:MM 형태로 되어있는 String 배열을 int형태로 바꿔서

내림차순으로 sort 한 후 시뮬레이션을 돌린다.

만약 마지막 버스에서 자리가 있었다면 마지막 버스의 출발시간이고,

자리가 없었다면 마지막으로 탄 사람보다 1분 일찍온다.



Algorithm-TestProgrammersKakao Share Tweet +1