https://school.programmers.co.kr/learn/courses/30/lessons/176962#
๋ฌธ์ ์ค๋ช
๊ณผ์ ๋ฅผ ๋ฐ์ ๋ฃจ๋ ๋ค์๊ณผ ๊ฐ์ ์์๋๋ก ๊ณผ์ ๋ฅผ ํ๋ ค๊ณ ๊ณํ์ ์ธ์ ์ต๋๋ค.
- ๊ณผ์ ๋ ์์ํ๊ธฐ๋ก ํ ์๊ฐ์ด ๋๋ฉด ์์ํฉ๋๋ค.
- ์๋ก์ด ๊ณผ์ ๋ฅผ ์์ํ ์๊ฐ์ด ๋์์ ๋, ๊ธฐ์กด์ ์งํ ์ค์ด๋ ๊ณผ์ ๊ฐ ์๋ค๋ฉด ์งํ ์ค์ด๋ ๊ณผ์ ๋ฅผ ๋ฉ์ถ๊ณ ์๋ก์ด ๊ณผ์ ๋ฅผ ์์ํฉ๋๋ค.
- ์งํ์ค์ด๋ ๊ณผ์ ๋ฅผ ๋๋์ ๋, ์ ์ ๋ฉ์ถ ๊ณผ์ ๊ฐ ์๋ค๋ฉด, ๋ฉ์ถฐ๋ ๊ณผ์ ๋ฅผ ์ด์ด์ ์งํํฉ๋๋ค.
- ๋ง์ฝ, ๊ณผ์ ๋ฅผ ๋๋ธ ์๊ฐ์ ์๋ก ์์ํด์ผ ๋๋ ๊ณผ์ ์ ์ ์ ๋ฉ์ถฐ๋ ๊ณผ์ ๊ฐ ๋ชจ๋ ์๋ค๋ฉด, ์๋ก ์์ํด์ผ ํ๋ ๊ณผ์ ๋ถํฐ ์งํํฉ๋๋ค.
- ๋ฉ์ถฐ๋ ๊ณผ์ ๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์ต๊ทผ์ ๋ฉ์ถ ๊ณผ์ ๋ถํฐ ์์ํฉ๋๋ค.
๊ณผ์ ๊ณํ์ ๋ด์ ์ด์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด plans๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ณผ์ ๋ฅผ ๋๋ธ ์์๋๋ก ์ด๋ฆ์ ๋ฐฐ์ด์ ๋ด์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 3 ≤ plans์ ๊ธธ์ด ≤ 1,000
- plans์ ์์๋ [name, start, playtime]์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- name : ๊ณผ์ ์ ์ด๋ฆ์ ์๋ฏธํฉ๋๋ค.
- 2 ≤ name์ ๊ธธ์ด ≤ 10
- name์ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- name์ด ์ค๋ณต๋๋ ์์๋ ์์ต๋๋ค.
- start : ๊ณผ์ ์ ์์ ์๊ฐ์ ๋ํ๋
๋๋ค.
- "hh:mm"์ ํํ๋ก "00:00" ~ "23:59" ์ฌ์ด์ ์๊ฐ๊ฐ๋ง ๋ค์ด๊ฐ ์์ต๋๋ค.
- ๋ชจ๋ ๊ณผ์ ์ ์์ ์๊ฐ์ ๋ฌ๋ผ์ ๊ฒน์น ์ผ์ด ์์ต๋๋ค.
- ๊ณผ์ ๋ "00:00" ... "23:59" ์์ผ๋ก ์์ํ๋ฉด ๋ฉ๋๋ค. ์ฆ, ์์ ๋ถ์ ๊ฐ์ด ์์์๋ก ๋ ๋นจ๋ฆฌ ์์ํ ๊ณผ์ ์ ๋๋ค.
- playtime : ๊ณผ์ ๋ฅผ ๋ง์น๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ฏธํ๋ฉฐ, ๋จ์๋ ๋ถ์
๋๋ค.
- 1 ≤ playtime ≤ 100
- playtime์ 0์ผ๋ก ์์ํ์ง ์์ต๋๋ค.
- ๋ฐฐ์ด์ ์๊ฐ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ง ์์ ์ ์์ต๋๋ค.
- name : ๊ณผ์ ์ ์ด๋ฆ์ ์๋ฏธํฉ๋๋ค.
- plans์ ์์๋ [name, start, playtime]์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ์งํ์ค์ด๋ ๊ณผ์ ๊ฐ ๋๋๋ ์๊ฐ๊ณผ ์๋ก์ด ๊ณผ์ ๋ฅผ ์์ํด์ผํ๋ ์๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ์งํ์ค์ด๋ ๊ณผ์ ๋ ๋๋ ๊ฒ์ผ๋ก ํ๋จํฉ๋๋ค.
์ ์ถ๋ ฅ ์
plans | result |
[["korean", "11:40", "30"], ["english", "12:10", "20"], ["math", "12:30", "40"]] | ["korean", "english", "math"] |
[["science", "12:40", "50"], ["music", "12:20", "40"], ["history", "14:00", "30"], ["computer", "12:30", "100"]] | ["science", "history", "computer", "music"] |
[["aaa", "12:00", "20"], ["bbb", "12:10", "30"], ["ccc", "12:40", "10"]] | ["bbb", "ccc", "aaa"] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
"korean", "english", "math"์์ผ๋ก ๊ณผ์ ๋ฅผ ์์ํฉ๋๋ค. "korean" ๊ณผ์ ๋ฅผ "11:40"์ ์์ํ์ฌ 30๋ถ ํ์ธ "12:10"์ ๋ง์น๊ณ , ์ฆ์ "english" ๊ณผ์ ๋ฅผ ์์ํฉ๋๋ค. 20๋ถ ํ์ธ "12:30"์ "english" ๊ณผ์ ๋ฅผ ๋ง์น๊ณ , ์ฆ์ "math" ๊ณผ์ ๋ฅผ ์์ํฉ๋๋ค. 40๋ถ ํ์ธ "01:10"์ "math" ๊ณผ์ ๋ฅผ ๋ง์นฉ๋๋ค. ๋ฐ๋ผ์ "korean", "english", "math" ์์ผ๋ก ๊ณผ์ ๋ฅผ ๋๋ด๋ฏ๋ก ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์ ๋ฐํํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
"music", "computer", "science", "history" ์์ผ๋ก ๊ณผ์ ๋ฅผ ์์ํฉ๋๋ค.
์๊ฐ | ์งํ ์ค | ์ ์ ๋ฉ์ถ ๊ณผ์ | ์ค๋ช |
"12:20" | "music" | [ ] | "music"์ ์์ํฉ๋๋ค. |
"12:30" | "computer" | ["music"] | "music"์ ์ ์ ๋ฉ์ถ๊ณ (๋จ์ ์๊ฐ 30๋ถ) "computer"๋ฅผ ์์ํฉ๋๋ค |
"12:40" | "science" | ["music", "computer"] | "computer"๋ฅผ ์ ์ ๋ฉ์ถ๊ณ (๋จ์ ์๊ฐ 90๋ถ) "science"๋ฅผ ์์ํฉ๋๋ค |
"13:30" | "computer" | ["music"] | "science"๋ฅผ ๋๋ด๊ณ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฉ์ถ "computer"๋ฅผ ๋ค์ ์์ํฉ๋๋ค |
"14:00" | "history" | ["music", "computer"] | "computer"๋ฅผ ์ ์ ๋ฉ์ถ๊ณ (๋จ์ ์๊ฐ 60๋ถ) "history"๋ฅผ ์์ํฉ๋๋ค |
"14:30" | "computer" | ["music"] | "history"๋ฅผ ๋๋ด๊ณ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฉ์ถ "computer"๋ฅผ ๋ค์ ์์ํฉ๋๋ค" |
"15:30" | "music" | [ ] | "computer"๋ฅผ ๋๋ด๊ณ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฉ์ถ "music"์ ๋ค์ ์์ํฉ๋๋ค" |
"16:00" | - | [ ] | "music"์ ๋๋ ๋๋ค |
๋ฐ๋ผ์ ["science", "history", "computer", "music"] ์์๋ก ๊ณผ์ ๋ฅผ ๋ง์นฉ๋๋ค.
๋ด ํ์ด
์ ์ ๋ฉ์ถฐ๋ ๊ณผ์ ๋ ์ต๊ทผ์ ๋ฉ์ท๋ ๊ณผ์ ๋ถํฐ ๋ค์ ์คํ๋๊ธฐ ๋๋ฌธ์ stack์ผ๋ก ๋ณด๊ดํ๋ค.
๊ฐ์ธ์ ์ผ๋ก plans์ ์ธ๋ฑ์ค๋ฅผ ์ด๊ณผํ์ฌ ์ ๊ทผํ์ง ์๋๋ก ์กฐ์ฌํ๋ฉด์ ์์ธ์ฒ๋ฆฌํ๋๊ฒ ์กฐ๊ธ ๊น๋ค๋ก์ ๋ ๊ฒ ๊ฐ๋ค.
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <iostream>
using namespace std;
int TimeToInt(string t)
{
return (60 * stoi(t.substr(0, 2))) + stoi(t.substr(3));
}
bool SortPlans(vector<string> v1, vector<string> v2)
{
return TimeToInt(v1[1]) < TimeToInt(v2[1]);
}
vector<string> solution(vector<vector<string>> plans) {
vector<string> answer;
stack<pair<string, int>> paused_plans;
sort(plans.begin(), plans.end(), SortPlans);
int cur_time = TimeToInt(plans[0][1]);
int next_time = TimeToInt(plans[1][1]);
int cur_subject = 0;
while(cur_subject < plans.size() || !paused_plans.empty())
{
// ๋ฉ์ถฐ๋๋ ๊ณผ์ ์ฒ๋ฆฌ
if(!paused_plans.empty())
{
// ๋ง์ง๋ง ์์ ๊ณผ์ ์ฒ๋ฆฌ๊ฐ ๋๋ฌ๋ค๋ฉด
if(cur_subject == plans.size())
{
answer.emplace_back(paused_plans.top().first);
paused_plans.pop();
continue;
}
// ํ์ฌ ์๊ฐ์ด ๋ค์ ๊ณผ์ ์คํ ์๊ฐ๋ณด๋ค ์๋ค๋ฉด
if(cur_time < next_time)
{
int remain_time = paused_plans.top().second;
int available_time = next_time - cur_time;
// ๊ณผ์ ์ฒ๋ฆฌ ์๋ฃ
if(remain_time <= available_time)
{
answer.emplace_back(paused_plans.top().first);
paused_plans.pop();
cur_time += remain_time;
}
// ๊ณผ์ ์ฒ๋ฆฌ ๋ฏธ์๋ฃ
else
{
paused_plans.top().second = remain_time - available_time;
cur_time = next_time;
}
continue;
}
}
// ๋ค์ ๊ณผ์ ์ฒ๋ฆฌ
cur_time = TimeToInt(plans[cur_subject][1]) + stoi(plans[cur_subject][2]);
next_time = cur_subject+1 >= plans.size() ? 1440 : TimeToInt(plans[cur_subject+1][1]);
if(cur_time > next_time)
{
// ๊ณผ์ ๋ฉ์ถค
paused_plans.push({plans[cur_subject][0], cur_time - next_time});
cur_time = next_time;
}
else
{
// ๊ณผ์ ์๋ฃ
answer.emplace_back(plans[cur_subject][0]);
}
++cur_subject;
}
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - N๊ฐ์ ์ต์๊ณต๋ฐฐ์(C++) (0) | 2023.07.03 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์ ํ์ ์๊ฐ ์ด๋(C++) (0) | 2023.06.30 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์์ ๋์งํ(C++) (0) | 2023.06.28 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ๊ด๋ฌผ ์บ๊ธฐ(C++) (0) | 2023.06.26 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ํ๋ ฌ์ ๊ณฑ์ (C++) (0) | 2023.06.25 |