์ด๋ค ๊ฒ์์๋ ๋ถ๋ ๊ฐ๊ธฐ๋ผ๋ ๊ธฐ์ ์ด ์์ต๋๋ค.
๋ถ๋ ๊ฐ๊ธฐ๋ t์ด ๋์ ๋ถ๋๋ฅผ ๊ฐ์ผ๋ฉด์ 1์ด๋ง๋ค x๋งํผ์ ์ฒด๋ ฅ์ ํ๋ณตํฉ๋๋ค. t์ด ์ฐ์์ผ๋ก ๋ถ๋๋ฅผ ๊ฐ๋ ๋ฐ ์ฑ๊ณตํ๋ค๋ฉด y๋งํผ์ ์ฒด๋ ฅ์ ์ถ๊ฐ๋ก ํ๋ณตํฉ๋๋ค. ๊ฒ์ ์บ๋ฆญํฐ์๋ ์ต๋ ์ฒด๋ ฅ์ด ์กด์ฌํด ํ์ฌ ์ฒด๋ ฅ์ด ์ต๋ ์ฒด๋ ฅ๋ณด๋ค ์ปค์ง๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ธฐ์ ์ ์ฐ๋ ๋์ค ๋ชฌ์คํฐ์๊ฒ ๊ณต๊ฒฉ์ ๋นํ๋ฉด ๊ธฐ์ ์ด ์ทจ์๋๊ณ , ๊ณต๊ฒฉ์ ๋นํ๋ ์๊ฐ์๋ ์ฒด๋ ฅ์ ํ๋ณตํ ์ ์์ต๋๋ค. ๋ชฌ์คํฐ์๊ฒ ๊ณต๊ฒฉ๋นํด ๊ธฐ์ ์ด ์ทจ์๋นํ๊ฑฐ๋ ๊ธฐ์ ์ด ๋๋๋ฉด ๊ทธ ์ฆ์ ๋ถ๋ ๊ฐ๊ธฐ๋ฅผ ๋ค์ ์ฌ์ฉํ๋ฉฐ, ์ฐ์ ์ฑ๊ณต ์๊ฐ์ด 0์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
๋ชฌ์คํฐ์ ๊ณต๊ฒฉ์ ๋ฐ์ผ๋ฉด ์ ํด์ง ํผํด๋๋งํผ ํ์ฌ ์ฒด๋ ฅ์ด ์ค์ด๋ญ๋๋ค. ์ด๋, ํ์ฌ ์ฒด๋ ฅ์ด 0 ์ดํ๊ฐ ๋๋ฉด ์บ๋ฆญํฐ๊ฐ ์ฃฝ์ผ๋ฉฐ ๋ ์ด์ ์ฒด๋ ฅ์ ํ๋ณตํ ์ ์์ต๋๋ค.
๋น์ ์ ๋ถ๋๊ฐ๊ธฐ ๊ธฐ์ ์ ์ ๋ณด, ์บ๋ฆญํฐ๊ฐ ๊ฐ์ง ์ต๋ ์ฒด๋ ฅ๊ณผ ๋ชฌ์คํฐ์ ๊ณต๊ฒฉ ํจํด์ด ์ฃผ์ด์ง ๋ ์บ๋ฆญํฐ๊ฐ ๋๊น์ง ์์กดํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๋ถ๋ ๊ฐ๊ธฐ ๊ธฐ์ ์ ์์ ์๊ฐ, 1์ด๋น ํ๋ณต๋, ์ถ๊ฐ ํ๋ณต๋์ ๋ด์ 1์ฐจ์ ์ ์ ๋ฐฐ์ด bandage์ ์ต๋ ์ฒด๋ ฅ์ ์๋ฏธํ๋ ์ ์ health, ๋ชฌ์คํฐ์ ๊ณต๊ฒฉ ์๊ฐ๊ณผ ํผํด๋์ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด attacks๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ๋ชจ๋ ๊ณต๊ฒฉ์ด ๋๋ ์งํ ๋จ์ ์ฒด๋ ฅ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ๋ง์ฝ ๋ชฌ์คํฐ์ ๊ณต๊ฒฉ์ ๋ฐ๊ณ ์บ๋ฆญํฐ์ ์ฒด๋ ฅ์ด 0 ์ดํ๊ฐ ๋์ด ์ฃฝ๋๋ค๋ฉด -1์ return ํด์ฃผ์ธ์.
์ ํ์ฌํญ
- bandage๋ [์์ ์๊ฐ, ์ด๋น ํ๋ณต๋, ์ถ๊ฐ ํ๋ณต๋] ํํ์ ๊ธธ์ด๊ฐ 3์ธ ์ ์ ๋ฐฐ์ด์
๋๋ค.
- 1 ≤ ์์ ์๊ฐ = t ≤ 50
- 1 ≤ ์ด๋น ํ๋ณต๋ = x ≤ 100
- 1 ≤ ์ถ๊ฐ ํ๋ณต๋ = y ≤ 100
- 1 ≤ health ≤ 1,000
- 1 ≤ attacks์ ๊ธธ์ด ≤ 100
- attacks[i]๋ [๊ณต๊ฒฉ ์๊ฐ, ํผํด๋] ํํ์ ๊ธธ์ด๊ฐ 2์ธ ์ ์ ๋ฐฐ์ด์ ๋๋ค.
- attacks๋ ๊ณต๊ฒฉ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ ์ํ์ ๋๋ค.
- attacks์ ๊ณต๊ฒฉ ์๊ฐ์ ๋ชจ๋ ๋ค๋ฆ ๋๋ค.
- 1 ≤ ๊ณต๊ฒฉ ์๊ฐ ≤ 1,000
- 1 ≤ ํผํด๋ ≤ 100
๋์ ํ์ด
function solution(bandage, health, attacks) {
// t์ด : ๋ถ๋๊ฐ๋ ์๊ฐ
// x : 1์ด๋ง๋ค ํ๋ณตํ๋ ์ฒด๋ ฅ๋
// y : t์ด ์ฐ์ ๋ถ๋๊ฐ๊ธฐ ์ฑ๊ณต ์ ์ถ๊ฐ ํ๋ณตํ๋ ์ฒด๋ ฅ๋
// bandage : [๊ธฐ์ ์์ ์๊ฐ, 1์ด๋น ํ๋ณต๋(x), ์ถ๊ฐํ๋ณต๋(y)]
// health : ์ต๋์ฒด๋ ฅ
// attacks : [๋ชฌ์คํฐ๊ณต๊ฒฉ์๊ฐ, ํผํด๋]
// ** ์ฒด๋ ฅ์ ์ต๋ ์ฒด๋ ฅ์ ๋๊ธธ ์ ์๋ค.
// ** ์ฒด๋ ฅ์ด 0 ์ดํ๊ฐ ๋๋ฉด ์บ๋ฆญํฐ ์ฌ๋ง, ๋์ด์ ์ฒด๋ ฅํ๋ณต ๋ถ๊ฐ๋ฅ
// ** ๊ณต๊ฒฉ์ ๋ฐ์ผ๋ฉด ํผํด๋๋งํผ ์ฒด๋ ฅ์ด ์ค์ด๋ ๋ค.
// ** ๊ธฐ์ ์ ์ฐ๋ ๋์ค ๊ณต๊ฒฉ์ ๋นํ๋ฉด ์ทจ์๋๋ค. ๊ณต๊ฒฉ์ ๋นํ๋ ์ค์๋ ๊ธฐ์ ์ ์ธ ์ ์๋ค.
// ** ๊ธฐ์ ์ ์ฐ๋ ๋์ค ๊ณต๊ฒฉ์ ๋นํด ์ทจ์/๊ธฐ์ ์ด ๋๋๋ฉด ์ฆ์ ๋ค์ ๊ธฐ์ ์ ์ด๋ค. (์ฐ์ ์ฑ๊ณต ์๊ฐ 0์ผ๋ก ์ด๊ธฐํ)
// return ๋ชจ๋ ๊ณต๊ฒฉ์ด ๋๋ ์งํ ๋จ์ ์ฒด๋ ฅ (์ฌ๋ง์ -1)
let lastTime = attacks[attacks.length -1][0]; // ๋ง์ง๋ง๊ณต๊ฒฉ๊น์ง์ ์ด ์๊ฐ
let attackTime = attacks.map((att) => att[0]); // ๊ณต๊ฒฉํ๋ ์๊ฐ array
let nowHealth = health; // ํ์ฌ์ฒด๋ ฅ
let bandageTime = 0; // ๊ธฐ์ ์์ ํ์
for(let time = 0; time <= lastTime; time++){
console.log("\n", time, "์ด");
let attackedInfo = attacks.find((attack) => attack[0] === time); // ์ด๋ฒ ์๊ฐ(์ด)์ ๊ณต๊ฒฉ์ ๋ณด
const doBandage = function() { // ํ๋ณต๊ธฐ์ ํจ์
if(attackTime.some((attTime) => attTime === time)){
bandageTime = 0;
} else {
bandageTime++;
nowHealth = nowHealth + bandage[1];
if(nowHealth > health){
nowHealth = health;
}
console.log(`๊ธฐ์ ์์ ${bandageTime}ํ์งธ, ${bandage[1]} ๋งํผ ํ๋ณตํ๋ค! ํ์ฌ ์ฒด๋ ฅ์ ${nowHealth}.`);
if(bandageTime === bandage[0]){
nowHealth = nowHealth + bandage[2];
bandageTime = 0;
if(nowHealth > health){
nowHealth = health;
}
console.log(`์ฐ์ ๋ถ๋๊ฐ๊ธฐ ์ฑ๊ณต, ${bandage[2]} ๋งํผ ์ถ๊ฐ ํ๋ณตํ๋ค! ํ์ฌ ์ฒด๋ ฅ์ ${nowHealth}.`);
}
}
}
doBandage();
// ๊ณต๊ฒฉ
if(attackedInfo !== undefined){
if(time === attackedInfo[0]){
nowHealth = nowHealth - attackedInfo[1];
console.log(`${attackedInfo[1]} ๋งํผ ๊ณต๊ฒฉ๋ฐ์๋ค! ํ์ฌ ์ฒด๋ ฅ์ ${nowHealth}.`);
if(nowHealth <= 0){
console.log(`ํ๋ ์ด์ด๊ฐ ์ฌ๋งํ์ต๋๋ค.`);
return -1;
}
}
}
}
if(nowHealth <= 0){ return -1 }
return nowHealth;
}
๋์ค์ ๋ณผ ๋๋ฅผ ๋๋นํด ์ฝ์๊ณผ ์ฃผ์์ ํฌํจํ ํ์ด๋ก ์ ์ฅํด๋๋ค.
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://school.programmers.co.kr/learn/challenges
'๐จ JavaScript > ๋ฌธ์ ํ๊ธฐ (ํ๋ก๊ทธ๋๋จธ์ค, ์ฝ๋ฉ์ ํ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Level 1] 2022 KAKAO BLIND RECRUITMENT : ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (1) | 2023.12.11 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Level 1] ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ (0) | 2023.12.10 |
[ํ๋ก๊ทธ๋๋จธ์ค Level 1] ๋ฐํํ๋ฉด ์ ๋ฆฌ (0) | 2023.12.10 |
[ํ๋ก๊ทธ๋๋จธ์ค Level 1] ์ถ์ต ์ ์ (0) | 2023.12.10 |
[ํ๋ก๊ทธ๋๋จธ์ค Level 1] ์ผ์ด์ฌ (0) | 2023.12.10 |