2023. 11. 18. 00:10γCoding Test/Programmers
πλ¬Έμ 보λ¬κ°κΈ°
π¨π»νμ΄ κ³Όμ
μ λ¬Έμ₯ λ ν΄λ ₯μ νμκ° μλκ±΄μ§ λͺ°λΌλ, μ²μμ λ¬Έμ μ½κ³ λ¬΄μ¨ μλ¦¬μ§ νμμ΅λλ€. ν΅μ¬μ μ ν λ²μ€ μ΄ν νμμΈ \(n\) λ² λ΄μ μ¬λ¬΄μ€μ κ° μ μλ κ°μ₯ λ¦μ μκ°μ κ³ λ₯΄λ κ²μ΄μλ€μ. λ¨μ ꡬν λ¬Έμ μ΄κΈ΄ νλ°, μκ°κ³Ό κ΄λ ¨λ λ¬Έμ λ νμ κ³μ° λΆλΆμμ μ£Όμλ₯Ό κΈ°μΈμ¬μΌ νλ κ² κ°μ΅λλ€. μΌλ¨μ κ³μ°νκΈ° μ½κ², stringμ intλ‘ λ³ννλ μμ μ λ¨Όμ ν΄λ³΄μ£ .
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]));
κ·Έ ν, μ ν λ²μ€κ° μ΄ν νμμΈ \(n\) λ² λμ 루νλ₯Ό λλ©°, μ λ΅μ΄ λ μ μλ ν보 μκ°λλ€μ λ°°μ΄μ λ΄μ κ²λλ€.
μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°μ΅λλ€.
- λ²μ€κ° μΆλ°ν΄μΌ νλ μκ°λ³΄λ€ μκ±°λ κ°μ νμΉκ°λ€μ λͺ¨λ μ κ±°νλ©° μΉ΄μ΄ν
ν©λλ€.
- λ²μ€μ 첫 μΆλ° μκ°μ "09:00" μ λλ€.
- μ κ±°ν νμΉκ°μ μκ°μ λ°λ‘ μ μ₯ν΄ λ‘λλ€.
- μ΄ λ, λ²μ€μ ν νμΉκ°μ΄ μ΅λ μΈμ(m)μ΄ λλ€λ©΄ μ΄ λ‘μ§μ μ€λ¨ν©λλ€.
- νμ¬ λ²μ€μ ν νμΉκ°μ΄ μ΅λ μΈμ(m)λ³΄λ€ μ λ€λ©΄ "νμ¬ λ²μ€ μκ°"μ,
μλλΌλ©΄ "κ°μ₯ λ§μ§λ§μ ν νμΉκ° μκ° - 1"μ ν보 μκ°λλ‘ μ μ ν©λλ€.- κ°μ₯ λ§μ§λ§μ ν νμΉκ°λ³΄λ€ 1λΆ λΉ¨λ¦¬ μμΌ, λ²μ€μ ν μ μμΌλ©° κ°μ₯ λ¦κ² μ¬λ¬΄μ€μ κ° μ μμ΅λλ€.
- ν보 μκ°λλ‘ μ μ ν κ°μ ν보 μκ°λ λ°°μ΄μ λ΄μ΅λλ€.
- λ²μ€ μΆλ° μκ°μ \(t\) λΆ λν΄μ κ°±μ νκ³ , μ λ‘μ§μ \(n\) λ² λ°λ³΅ν©λλ€.
- ν보 μκ°λ λ°°μ΄μ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νκ³ , 첫 λ²μ§Έ μμλ₯Ό 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 |