ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ํ์ด
https://school.programmers.co.kr/learn/courses/30/lessons/120891
์ฌ์ฉ ์ธ์ด - ์๋ฐ์คํฌ๋ฆฝํธ JavaScript JS
1. ๋ฌธ์ ์ ๋ชฉ
1) โ ๋ฌธ์ ์ค๋ช
๋จธ์ฑ์ด๋ ์น๊ตฌ๋ค๊ณผ 369๊ฒ์์ ํ๊ณ ์์ต๋๋ค. 369๊ฒ์์ 1๋ถํฐ ์ซ์๋ฅผ ํ๋์ฉ ๋๋ฉฐ 3, 6, 9๊ฐ ๋ค์ด๊ฐ๋ ์ซ์๋ ์ซ์ ๋์ 3, 6, 9์ ๊ฐ์๋งํผ ๋ฐ์๋ฅผ ์น๋ ๊ฒ์์ ๋๋ค. ๋จธ์ฑ์ด๊ฐ ๋งํด์ผํ๋ ์ซ์ order๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋จธ์ฑ์ด๊ฐ ์ณ์ผํ ๋ฐ์ ํ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด๋ณด์ธ์.
2) ๐ซ ์ ํ ์ฌํญ
- 1 ≤ order ≤ 1,000,000
3) โ๏ธ ์ ์ถ๋ ฅ ์
order | result |
3 | 1 |
29423 | 2 |
์ ์ถ๋ ฅ ์ ์ค๋ช
- ์
์ถ๋ ฅ ์ #1
3์ 3์ด 1๊ฐ ์์ผ๋ฏ๋ก 1์ ์ถ๋ ฅํฉ๋๋ค. - ์
์ถ๋ ฅ ์ #2
29423์ 3์ด 1๊ฐ, 9๊ฐ 1๊ฐ ์์ผ๋ฏ๋ก 2๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
2. ์ฌ์ฉํ ๋ฉ์๋: filter()
Array.prototype.filter()
filter() ๋ฉ์๋๋ ์ฃผ์ด์ง ํจ์์ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๋ชจ๋ ์์๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฐํ๋ค.
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter((word) => word.length > 6);
console.log(result);
// Expected output: Array ["exuberant", "destruction", "present"]
// ๊ตฌ๋ฌธ
arr.filter(callback(element[, index[, array]])[, thisArg])
1) ๋งค๊ฐ๋ณ์
callback
- ๊ฐ ์์๋ฅผ ์ํ ํ ํจ์. true๋ฅผ ๋ฐํํ๋ฉด ์์๋ฅผ ์ ์ง, false๋ฅผ ๋ฐํํ๋ฉด ๋ฒ๋ฆผ
- ๋ค์์ ์ธ ๊ฐ์ง ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋๋ค - element, index, arraym, thisArg
- element : ์ฒ๋ฆฌํ ๋ฐฐ์ด์ ํ์ฌ ์์
- index : ์ฒ๋ฆฌํ ํ์ฌ ์์์ ์ธ๋ฑ์ค
- array : filter๋ฅผ ํธ์ถํ ๋ฐฐ์ด
thisArg
- callback์ ์คํํ ๋ this๋ก ์ฌ์ฉํ๋ ๊ฐ
2) ๋ฐํ ๊ฐ
- ํ ์คํธ๋ฅผ ํต๊ณผํ ์์๋ก ์ด๋ฃจ์ด์ง ์๋ก์ด ๋ฐฐ์ด
- ์ด๋ค ์์๋ ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ์ผ๋ฉด ๋น ๋ฐฐ์ด์ ๋ฐํํ๋ค.
3. ๋ต์
1) ๋์ ํ์ด
function solution(order) {
return [...order+''].filter(v => v === "3" || v === "6" || v === "9").length
}
2) ๋ค๋ฅธ ์ฌ๋์ ํ์ด
์ด๋ฒ ๋ฌธ์ ๋ ํ์๋ค๊ณผ ํจ๊ป ํ์ด์ ํ์๋ค์ ๋ต์๊น์ง ํจ๊ป ๊ณต๋ถํ ์ ์์ด์ ์ข์๋ค.
(1) for๋ฌธ
function solution(order) {
var answer = 0;
let orederArr = order.toString().split("")
for (let i = 0; i < orederArr.length; i++) {
if ( orederArr[i] == 3 || orederArr[i] == 6 || orederArr[i] == 9) {
answer += 1
}
}
return answer;
}
- ์ฃผ์ด์ง ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด ํ ๊ธ์์ฉ ์ชผ๊ฐ์ด orderArr ๋ฐฐ์ด๋ก ๋ง๋ค์ด ์ค ๋ค, for๋ฌธ์ ์ด์ฉํ์ฌ 3, 6, 9๋ฅผ ์ฐพ์ ๋๋ง๋ค answer์ ํ์๋ฅผ ๋ํด์ฃผ์ด ๋ต์ ๊ตฌํ ๋ฐฉ์์ด๋ค.
(2) filter, includes ๋ฉ์๋
function solution(order) {
return [...String(order)].filter((a) => ["3", "6", "9"].includes(a)).length;
}
- ๋ง์ฐฌ๊ฐ์ง๋ก order๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด ํ ๊ธ์์ฉ ์ชผ๊ฐ์ด ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ค ๋ค, ["3", "6", "9"] .includes(a)๋ฅผ ์ด์ฉํ์ฌ ํํฐ๋งํด์ค ๋ค ํํฐ๋ง ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ก 3, 6, 9๊ฐ ํฌํจ๋ ๊ฐฏ์๋ฅผ ์ฐพ์ ๋ฐฉ์์ด๋ค. filter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋์ ํ์ด์ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ด์๋๋ฐ includes ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์ ๋ฐฐ์ธ ์ ์์๋ค.
(3) replaceAll ๋ฉ์๋
function solution(order) {
var orderLength = order.toString()
const orderNum = orderLength.replaceAll("3", "").replaceAll("6", "").replaceAll("9", "")
return orderLength.length - orderNum.length
}
- ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด์ค ๋ค์, ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ฃผ์ง ์๊ณ ๋ฌธ์์ด์์ "3", "6", "9"๋ฅผ ์ ๊ฑฐํ๊ณ , ์ฒ์ ๋ฌธ์์ด์ ๊ธธ์ด์์ "3", "6", "9"๋ฅผ ์ ๊ฑฐํ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋นผ์ฃผ์ด "3", "6", "9"์ ๊ฐ์๋ฅผ ์ฐพ์ ๋ฐฉ์์ด๋ค. ์ต๊ทผ์๋ ๊ฑฐ์ ๋๋ถ๋ถ ์ซ์๋ ๋ฌธ์์ด์ด๋ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ค์ ๊ฑฐ๊ธฐ์ ํด๊ฒฐ ๋ฐฉ์์ ๊ณ ๋ฏผํ์๋๋ฐ, ๋ฐฐ์ด๋ก ๋ง๋ค์ง ์๊ณ ๋ฌธ์์ด ํํ์์ ํด๊ฒฐํ ์ ์ด ์ธ์์ ์ด์๋ค.
(4) ์ ๊ทํํ์์ ์ฌ์ฉํ ํ์ด
// ๋ค๋ฅธ ์ฌ๋์ ํ์ด - ์ ๊ทํํ์
function solution(order) {
return (''+order).split(/[369]/).length-1;
}
- ์ ๊ทํํ์์ ์ฌ์ฉํ ํ์ด๋ ํ์๋ค์ด ๊ณต์ ํด์ค ๋ต์์ ์๋๊ณ , ํ๋ก๊ทธ๋๋จธ์ค ๋ค๋ฅธ ์ฌ๋์ ํ์ด์์ ๋ณธ ํ์ด ๋ฐฉ๋ฒ์ธ๋ฐ ์์์ ๋ด๊ฐ ํ์๋ ๋ณต์กํ ๋ฉ์๋๋ฅผ ์งง๊ฒ ์์ถํ ์ ์๋ค๋ ์ ์ด ์ข๋ค๊ณ ์๊ฐํ๋ค.
ํผ์ ๊ณต๋ถํ๋ค๋ณด๋ฉด ํ์ ์ ์ธ ๋ฉ์๋์ ๊ฐํ์ ๋งค๋ฒ ๋น์ทํ ๋ก์ง์ผ๋ก ํ์ด๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ ์ ๋ฐ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฒ ํ์์ ํ์๋ค๊ณผ ์๋ฐ์ ์ผ๋ก ํจ๊ป ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ธฐ๋ก ์ ํด์ ํจ๊ป ํ๋ค๋ณด๋ ๋ค์ํ ํ์ด ๋ฐฉ๋ฒ์ ๊ณต๋ถํ ์ ์์ด์ ๋ง์ด ๋ฐฐ์๊ฐ๋ ๊ฒ ๊ฐ๋ค!
ํนํ ์ ๊ทํํ์์ ์๋ฌด๋ฆฌ ๋ด๋ ์ดํด๊ฐ ์๊ฐ๋๋ฐ..ใ ใ ๊ฐ์ ํ์๋ถ๊ป์ ํ๋ก๊ทธ๋๋จธ์ค์ ์ ๊ทํํ์ ๊ด๋ จ ๋ฌด๋ฃ ๊ฐ์๊ฐ ์๋ค๋ ์ข์ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ์ ์ ์ฃผ๋ง์ ์๊ฐ๋ด์ ๋ค์ด ๋ณผ ์์ ์ด๋ค! ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ์ ์๋ ์ ๊ทํํ์ ํํธ๋ ์ฝ์ด๋ณด๊ณ ์ด๋ฒ ์ฃผ๋ง์๋ ์ ๋ฐ ์ ๊ท์์ ๊นจ๋ซ๋ ์ฃผ๋ง์ด ๋๊ธธ ๊ธฐ๋ํ๋ค ๐๐
'๐ป Programming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ๋ฆฌ์คํธ ์๋ฅด๊ธฐ (0) | 2023.08.08 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ์ง์๋ ์ซ์ด์ (0) | 2023.08.03 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 1] ์ฝ๋ผ์ธ ์ถ์ธก (0) | 2023.08.02 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ๊ฐ๊น์ด 1 ์ฐพ๊ธฐ (0) | 2023.07.28 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ํน๋ณํ ์ด์ฐจ์ ๋ฐฐ์ด 2 (0) | 2023.07.28 |