Hello Ocean! ๐ŸŒผ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] [1์ฐจ] ์…”ํ‹€๋ฒ„์Šค ๋ณธ๋ฌธ

Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] [1์ฐจ] ์…”ํ‹€๋ฒ„์Šค

bba_dda 2021. 12. 8. 18:17
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

๋ฌธ์ œ ๋งํฌ

์นด์นด์˜ค์—์„œ๋Š” ๋ฌด๋ฃŒ ์…”ํ‹€๋ฒ„์Šค๋ฅผ ์šดํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒ๊ต์—ญ์—์„œ ํŽธํ•˜๊ฒŒ ์‚ฌ๋ฌด์‹ค๋กœ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์นด์นด์˜ค์˜ ์ง์›์€ ์„œ๋กœ๋ฅผ 'ํฌ๋ฃจ'๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, ์•„์นจ๋งˆ๋‹ค ๋งŽ์€ ํฌ๋ฃจ๋“ค์ด ์ด ์…”ํ‹€์„ ์ด์šฉํ•˜์—ฌ ์ถœ๊ทผํ•œ๋‹ค.

์ด ๋ฌธ์ œ์—์„œ๋Š” ํŽธ์˜๋ฅผ ์œ„ํ•ด ์…”ํ‹€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ์šดํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

  • ์…”ํ‹€์€ 09:00๋ถ€ํ„ฐ ์ด nํšŒ t๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์—ญ์— ๋„์ฐฉํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ์…”ํ‹€์—๋Š” ์ตœ๋Œ€ m๋ช…์˜ ์Šน๊ฐ์ด ํƒˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์…”ํ‹€์€ ๋„์ฐฉํ–ˆ์„ ๋•Œ ๋„์ฐฉํ•œ ์ˆœ๊ฐ„์— ๋Œ€๊ธฐ์—ด์— ์„  ํฌ๋ฃจ๊นŒ์ง€ ํฌํ•จํ•ด์„œ ๋Œ€๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ํƒœ์šฐ๊ณ  ๋ฐ”๋กœ ์ถœ๋ฐœํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 09:00์— ๋„์ฐฉํ•œ ์…”ํ‹€์€ ์ž๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด 09:00์— ์ค„์„ ์„  ํฌ๋ฃจ๋„ ํƒˆ ์ˆ˜ ์žˆ๋‹ค.

์ผ์ฐ ๋‚˜์™€์„œ ์…”ํ‹€์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ์•˜๋˜ ์ฝ˜์€, ์ผ์ฃผ์ผ๊ฐ„์˜ ์ง‘์š”ํ•œ ๊ด€์ฐฐ ๋์— ์–ด๋–ค ํฌ๋ฃจ๊ฐ€ ๋ช‡ ์‹œ์— ์…”ํ‹€ ๋Œ€๊ธฐ์—ด์— ๋„์ฐฉํ•˜๋Š”์ง€ ์•Œ์•„๋ƒˆ๋‹ค. ์ฝ˜์ด ์…”ํ‹€์„ ํƒ€๊ณ  ์‚ฌ๋ฌด์‹ค๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋„์ฐฉ ์‹œ๊ฐ ์ค‘ ์ œ์ผ ๋Šฆ์€ ์‹œ๊ฐ์„ ๊ตฌํ•˜์—ฌ๋ผ.

๋‹จ, ์ฝ˜์€ ๊ฒŒ์œผ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์‹œ๊ฐ์— ๋„์ฐฉํ•œ ํฌ๋ฃจ ์ค‘ ๋Œ€๊ธฐ์—ด์—์„œ ์ œ์ผ ๋’ค์— ์„ ๋‹ค. ๋˜ํ•œ, ๋ชจ๋“  ํฌ๋ฃจ๋Š” ์ž ์„ ์ž์•ผ ํ•˜๋ฏ€๋กœ 23:59์— ์ง‘์— ๋Œ์•„๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ํฌ๋ฃจ๋„ ๋‹ค์Œ๋‚  ์…”ํ‹€์„ ํƒ€๋Š” ์ผ์€ ์—†๋‹ค.

์ž…๋ ฅ ํ˜•์‹

์…”ํ‹€ ์šดํ–‰ ํšŸ์ˆ˜ n, ์…”ํ‹€ ์šดํ–‰ ๊ฐ„๊ฒฉ t, ํ•œ ์…”ํ‹€์— ํƒˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํฌ๋ฃจ ์ˆ˜ m, ํฌ๋ฃจ๊ฐ€ ๋Œ€๊ธฐ์—ด์— ๋„์ฐฉํ•˜๋Š” ์‹œ๊ฐ์„ ๋ชจ์€ ๋ฐฐ์—ด timetable์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

  • 0 ๏ผœ n โ‰ฆ 10
  • 0 ๏ผœ t โ‰ฆ 60
  • 0 ๏ผœ m โ‰ฆ 45
  • timetable์€ ์ตœ์†Œ ๊ธธ์ด 1์ด๊ณ  ์ตœ๋Œ€ ๊ธธ์ด 2000์ธ ๋ฐฐ์—ด๋กœ, ํ•˜๋ฃจ ๋™์•ˆ ํฌ๋ฃจ๊ฐ€ ๋Œ€๊ธฐ์—ด์— ๋„์ฐฉํ•˜๋Š” ์‹œ๊ฐ์ด HH:MM ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ํฌ๋ฃจ์˜ ๋„์ฐฉ ์‹œ๊ฐ HH:MM์€ 00:01์—์„œ 23:59 ์‚ฌ์ด์ด๋‹ค.

์ถœ๋ ฅ ํ˜•์‹

์ฝ˜์ด ๋ฌด์‚ฌํžˆ ์…”ํ‹€์„ ํƒ€๊ณ  ์‚ฌ๋ฌด์‹ค๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ œ์ผ ๋Šฆ์€ ๋„์ฐฉ ์‹œ๊ฐ์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋„์ฐฉ ์‹œ๊ฐ์€ HH:MM ํ˜•์‹์ด๋ฉฐ, 00:00์—์„œ 23:59 ์‚ฌ์ด์˜ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

n t m timetable answer
1 1 5 ["08:00", "08:01", "08:02", "08:03"] "09:00"
2 10 2 ["09:10", "09:09", "08:00"] "09:09"
2 1 2 ["09:00", "09:00", "09:00", "09:00"] "08:59"
1 1 5 ["00:01", "00:01", "00:01", "00:01", "00:01"] "00:00"
1 1 1 ["23:59"] "09:00"
10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59",
"23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"]
"18:00"

ํ’€์ด

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ, ๋ชจ๋“  ๋ฒ„์Šค๋“ค์— ๋Œ€ํ•ด ์ฝ˜์ด ํƒˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ตฌํ•ด์„œ ๊ทธ ์ค‘์— ๊ฐ€์žฅ ๋Šฆ์€ ๋ฒ„์Šค๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ฑ„์ ์„ ํ•ด๋ณด๋‹ˆ 5,4,24๋ฒˆ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ํ‹€๋ ค์„œ ์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

์งˆ๋ฌธํ•˜๊ธฐ์˜ ์—ฌ๋Ÿฌ ๊ธ€ ์ค‘์—์„œ, ์ด ๊ธ€์„ ๋ณด๊ณ  ๋‚ด ์ ‘๊ทผ๋ฐฉ์‹์ด ์™„์ „ํžˆ ํ‹€๋ ธ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค.

 

์ฝ˜์ด ๋ฌด์กฐ๊ฑด ๋งˆ์ง€๋ง‰ ๋ฒ„์Šค์— ํƒ€๊ฒŒ ํ•ด์•ผํ•œ๋‹ค! ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์–ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•ด๋‹น ์งˆ๋ฌธํ•˜๊ธฐ ๊ธ€์„ ๋ณด๊ณ  ํ’€์ด๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒฐ๊ณผ, ๋” ์งง์€ ์ฝ”๋“œ๋กœ ์ •๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

โ˜†ํ•ต์‹ฌโ˜…์€,

์ฝ˜์„ ์ œ์™ธํ•˜๊ณ 

๋งˆ์ง€๋ง‰ ๋ฒ„์Šค์— ํƒ„ ์ธ์›์ด m๋ช…๋ณด๋‹ค ์ž‘์œผ๋ฉด, ์ฝ˜์€ ๋งˆ์ง€๋ง‰ ๋ฒ„์Šค ์ถœ๋ฐœ ์‹œ๊ฐ„์— ๋„์ฐฉํ•˜๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋งˆ์ง€๋ง‰ ๋ฒ„์Šค์— ํƒ„ ์ธ์›์ด m๋ช…์ด๋ฉด(๋งŒ์›์ด๋ฉด), ์ฝ˜์€ ๋งˆ์ง€๋ง‰ ๋ฒ„์Šค์˜ ๋งˆ์ง€๋ง‰ ํƒ‘์Šน๊ฐ๋ณด๋‹ค 1๋ถ„ ์ผ์ฐ ๋„์ฐฉํ•˜๋ฉด ๋œ๋‹ค.

์ฝ”๋“œ

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string minToStr(int min) {
    int h = min/60;
    int m = min%60;
    string result = "";
    if (h<10) result+="0";
    result+=to_string(h);
    result+=":";
    if (m<10) result+="0";
    result+=to_string(m);
    return result;
}
string solution(int n, int t, int m, vector<string> timetable) {
    string answer = "";
    int answerM;
    vector<int> timetableM;
    for (auto item: timetable) {
        int temp = 0;
        temp += stoi(item.substr(0,2))*60;
        temp += stoi(item.substr(3,2));
        timetableM.push_back(temp);
    }
    sort(timetableM.begin(), timetableM.end());
    int num = timetable.size();
    int busT, peo;
    int idx = 0;
    for(int i=0;i<n;i++) {
        busT = 540 + t*i;
        peo = 0;
        while(peo < m && idx < num && timetableM[idx] <= busT) {
            idx++;
            peo++;
        }
    }
    if   (peo < m) answerM = 540 + t*(n-1);
    else answerM = timetableM[idx-1] -1;
    answer = minToStr(answerM);
    return answer;
}

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•