2023. 11. 18. 00:10ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐จโ๐ปํ์ด ๊ณผ์
์ ๋ฌธ์ฅ ๋
ํด๋ ฅ์ ํ์๊ฐ ์๋๊ฑด์ง ๋ชฐ๋ผ๋, ์ฒ์์ ๋ฌธ์ ์ฝ๊ณ ๋ฌด์จ ์๋ฆฌ์ง ํ์์ต๋๋ค. ํต์ฌ์ ์
ํ ๋ฒ์ค ์ดํ ํ์์ธ
1. String ๐๐ป Int๋ก ๋ณํํ๋ ํจ์ ์์ฑ
์ฃผ์ด์ง๋ ์๊ฐ์ "HH:MM" ํํ๋ฅผ ๋๊ณ ์๋ค๊ณ ๋ฌธ์ ์์ ์๋ ค์ฃผ์์ต๋๋ค. ์ด ๋ฌธ์์ด์์ ์๊ฐ(hour) ๋ถ๋ถ๊ณผ ๋ถ(minute) ๋ถ๋ถ์ ์ถ์ถํด์ผ๊ฒ ๋ค์. ๊ทธ ํ, Int๋ก ๋ณํํด์ ๊ด๋ฆฌ๋ฅผ ํ ๊ฑด๋ฐ, ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋จ์๋ฅผ ๋ถ(minute)์ผ๋ก ๋ง๋ค๊ฒ ์ต๋๋ค.
const int UNIT = 60;
int ConvertStringToMinuteInt(const string& time) {
int hour = stoi(time.substr(0, 2));
int minute = stoi(time.substr(3, 2));
return hour * UNIT + minute;
}
2. Int ๐๐ป String์ผ๋ก ๋ณํํ๋ ํจ์ ์์ฑ
๊ฒฐ๊ตญ ์ ๋ต์ผ๋ก ๋ฆฌํดํด์ค์ผ ํ๋ ๊ฒ์ string์ด๊ธฐ ๋๋ฌธ์, ๋ค์ ์๋๋๋ก ๋ณต๊ตฌํ๋ ์์ ๋ํ ํ์ํฉ๋๋ค. ๋ค๋ง, ์ฃผ์ํ ์ ์ด ์๊ฐ์ด๋ ๋ถ์ด๋ ๋ชจ๋ ๋ ์๋ฆฌ์ฉ ์ฐจ์งํ๋ค๋ ๊ฒ์ด์ฃ . ์๋ฅผ ๋ค์ด, 9์ 5๋ถ์ด๋ผ๋ ๋ฆฌํด์ "09:05"๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค. ์ด ๋ถ๋ถ๋ง ์ฃผ์ํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
string ConvertMinuteIntToString(const int& time) {
int hour = time / UNIT;
int minute = time % UNIT;
string strHour = to_string(hour);
if (strHour.length() < 2)
strHour.insert(0, "0");
string strMinute = to_string(minute);
if (strMinute.length() < 2)
strMinute.insert(0, "0");
string result = strHour + ":" + strMinute;
return result;
}
3. ๋ณธ๊ฒฉ์ ์ธ ๋ก์ง ๊ตฌ์ฑํ๊ธฐ
์ฌ์ ์ค๋น๋ ๋ค ํ์ผ๋, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ก์ง ๊ตฌ์ฑ์ ํด๋ณผ ๊ฒ๋๋ค. ์ฐ์ , ์ฃผ์ด์ง timetable์ int๋ก ๋ณํํ์ฌ multiset์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ผ๋ก ์์ํ ๊ฒ๋๋ค. 1)์ค๋ณต ํค ๊ฐ์ด ํ์ฉ๋๊ณ , 2)์ญ์ ์ ์ค๋ฒํค๋๊ฐ ์ ์ผ๋ฉฐ, 3)์ ๋ ฌ์ด ๋๋ค๋ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ด์ฃ .
int N = timetable.size();
multiset<int> intTimes;
for (int i = 0; i < N; i++)
intTimes.emplace(ConvertStringToMinuteInt(timetable[i]));
๊ทธ ํ, ์
ํ ๋ฒ์ค๊ฐ ์ดํ ํ์์ธ
์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฒ์ค๊ฐ ์ถ๋ฐํด์ผ ํ๋ ์๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ํ์น๊ฐ๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๋ฉฐ ์นด์ดํ
ํฉ๋๋ค.
- ๋ฒ์ค์ ์ฒซ ์ถ๋ฐ ์๊ฐ์ "09:00" ์ ๋๋ค.
- ์ ๊ฑฐํ ํ์น๊ฐ์ ์๊ฐ์ ๋ฐ๋ก ์ ์ฅํด ๋ก๋๋ค.
- ์ด ๋, ๋ฒ์ค์ ํ ํ์น๊ฐ์ด ์ต๋ ์ธ์(m)์ด ๋๋ค๋ฉด ์ด ๋ก์ง์ ์ค๋จํฉ๋๋ค.
- ํ์ฌ ๋ฒ์ค์ ํ ํ์น๊ฐ์ด ์ต๋ ์ธ์(m)๋ณด๋ค ์ ๋ค๋ฉด "ํ์ฌ ๋ฒ์ค ์๊ฐ"์,
์๋๋ผ๋ฉด "๊ฐ์ฅ ๋ง์ง๋ง์ ํ ํ์น๊ฐ ์๊ฐ - 1"์ ํ๋ณด ์๊ฐ๋๋ก ์ ์ ํฉ๋๋ค.- ๊ฐ์ฅ ๋ง์ง๋ง์ ํ ํ์น๊ฐ๋ณด๋ค 1๋ถ ๋นจ๋ฆฌ ์์ผ, ๋ฒ์ค์ ํ ์ ์์ผ๋ฉฐ ๊ฐ์ฅ ๋ฆ๊ฒ ์ฌ๋ฌด์ค์ ๊ฐ ์ ์์ต๋๋ค.
- ํ๋ณด ์๊ฐ๋๋ก ์ ์ ํ ๊ฐ์ ํ๋ณด ์๊ฐ๋ ๋ฐฐ์ด์ ๋ด์ต๋๋ค.
- ๋ฒ์ค ์ถ๋ฐ ์๊ฐ์
๋ถ ๋ํด์ ๊ฐฑ์ ํ๊ณ , ์ ๋ก์ง์ ๋ฒ ๋ฐ๋ณตํฉ๋๋ค. - ํ๋ณด ์๊ฐ๋ ๋ฐฐ์ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , ์ฒซ ๋ฒ์งธ ์์๋ฅผ String์ผ๋ก ๋ณํํ์ฌ ๋ฆฌํดํฉ๋๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ, ๋ฌธ์ ๋ฅผ ํ ์ ์์์ต๋๋ค.
๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
const int UNIT = 60;
int ConvertStringToMinuteInt(const string& time) {
int hour = stoi(time.substr(0, 2));
int minute = stoi(time.substr(3, 2));
return hour * UNIT + minute;
}
string ConvertMinuteIntToString(const int& time) {
int hour = time / UNIT;
int minute = time % UNIT;
string strHour = to_string(hour);
if (strHour.length() < 2)
strHour.insert(0, "0");
string strMinute = to_string(minute);
if (strMinute.length() < 2)
strMinute.insert(0, "0");
string result = strHour + ":" + strMinute;
return result;
}
string solution(int n, int t, int m, vector<string> timetable) {
int N = timetable.size();
multiset<int> intTimes;
for (int i = 0; i < N; i++)
intTimes.emplace(ConvertStringToMinuteInt(timetable[i]));
int busTime = 9 * UNIT;
int runCount = 0;
vector<int> answers;
while (runCount < n) {
int passengerCount = 0;
int lastPassengerTime = 0;
while (!intTimes.empty() and *intTimes.begin() <= busTime) {
passengerCount++;
lastPassengerTime = *intTimes.begin();
intTimes.erase(intTimes.begin());
if (passengerCount == m)
break;
}
int boardingTime = (passengerCount < m) ? busTime : lastPassengerTime - 1;
answers.emplace_back(boardingTime);
busTime += t;
runCount++;
}
sort(answers.begin(), answers.end(), greater<int>());
return ConvertMinuteIntToString(answers[0]);
}

'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv3. ํฉ์น ํ์ ์๊ธ | C++ (0) | 2024.01.16 |
---|---|
[Programmers] Lv3. ๋ถ๋๋ณต๊ท | C++ (0) | 2024.01.13 |
[Programmers] Lv3. ์ฌ ์ฐ๊ฒฐํ๊ธฐ | C++ (1) | 2023.10.22 |
[Programmers] Lv3. ๊ฐ์ฅ ๋จผ ๋ ธ๋ | C++ (0) | 2023.10.22 |
[Programmers] Lv3. [์นด์นด์ค ์ธํด] ๋ณด์ ์ผํ | C++ (0) | 2023.10.22 |