ํ์ด ๋ ์ง : 2025.05.01
๋ฌธ์ ์ ํ : ์ฐ์ต๋ฌธ์
๋ฌธ์ ์ ๋ชฉ : ํธ๋ ํ์ดํธ ๋ํ
๋ฌธ์ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/134240
Intuition
- ์์์ ๊ฐ์๋ฅผ ์ข์ฐ ๋์นญ์ผ๋ก ํ์ฌ ๊ฐ์ด๋ฐ '0'์ ๋๊ณ ์์ ๋ฐฐ์น๋ฅผ ์์ฑํด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
- ์ฃผ์ด์ง ๋ฐฐ์ด(food)์ ์ธ๋ฑ์ค๊ฐ ์์์ ๋ฒํธ, ๊ฐ์ ์์์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
- ์์์ ๊ฐ์๊ฐ 2๋ณด๋ค ์์ผ๋ฉด ๋ ์ ์๊ฐ ๋๋ ๋จน์ ์ ์์ผ๋ฏ๋ก ์ ์ธํด์ผ ํ๋ค.
- ๋ฌธ์์ด ์กฐ์ ๋ฌธ์ ๋ผ๊ณ ๋ณผ ์ ์๋ค.
Approach
- 0์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ๋ฐฐ์นํ ๋ฌธ์์ด์ ๋์ ํ ๋ณ์(left)๋ฅผ ์ ์ธํ๋ค.
- food๋ฅผ ์ํํ๋ฉด์ left๋ฅผ ๋ง๋ ๋ค.
- ์ฒซ๋ฒ์งธ ์์๋ ํญ์ 1์ด๋ฏ๋ก ์ ์ธํ๊ณ , ์์์ ๊ฐ์๊ฐ 2๋ณด๋ค ์์ผ๋ฉด ๋์ด๊ฐ๋ค.
- ๋๋ ์ค์ผํ ์์์ ์(serving) ๋งํผ ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ณตํ์ฌ left์ ๋์ ํ๋ค.
- left์ ‘0’๊ณผ left๋ฅผ ๋ค์ง์ ๊ฐ์ ๋ถ์ฌ์ ๋ฐํํ๋ค.
Complexity
- Time complexity :
O(n)- food์ ๊ธธ์ด๋ฅผ n ์ด๋ผ๊ณ ํ ๋, forEach → O(n)
- Splace complexity :
O(m)- left์ ๊ธธ์ด๋ฅผ m์ด๋ผ๊ณ ํ ๋ left์ left๋ฅผ split, reverse ํ ๋ m๋งํผ์ ์ถ๊ฐ ๊ณต๊ฐ์ด ํ์ํ๋ค.
- ์ข ํฉ์ ์ผ๋ก๋ O(m)์ด๋ค.
Code (JS)
- ๊ฐ์ ํ ์ ์๋ ํฌ์ธํธ
- ๋ฌธ์์ด์ ๋ถ๋ณ(immutable)์ด์ด์ ๋งค๋ฒ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํ๊ฒ ๋์ด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
- ๋ํ, ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ๋ ์ด์ฐจํผ split ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ฐฐ์ด๋ก ํ ๋ฒ ๋ณํํด์ผ ํ๋ ๊ณผ์ ์ด ์๋ค.
function solution(food) {
let left = '';
food.forEach((count, i) => {
if (i === 0 || count < 2) {
return;
}
const serving = Math.floor(count / 2);
left += i.toString().repeat(serving);
})
return left + '0' + left.split('').reverse().join('');
}
- ์ฑ๋ฅ ์ต์ ํํ ์ฝ๋
function solution(food) {
const left = [];
food.forEach((count, i) => {
if (i === 0 || count < 2) {
return;
}
const serving = Math.floor(count / 2);
left.push(...Array(serving).fill(+i));
});
return left.join('') + '0' + left.reverse().join('');
}'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > Programmers - Lv.1' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค Lv.1] ์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (0) | 2025.04.28 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค Lv.1] ์ต์์ง์ฌ๊ฐํ (0) | 2025.04.25 |
| [ํ๋ก๊ทธ๋๋จธ์ค Lv.1] ์์ฐ (0) | 2025.04.25 |
| [ํ๋ก๊ทธ๋๋จธ์ค Lv.1] ๊ณต์ ์ฐ์ฑ (0) | 2025.04.24 |