- 3κ°μ μ°λ κΈ° μ’
λ₯κ° μμΌλ©° ν λ²μ ν μ’
λ₯ μ© μ°λ κΈ° μκ±° νΈλμ 보λ΄μ μ²λ¦¬νλλ° κ±Έλ¦¬λ μκ°μ ν©μ ꡬνλ©΄ λλ€.
- νλ²μ ν μ’
λ₯μ© μκ±°κ° κ°λ₯νλ―λ‘ κ° μ°λ κΈ° μ’
λ₯λ₯Ό μκ±°νλλ° κ±Έλ¦¬λ μκ°μ λ
립μ μΌλ‘ κ³μ°ν μ μλ€.
- λ€λ§ μ°λ κΈ° μκ±° νΈλμ΄ λͺ¨λ μ§μ λ°©λ¬Έν΄μΌ νλ κ²μ μλλ―λ‘ μ΄λ μκ°
travel
μ ν©μ μ°λ κΈ° μ’
λ₯ λ³λ‘ λ€λ₯Ό μ μλλ° μ΄λ prefixed sum μ μ¬μ©νμ¬ λ―Έλ¦¬ κ³μ°ν΄ λ μ μλ€.
- κ° μ°λ κΈ° μκ±° νΈλμ΄ λ°©λ¬Έν΄μΌ λλ λ§μ§λ§ μ§μ indexλ₯Ό κΈ°μ΅ν΄λμλ€κ° prefixed sumμΌλ‘ ꡬν ν΄λΉ μ§μ κΉμ§μ μ΄λ 거리 ν©μ κ²°κ³Όμ λνλ©΄ λλ€.
- μ°λ κΈ°λ₯Ό μκ±°νλ μκ° μ체λ κ΅³μ΄ μ°λ κΈ° μ’
λ₯ λ³λ‘ μ
νμ μμ΄ ν΄λΉ μ§μ μ°λ κΈ° μ«μ
garbage[i].length()
λ₯Ό λνμ¬ νλ²μ ꡬν΄λ λλ€.
- μ΄ λ¬Έμ λ₯Ό μ‘°κΈ λ³ννλ€λ©΄ λ€μκ³Ό κ°μ λ°©μμΌλ‘ κ°λ₯ν κ² κ°λ€.
- μ°λ κΈ° μ’
λ₯κ° 3κ°μ§κ° μλ Nκ°μ§μΈ κ²½μ°
- μ°λ κΈ° μ’
λ₯ λ³λ‘ μλ‘ λ€λ₯Έ μ²λ¦¬ μκ°μ΄ 걸리λ κ²½μ°
- λμμ κ° μ°λ κΈ° μ’
λ₯ λ³ νΈλμ΄ μκ±°ν μ μλ κ²½μ°
- λμμ μκ±° κ°λ₯νμ§λ§ κ°μ μ§μ λ°©λ¬Ένλ κ²½μ° λμ€μ λ°©λ¬Έν νΈλμ΄ λκΈ°ν΄μΌ νλ κ²½μ°
enum GarbageType {
Empty = 0,
Metal = 1,
Paper = 2,
Glass = 4,
};
inline GarbageType operator | (GarbageType lhs, GarbageType rhs) {
return static_cast<GarbageType>(
static_cast<int>(lhs) | static_cast<int>(rhs)
);
}
inline GarbageType operator & (GarbageType lhs, GarbageType rhs) {
return static_cast<GarbageType>(
static_cast<int>(lhs) & static_cast<int>(rhs)
);
}
class Solution {
public:
GarbageType checkType(string& garbage) {
GarbageType type = Empty;
for (auto g : garbage) {
switch (g) {
case 'M': type = type | Metal; break;
case 'P': type = type | Paper; break;
case 'G': type = type | Glass; break;
}
}
return type;
}
int garbageCollection(vector<string>& garbage, vector<int>& travel) {
int result = garbage[0].length();
vector<int> lastIndex(3, 0);
for (int i = 1; i < travel.size(); ++i) {
travel[i] += travel[i - 1];
}
for (int i = 1; i < garbage.size(); ++i) {
auto type = checkType(garbage[i]);
result += garbage[i].length();
if (type & Metal) lastIndex[0] = i;
if (type & Paper) lastIndex[1] = i;
if (type & Glass) lastIndex[2] = i;
}
for (auto index : lastIndex) {
if (index > 0) result += travel[index - 1];
}
return result;
}
};