
ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ํ์ด
์ฌ์ฉ ์ธ์ด - ์๋ฐ์คํฌ๋ฆฝํธ JavaScript JS
1. ๋ฆฌ์คํธ ์๋ฅด๊ธฐ
1) โ ๋ฌธ์ ์ค๋ช
์ ์ n๊ณผ ์ ์ 3๊ฐ๊ฐ ๋ด๊ธด ๋ฆฌ์คํธ slicer ๊ทธ๋ฆฌ๊ณ ์ ์ ์ฌ๋ฌ ๊ฐ๊ฐ ๋ด๊ธด ๋ฆฌ์คํธ num_list๊ฐ ์ฃผ์ด์ง๋๋ค. slicer์ ๋ด๊ธด ์ ์๋ฅผ ์ฐจ๋ก๋๋ก a, b, c๋ผ๊ณ ํ ๋, n์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด num_list๋ฅผ ์ฌ๋ผ์ด์ฑ ํ๋ ค๊ณ ํฉ๋๋ค.
- n = 1 : num_list์ 0๋ฒ ์ธ๋ฑ์ค๋ถํฐ b๋ฒ ์ธ๋ฑ์ค๊น์ง
- n = 2 : num_list์ a๋ฒ ์ธ๋ฑ์ค๋ถํฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง
- n = 3 : num_list์ a๋ฒ ์ธ๋ฑ์ค๋ถํฐ b๋ฒ ์ธ๋ฑ์ค๊น์ง
- n = 4 : num_list์ a๋ฒ ์ธ๋ฑ์ค๋ถํฐ b๋ฒ ์ธ๋ฑ์ค๊น์ง c ๊ฐ๊ฒฉ์ผ๋ก
์ฌ๋ฐ๋ฅด๊ฒ ์ฌ๋ผ์ด์ฑํ ๋ฆฌ์คํธ๋ฅผ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
2) ๐ซ ์ ํ ์ฌํญ
- n ์ 1, 2, 3, 4 ์ค ํ๋์ ๋๋ค.
- slicer์ ๊ธธ์ด = 3
- slicer์ ๋ด๊ธด ์ ์๋ฅผ ์ฐจ๋ก๋๋ก a, b, c๋ผ๊ณ ํ ๋
- 0 โค a โค b โค num_list์ ๊ธธ์ด - 1
- 1 โค c โค 3
- 5 โค num_list์ ๊ธธ์ด โค 30
- 0 โค num_list์ ์์ โค 100
3) โ ์ ์ถ๋ ฅ ์
n | slicer | num_list | result |
3 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 3, 4, 5, 6] |
4 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 4, 6] |
2. ์ฌ์ฉํ ๋ฉ์๋: slice()
Array.prototype.slice()
`slice()` ๋ฉ์๋๋ ๋ฌธ์์ด ๋๋ ๋ฐฐ์ด์์ ํน์ ๋ฒ์์ ์์๋ค์ ๋ณต์ฌํ์ฌ ์๋ก์ด ๋ฌธ์์ด ๋๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
// ์์ ์ถ์ฒ: MDN web docs - Array.prototype.slice()
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// Expected output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// Expected output: Array ["camel", "duck"]
console.log(animals.slice(1, 5));
// Expected output: Array ["bison", "camel", "duck", "elephant"]
console.log(animals.slice(-2));
// Expected output: Array ["duck", "elephant"]
console.log(animals.slice(2, -1));
// Expected output: Array ["camel", "duck"]
console.log(animals.slice());
// Expected output: Array ["ant", "bison", "camel", "duck", "elephant"]
// ๊ตฌ๋ฌธ
arr.slice([begin[, end]])
1) ๋งค๊ฐ๋ณ์
begin
- 0์ ์์์ผ๋ก ํ๋ ์ถ์ถ ์์ ์์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์๋ฏธ
- ์์ ์ธ๋ฑ์ค๋ ๋ฐฐ์ด์ ๋์์๋ถํฐ์ ๊ธธ์ด๋ฅผ ๋ํ๋
- ex) slice(-2)๋ ๋ฐฐ์ด์์ ๋ง์ง๋ง ๋๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ ์ถ์ถ
end
- ์ถ์ถ์ ์ข ๋ฃํ 0 ๊ธฐ์ค ์ธ๋ฑ์ค
- slice๋ end ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ๊ณ ์ถ์ถํ๋ค.
- ex) slice(1, 4)๋ ๋ ๋ฒ์งธ ์์๋ถํฐ ๋ค ๋ฒ์งธ ์์๊น์ง ์ถ์ถ
- end๊ฐ ์๋ต๋๋ฉด slice()๋ ๋ฐฐ์ด์ ๋(arr.length)๊น์ง ์ถ์ถ
- end๊ฐ์ด ๋ฐฐ์ด์ ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด, slice()๋ begin๋ถํฐ ๋ฐฐ์ด์ ๋(arr.length)๊น์ง ์ถ์ถ
2) ๋ฐํ ๊ฐ
- ์ถ์ถํ ์์๋ฅผ ํฌํจํ ์๋ก์ด ๋ฐฐ์ด
- slice()๋ ์๋ณธ์ ๋์ฒดํ์ง ์์ผ๋ฉฐ, ์๋ณธ ๋ฐฐ์ด์์ ์์์ ์์ ๋ณต์ฌ๋ณธ์ ๋ฐํ
3. ๋ต์
1) ๋์ ํ์ด
const solution = (n, slicer, num_list) => {
let answer = [];
if (n===1) {
answer = num_list.slice(0, slicer[1]+1)
} else if (n===2) {
answer = num_list.slice(slicer[0])
} else if (n===3) {
answer = num_list.slice(slicer[0], slicer[1]+1)
} else {
answer = num_list.slice(slicer[0], slicer[1]+1).filter((_, i) => i%slicer[2]===0)
}
return answer;
}
- ์ฒ์์ slice ๋์ splice๋ฅผ ์ผ๋๋ฐ ์๋ฌ๊ฐ ๋์ ์์ง ํ๋๋ฐ splice๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ณธ num_list ๋ฐฐ์ด์ด ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋ค์ ์ผ์ด์ค์์ ์ฌ์ฉํ ์๊ฐ ์๋ค.
- ์์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํ๋ slice ๋ฉ์๋๋ก ํ์ด๋ฅผ ์์ฑํ์๋๋ ์ฝ๊ฒ ํต๊ณผํ ์ ์์๋ค.
2) ๋ค๋ฅธ ์ฌ๋์ ํ์ด
function solution(n, slicer, num_list) {
let [a, b, c] = [...slicer];
switch(n) {
case 1:
return num_list.slice(0, b + 1);
case 2:
return num_list.slice(a);
case 3:
return num_list.slice(a, b + 1);
case 4:
return num_list.slice(a, b + 1).filter((_, idx) => !(idx % c));
}
}
- let [a, b, c] = [...slicer] : slicer์ ๊ฐ ์์๋ฅผ a, b, c ๋ณ์์ ํ ๋น
- !(idx % c) : ๋๋จธ์ง๊ฐ 0์ด๋ฉด false์ด๋ฏ๋ก ํํฐ๋ง ๋๋๋ก
slicer์ ์์๋ฅผ ๋ณ์๋ก ์ค์ ํ๊ณ , switch๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ ์ฑ ๋ฉด์์ ๋ ์ข์ ํ์ด๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ๋ค.
'๐ป Programming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 1] ๋ถ์กฑํ ๊ธ์ก ๊ณ์ฐํ๊ธฐ (0) | 2023.08.16 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ํน์๋ฌธ์ ์ถ๋ ฅํ๊ธฐ (0) | 2023.08.13 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ์ง์๋ ์ซ์ด์ (0) | 2023.08.03 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] 369๊ฒ์ (0) | 2023.08.02 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 1] ์ฝ๋ผ์ธ ์ถ์ธก (0) | 2023.08.02 |

ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ํ์ด
์ฌ์ฉ ์ธ์ด - ์๋ฐ์คํฌ๋ฆฝํธ JavaScript JS
1. ๋ฆฌ์คํธ ์๋ฅด๊ธฐ
1) โ ๋ฌธ์ ์ค๋ช
์ ์ n๊ณผ ์ ์ 3๊ฐ๊ฐ ๋ด๊ธด ๋ฆฌ์คํธ slicer ๊ทธ๋ฆฌ๊ณ ์ ์ ์ฌ๋ฌ ๊ฐ๊ฐ ๋ด๊ธด ๋ฆฌ์คํธ num_list๊ฐ ์ฃผ์ด์ง๋๋ค. slicer์ ๋ด๊ธด ์ ์๋ฅผ ์ฐจ๋ก๋๋ก a, b, c๋ผ๊ณ ํ ๋, n์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด num_list๋ฅผ ์ฌ๋ผ์ด์ฑ ํ๋ ค๊ณ ํฉ๋๋ค.
- n = 1 : num_list์ 0๋ฒ ์ธ๋ฑ์ค๋ถํฐ b๋ฒ ์ธ๋ฑ์ค๊น์ง
- n = 2 : num_list์ a๋ฒ ์ธ๋ฑ์ค๋ถํฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง
- n = 3 : num_list์ a๋ฒ ์ธ๋ฑ์ค๋ถํฐ b๋ฒ ์ธ๋ฑ์ค๊น์ง
- n = 4 : num_list์ a๋ฒ ์ธ๋ฑ์ค๋ถํฐ b๋ฒ ์ธ๋ฑ์ค๊น์ง c ๊ฐ๊ฒฉ์ผ๋ก
์ฌ๋ฐ๋ฅด๊ฒ ์ฌ๋ผ์ด์ฑํ ๋ฆฌ์คํธ๋ฅผ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
2) ๐ซ ์ ํ ์ฌํญ
- n ์ 1, 2, 3, 4 ์ค ํ๋์ ๋๋ค.
- slicer์ ๊ธธ์ด = 3
- slicer์ ๋ด๊ธด ์ ์๋ฅผ ์ฐจ๋ก๋๋ก a, b, c๋ผ๊ณ ํ ๋
- 0 โค a โค b โค num_list์ ๊ธธ์ด - 1
- 1 โค c โค 3
- 5 โค num_list์ ๊ธธ์ด โค 30
- 0 โค num_list์ ์์ โค 100
3) โ ์ ์ถ๋ ฅ ์
n | slicer | num_list | result |
3 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 3, 4, 5, 6] |
4 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 4, 6] |
2. ์ฌ์ฉํ ๋ฉ์๋: slice()
Array.prototype.slice()
`slice()` ๋ฉ์๋๋ ๋ฌธ์์ด ๋๋ ๋ฐฐ์ด์์ ํน์ ๋ฒ์์ ์์๋ค์ ๋ณต์ฌํ์ฌ ์๋ก์ด ๋ฌธ์์ด ๋๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
// ์์ ์ถ์ฒ: MDN web docs - Array.prototype.slice()
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// Expected output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// Expected output: Array ["camel", "duck"]
console.log(animals.slice(1, 5));
// Expected output: Array ["bison", "camel", "duck", "elephant"]
console.log(animals.slice(-2));
// Expected output: Array ["duck", "elephant"]
console.log(animals.slice(2, -1));
// Expected output: Array ["camel", "duck"]
console.log(animals.slice());
// Expected output: Array ["ant", "bison", "camel", "duck", "elephant"]
// ๊ตฌ๋ฌธ
arr.slice([begin[, end]])
1) ๋งค๊ฐ๋ณ์
begin
- 0์ ์์์ผ๋ก ํ๋ ์ถ์ถ ์์ ์์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์๋ฏธ
- ์์ ์ธ๋ฑ์ค๋ ๋ฐฐ์ด์ ๋์์๋ถํฐ์ ๊ธธ์ด๋ฅผ ๋ํ๋
- ex) slice(-2)๋ ๋ฐฐ์ด์์ ๋ง์ง๋ง ๋๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ ์ถ์ถ
end
- ์ถ์ถ์ ์ข ๋ฃํ 0 ๊ธฐ์ค ์ธ๋ฑ์ค
- slice๋ end ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ๊ณ ์ถ์ถํ๋ค.
- ex) slice(1, 4)๋ ๋ ๋ฒ์งธ ์์๋ถํฐ ๋ค ๋ฒ์งธ ์์๊น์ง ์ถ์ถ
- end๊ฐ ์๋ต๋๋ฉด slice()๋ ๋ฐฐ์ด์ ๋(arr.length)๊น์ง ์ถ์ถ
- end๊ฐ์ด ๋ฐฐ์ด์ ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด, slice()๋ begin๋ถํฐ ๋ฐฐ์ด์ ๋(arr.length)๊น์ง ์ถ์ถ
2) ๋ฐํ ๊ฐ
- ์ถ์ถํ ์์๋ฅผ ํฌํจํ ์๋ก์ด ๋ฐฐ์ด
- slice()๋ ์๋ณธ์ ๋์ฒดํ์ง ์์ผ๋ฉฐ, ์๋ณธ ๋ฐฐ์ด์์ ์์์ ์์ ๋ณต์ฌ๋ณธ์ ๋ฐํ
3. ๋ต์
1) ๋์ ํ์ด
const solution = (n, slicer, num_list) => {
let answer = [];
if (n===1) {
answer = num_list.slice(0, slicer[1]+1)
} else if (n===2) {
answer = num_list.slice(slicer[0])
} else if (n===3) {
answer = num_list.slice(slicer[0], slicer[1]+1)
} else {
answer = num_list.slice(slicer[0], slicer[1]+1).filter((_, i) => i%slicer[2]===0)
}
return answer;
}
- ์ฒ์์ slice ๋์ splice๋ฅผ ์ผ๋๋ฐ ์๋ฌ๊ฐ ๋์ ์์ง ํ๋๋ฐ splice๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ณธ num_list ๋ฐฐ์ด์ด ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋ค์ ์ผ์ด์ค์์ ์ฌ์ฉํ ์๊ฐ ์๋ค.
- ์์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํ๋ slice ๋ฉ์๋๋ก ํ์ด๋ฅผ ์์ฑํ์๋๋ ์ฝ๊ฒ ํต๊ณผํ ์ ์์๋ค.
2) ๋ค๋ฅธ ์ฌ๋์ ํ์ด
function solution(n, slicer, num_list) {
let [a, b, c] = [...slicer];
switch(n) {
case 1:
return num_list.slice(0, b + 1);
case 2:
return num_list.slice(a);
case 3:
return num_list.slice(a, b + 1);
case 4:
return num_list.slice(a, b + 1).filter((_, idx) => !(idx % c));
}
}
- let [a, b, c] = [...slicer] : slicer์ ๊ฐ ์์๋ฅผ a, b, c ๋ณ์์ ํ ๋น
- !(idx % c) : ๋๋จธ์ง๊ฐ 0์ด๋ฉด false์ด๋ฏ๋ก ํํฐ๋ง ๋๋๋ก
slicer์ ์์๋ฅผ ๋ณ์๋ก ์ค์ ํ๊ณ , switch๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ ์ฑ ๋ฉด์์ ๋ ์ข์ ํ์ด๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ๋ค.
'๐ป Programming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 1] ๋ถ์กฑํ ๊ธ์ก ๊ณ์ฐํ๊ธฐ (0) | 2023.08.16 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ํน์๋ฌธ์ ์ถ๋ ฅํ๊ธฐ (0) | 2023.08.13 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ์ง์๋ ์ซ์ด์ (0) | 2023.08.03 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] 369๊ฒ์ (0) | 2023.08.02 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 1] ์ฝ๋ผ์ธ ์ถ์ธก (0) | 2023.08.02 |