5 kyu
上下班遇到下雨帶傘,可能會因為沒下雨放在公司或家裡;計算需要的雨傘數量。
使用 switch 做不同處理。
for loop 跑迴圈,表示經過所有天氣。
根據天氣修改紀錄雨傘的變數。
let umbrella = 0
for(loop array)
switch(array[i])
case "no rain"
if(umbrella !== 0) umbrella--;
case "rain"
umbrella++
function minUmbrellas(weather) {
let umbrella = {
home: 0,
company: 0
};
for (let i = 0; i < weather.length; i++) {
if (weather[i] === 'rainy' || weather[i] === 'thunderstorms') {
if (i % 2 == 0 && umbrella["home"] == 0) {
umbrella["company"]++;
}
if (i % 2 == 1 && umbrella["company"] == 0) {
umbrella["home"]++;
}
if (i % 2 == 0 && umbrella["home"] !== 0) {
umbrella["home"]--;
umbrella["company"]++;
}
if (i % 2 == 1 && umbrella["company"] !== 0) {
umbrella["home"]++;
umbrella["company"]--;
}
}
}
return umbrella["home"] + umbrella["company"];
}
陣列的序列是以 家 ⇒ 公司,然後反覆切換為序列。
並且除了下雨與否之外,又分為目前所在地有傘、沒傘的差別。
用 umbrella 物件來記錄存放在這兩地的雨傘數量,並且預設為 0。
會有雨傘變化的時候只有下雨天,其他天氣條件可以無視;
所以只驗證天氣 rainy 和 thunderstorms 的時候。
再分成四個情境去判斷物件的增減:
最後合併兩地的傘,即為答案。
function minUmbrellas(weather) {
let home = 0;
let office = 0;
for (let i = 0; i < weather.length; i++) {
if (["thunderstorms", "rainy"].includes(weather[i])) {
if (i%2) {
if (home) home--;
office++;
} else {
if (office) office--;
home++;
}
}
}
return home + office;
}
其實也是同樣的概念,但寫的更簡潔了。
includes 會回傳布林值,如果為 true 會進行內部的 if else。
同樣會判斷四個情境條件,最後相加兩地的雨傘數量
第十天!鐵人賽終於進行到三分之一了!