Big-O
- ๋น ์ค ํ๊ธฐ๋ฒ์ ๋ถํ์ํ ์ฐ์ฐ์ ์ ๊ฑฐํ์ฌ ์๊ณ ๋ฆฌ์ฆ๋ถ์์ ์ฝ๊ฒ ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํจ.
- ์๊ฐ๋ณต์ก๋๋ ์ ๋ ฅ๋ N์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์คํ๋๋ ์กฐ์์ ์๋ฅผ ๋ํ๋.
- ๊ณต๊ฐ๋ณต์ก๋๋ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋ ๋ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋ํ๋. ์์ฆ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ ์ผ๋ก ์ค์๋๊ฐ ๋ฎ์์ง.

์๊ฐ ๋ณต์ก๋

K๋ฒ์งธ ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ
a๋ฒ์งธ๋ถํฐ b๋ฒ์งธ ์ซ์๋ฅผ ์ ๋ ฌํ์ฌ k๋ฒ์งธ ์๋ฅผ ๊ตฌํ๋ผ.
function solution(array, commands) { const answer = []; commands.forEach(comd => { const begin = comd[0] - 1; const end = comd[1]; const k = comd[2] - 1; const cropped = array.slice(begin, end); const sorted = cropped.sort((n1,n2)=>n1-n2); answer.push(sorted[k]); }); return answer; }
ํ์ด
- slice๋ฅผ ์ด์ฉํ์ฌ a๋ฒ์งธ๋ถํฐ b๋ฒ์งธ์ ์ซ์๋ฅผ ๊ฐ์ง ๋ฐฐ์ด์ ๋ง๋ ๋ค.
- ๋ง๋ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค.
- ์ ๋ ฌ๋ ๋ฐฐ์ด์ k๋ฒ์งธ ์ซ์๋ฅผ answer ๋ฐฐ์ด์ push ํ๋ค.
- a์ b๊ทธ๋ฆฌ๊ณ k์ ์ซ์ ๊ธฐ์ค์ด 0๋ถํฐ ์์ํ์ง ์๊ณ 1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ -1์ ํด์ค ์ .
- forEach๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฐฐ์ด์ ์ถ๋ ฅํ ์ .
- slice๊ฐ end๋ ํฌํจํ์ง ์๋ ์ .
์ฌ์ฉ๋ ์์ฑ
- 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"]
- sort() - ๋ฐฐ์ด์ ์์๋ฅผ ์ ์ ํ ์์น์ ์ ๋ ฌํ ํ ๊ทธ ๋ฐฐ์ด์ ๋ฐํํจ. ๋ณต์ฌ๋ณธ์ด ์๋ ์ ๋ฐฐ์ด์ด ์ ๋ ฌ๋จ. ๋น๊ต ์์ฑ์ ๋ฃ์ง ์์ผ๋ฉด ๋ฌธ์์ด์ ๋ฐํํ๊ณ ์ ๋ ์ฝ๋ ์์๋ก ๋น๊ต, ์ ๋ ฌํจ.
const months = ['March', 'Jan', 'Feb', 'Dec']; months.sort(); console.log(months); // expected output: Array ["Dec", "Feb", "Jan", "March"] const array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); // expected output: Array [1, 100000, 21, 30, 4]
//๋น๊ต ์์ฑ
function compareNumbers(a, b) {
return a - b;
}
- push() - ๋ฐฐ์ด์ ๋์ ์์๋ฅผ ์ถ๊ฐํ๊ณ , ๋ฐฐ์ด์ ์๋ก์ด ๊ธธ์ด๋ฅผ ๋ฐํํจ.
const animals = ['pigs', 'goats', 'sheep']; const count = animals.push('cows'); console.log(count); // expected output: 4 console.log(animals); // expected output: Array ["pigs", "goats", "sheep", "cows"]
์์ ๋ํ๊ธฐ
์ด๋ค ์ ์๋ค์ด ์์ต๋๋ค. ์ด ์ ์๋ค์ ์ ๋๊ฐ์ ์ฐจ๋ก๋๋ก ๋ด์ ์ ์ ๋ฐฐ์ด absolutes์ ์ด ์ ์๋ค์ ๋ถํธ๋ฅผ ์ฐจ๋ก๋๋ก ๋ด์ ๋ถ๋ฆฌ์ธ ๋ฐฐ์ด signs๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ค์ ์ ์๋ค์ ํฉ์ ๊ตฌํ์ฌ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
//๋ด ํ์ด function solution(absolutes, signs) { for(let i =0; i<signs.length; i++){ if(signs[i] === true ){ continue; } else{ absolutes[i] = -absolutes[i]; } } const answer = absolutes.reduce((a,b) => a+b); return answer; } //์ฐธ๊ณ ํ์ด function solution(absolutes, signs) { let answer = 0; absolutes.forEach((v, i) => { if (signs[i]) { answer += v; } else { answer -= v; } }) return answer; }
ํ์ด
- ๋ถ๋ฆฐ๊ฐ์ ์ฑ์ง์ ์ฌ์ฉํด if else๋ฌธ์ผ๋ก answer์ ๊ฐ์ ๊ฐ๊ฐํ๋ค.
- ๋ชจ๋ ๋ฐฐ์ด์ ๋ฐ๋ณตํ๋ค.
- true, false๋ฅผ ๋ฐํํ๋ ๊ฑฐ๋ผ๋ฉด if๋ฌธ์์ ๊ฒ์ฆํ ํ์ ์์.
- forEach๊ฐ ๋ ์์ ์ ์. for๋ฌธ์ ๋ณ์๋ฅผ ์ ๋ถ ์ ์ธํด์ฃผ๊ธฐ ๋๋ฌธ.
- answer์์ ๋ํ๊ณ ๋นผ์ฃผ๋ ๋ฐฉ์์ด ์์.
์ฌ์ฉ๋ ์์ฑ
- reduce - ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ๋ฆฌ๋์(reducer) ํจ์๋ฅผ ์คํํ๊ณ , ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํจ.
var sum = [1, 2, 3].reduce((a, b) => a + b);
๊ฐ์ด๋ฐ ๊ธ์ ๊ฐ์ ธ์ค๊ธฐ
๋จ์ด s์ ๊ฐ์ด๋ฐ ๊ธ์๋ฅผ ๋ฐํํ๋ ํจ์, solution์ ๋ง๋ค์ด ๋ณด์ธ์. ๋จ์ด์ ๊ธธ์ด๊ฐ ์ง์๋ผ๋ฉด ๊ฐ์ด๋ฐ ๋๊ธ์๋ฅผ ๋ฐํํ๋ฉด ๋ฉ๋๋ค.
//๋ด ํ์ด function solution(s) { function returnCenterCha(){ const splits = s.split(''); const divided = parseInt(splits.length/2); let spliced if(splits.length%2 === 0){ spliced = splits.splice(divided-1,2); } else { spliced = splits.splice(divided,1); } const convertToString = spliced.toString().replace(",",""); return convertToString } return returnCenterCha(); } //์ฐธ๊ณ ํ์ด function solution(s) { const mid = Math.floor(s.length/2); return s.length % 2 === 1 ? s[mid] : s[mid-1]+s[mid]; }
ํ์ด
- ์ค๊ฐ์ ์๋ ์๋ฅผ ๊ตฌํ๋ค.
- ๋ฌธ์์ด ๊ธธ์ด๋ฅผ 2๋ก ๋๋์์ ๋ ๋๋จธ์ง๊ฐ 1์ด๋ฉด ๊ฐ์ด๋ฐ ์๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ์ด๋ฐ -1๊ณผ ๊ฐ์ด๋ฐ ์๋ฅผ ๋ฐํํ๋ค.
๋ฌธ์์ด๋ ๋๊ดํ[]๋ฅผ ํตํด์ ์์๋ฅผ ์ฐพ์ ์ ์์.
์ฌ์ฉ๋ ์์ฑ
- Math.floor() - ์์์ ์ ๋ฒ๋ฆฌ๊ณ ๋ฐํํจ.
console.log(Math.floor(5.95)); // expected output: 5 console.log(Math.floor(-5.05)); // expected output: -6
- parseInt() - ์ ์๋ฅผ ๋ฐํํจ.
var result = parseInt(13 / 5); // ๊ฐ์ 2 var remainder = 13 % 5; // ๊ฐ์ 3
- JS์์ ์ฝค๋ง ์์ ๋ ๋ฐฉ๋ฒ
const numberStr = "123,456,789"; // ์ฝค๋ง ์ ๊ฑฐ const number = numberStr.replace(",", "");
- toString() - ๋ฐฐ์ด์์ ๋ฌธ์์ด์ ๋ฐํ.
const array1 = [1, 2, 'a', '1a']; console.log(array1.toString()); // expected output: "1,2,a,1a"
ํธ๋ํฐ ๋ฒํธ ๊ฐ๋ฆฌ๊ธฐ
์ ํ๋ฒํธ๊ฐ ๋ฌธ์์ด phone_number๋ก ์ฃผ์ด์ก์ ๋, ์ ํ๋ฒํธ์ ๋ท 4์๋ฆฌ๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ซ์๋ฅผ ์ ๋ถ *์ผ๋ก ๊ฐ๋ฆฐ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ ํจ์, solution์ ์์ฑํด์ฃผ์ธ์.
function solution(phone_number) { const sliced = phone_number.slice(-4); return "*".repeat(phone_number.length-4)+sliced }
ํ์ด
- ์ ํ๋ฒํธ ๋ท 4์๋ฆฌ๋ฅผ ์ถ์ถํ๋ค.
- ์ถ์ถํ ๊ฐ์๋ฅผ ์ ์ธํ ์ ํ๋ฒํธ ์๋งํผ *๋ฅผ ๋ฐ๋ณตํ๋ค.
- ๋ฐ๋ณตํ ๊ฐ์์ ์ถ์ถํ ์ ํ๋ฒํธ ๋ท 4์๋ฆฌ๋ฅผ ๋ํ๋ค.
์ฌ์ฉ๋ ์์ฑ
- repeat - ๋ฌธ์์ด์ ์ฃผ์ด์ง ํ์๋งํผ ๋ฐ๋ณตํด ๋ถ์ธ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํจ.
'abc'.repeat(2); // 'abcabc' 'abc'.repeat(3.5); // 'abcabcabc'
ํฐ์ผ๋ชฌ
N๋ง๋ฆฌ ํฐ์ผ๋ชฌ์ ์ข
๋ฅ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด nums๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, N/2๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ ์ค, ๊ฐ์ฅ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์, ๊ทธ๋์ ํฐ์ผ๋ชฌ ์ข
๋ฅ ๋ฒํธ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
//๋ด ํ์ด function solution(nums) { const max = parseInt(nums.length/2); const set = new Set(nums); const setSize = set.size; return max < setSize ? max : setSize } //์ฐธ๊ณ ํ์ด function solution(nums) { const max = parseInt(nums.length/2); return Math.min(max, new Set(nums).size); }
ํ์ด
- ์ต๋๋ก ๊ฐ์ ธ๊ฐ ์ ์๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ค.
- Set ๊ฐ์ฒด๋ก ์ค๋ณต์๋ ๋ฐฐ์ด์ ๊ตฌํ๋ค.
- ์ด ๋์ ๋น๊ตํ์ฌ ์ต๋๋ก ๊ฐ์ ธ๊ฐ ์ ์๋ ํฐ์ผ๋ชฌ ์๋ฅผ ๋ฐํํ๋ค.
์ฌ์ฉ๋ ์์ฑ
- Set - ์ค๋ณต์ ํ์ฉํ์ง ์๋ ๊ฐ์ ๋ชจ์๋์ Collection ๊ฐ์ฒด.
var mySet = new Set(); mySet.add(1); // Set { 1 } mySet.has(1); // true const arr = ['a', 'b', 'c', 'b']; const set = new Set(arr); set.size; // 3
- new ๊ฐ์ฒด๋ฅผ ํธ์ถํจ์ผ๋ก์จ Set ๊ฐ์ฒด๋ฅผ ๊ณต์ ์์์ผ๋ก ์ฌ์ฉํจ.
- Set์ n log n์. ์ด์งํ์ํธ๋ฆฌ(Binary Search Tree)
์์ฃผํ์ง ๋ชปํ ์ ์
๋ง๋ผํค์ ์ฐธ์ฌํ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด participant์ ์์ฃผํ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด completion์ด ์ฃผ์ด์ง ๋, ์์ฃผํ์ง ๋ชปํ ์ ์์ ์ด๋ฆ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
function solution(participant, completion) { participant.sort() completion.sort() for(let i = 0; i<participant.length; i++){ if(participant[i] !== completion[i]){ return participant[i] } } }
ํ์ด
- ๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฌธ์์์ผ๋ก ์ ๋ ฌํ๋ค.
- ์ ๋ ฌ๋ ๋ฐฐ์ด ์ค ์ผ์นํ์ง ์๋ ์์๊ฐ ์์ ๊ฒฝ์ฐ participant์ ์์๋ฅผ ๋ฐํํ๋ค.
์์ฐ
๋ถ์๋ณ๋ก ์ ์ฒญํ ๊ธ์ก์ด ๋ค์ด์๋ ๋ฐฐ์ด d์ ์์ฐ budget์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต๋ ๋ช ๊ฐ์ ๋ถ์์ ๋ฌผํ์ ์ง์ํ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
function solution(d, budget) { const arr = d.sort(function(a, b) { return a - b; }); let cnt = 0; let sum = 0; for(let i=0; i<arr.length; i++) { sum += arr[i] if(budget >= sum){ cnt++ } } return cnt; }
ํ์ด
- sort ๋ฉ์๋๋ก ๋ถ์๋ณ ๊ธ์ก์ ์ ๋ ฌํจ.
- ๋ฐ๋ณต๋ฌธ์ผ๋ก ์์ฐ์ด ๊ธ์ก์ ๋์ง ์์ ๋๊น์ง์ ํฉ๊ณผ ์ง์ ์๋ฅผ ๊ตฌํ๋ค.
- break์ return์ ์์น๋ฅผ ์ ํ์
ํด์ผ ํจ. sum๊ณผ budget์ด ๊ฐ๊ฑฐ๋ ์์ ๊ฒฝ์ฐ if๋ฌธ์ ํต๊ณผํ์ง ์๊ธฐ ๋๋ฌธ์ break ๋๋ return buy๋ฅผ ์จ์ฃผ์ด์ผ ํจ.
์ถ๊ฐ info
- call by value (๊ฐ์ ์ํ ํธ์ถ) - ํจ์ ์์์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋, ์ธ๋ถ์ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์. call by reference (์ฐธ์กฐ์ ์ํ ํธ์ถ) - ํจ์ ์์์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ์๊ท๋จผํธ๋ก ์ ๋ฌ๋ ๊ฐ์ฒด์ ๊ฐ๋ ํจ๊ป ๋ณ๊ฒฝ.
๋ชจ์๊ณ ์ฌ
1๋ฒ ๋ฌธ์ ๋ถํฐ ๋ง์ง๋ง ๋ฌธ์ ๊น์ง์ ์ ๋ต์ด ์์๋๋ก ๋ค์ ๋ฐฐ์ด answers๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๋ง์ ๋ฌธ์ ๋ฅผ ๋งํ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
function solution(answers) { var answer = []; const sut1 = [1,2,3,4,5]; const sut2 = [2,1,2,3,2,4,2,5]; const sut3 = [3,3,1,1,2,2,4,4,5,5]; let point = [0,0,0]; for(let i = 0; i<answers.length; i++){ if(sut1[i % 5] === answers[i]){ point[0] += 1; } if(sut2[i % 8] === answers[i]){ point[1] += 1; } if(sut3[i % 10] === answers[i]){ point[2] += 1; } } let maxCnt = Math.max(...point); for(let j=0; j<3; j++){ if(point[j] === maxCnt){ answer.push(j+1); } } return answer; }
ํ์ด
- ์ํฌ์์ ๋ต์ const์ ๋ด๋๋ค.
- ๋ฌธ์ ์ ๊ธธ์ด๋งํผ ๋ฐ๋ณตํ์ฌ ๊ฐ ๋ฐฐ์ด์ ์ซ์์ answers์ ์ซ์๊ฐ ์ผ์นํ๋์ง ํ์ธํ๊ณ , ์ผ์นํ๋ฉด point๋ฅผ 1์ฉ ์ฌ๋ฆฐ๋ค.
- max ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋๊ฐ์ ์์๋ธํ ์ต๋๊ฐ๊ณผ point๊ฐ ์ผ์นํ๋ฉด ํด๋น ์ซ์๋ฅผ answer์ pushํ๋ค.
- point ๋ฐฐ์ด์ ๋ง๋ค์ด ์ต์ข
๋น๊ต ๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ฝ๊ฒ ๊ตฌ๋ถํ ์ .
- ๋๋จธ์ง ์ฐ์ฐ์๋ฅผ ๋ต ๋ฐฐ์ด ์ซ์๋งํผ ๋๋๋ฉด ํด๋น ์ซ์๋ฅผ ๋ฐํํ๋ ์ .
์ฌ์ฉ๋ ์์ฑ
- ๋๋จธ์ง ์ฐ์ฐ์(%) - ๋๋์ด์ง ํ, ๊ทธ ๋๋จธ์ง๋ฅผ ๋ฐํํจ.
console.log(12 % 5); // expected output: 2
- three dots(...) - ๋ฐฐ์ด์ด๋ผ๋ฉด ๋๋จธ์ง ์์๋ค์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด ๋ฆฌํดํ๊ณ , ์ค๋ธ์ ํธ๋ผ๋ฉด ์ด๊ฑฐํ ์ ์๋ ๋๋จธ์ง ํ๋กํผํฐ๋ค์ ๋ฌถ์ด ์ค๋ธ์ ํธ๋ก ๋ฐํํจ.
const a = [1,2,3]; const aa = [...a, ...a]; console.log(aa) // [1, 2, 3, 1, 2, 3]
- max() - ์ ๋ ฅ๊ฐ์ผ๋ก ๋ฐ์ 0๊ฐ ์ด์์ ์ซ์ ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ฐํํจ.
Math.max(10, 20); // 20
ํฌ๊ฑฐ๋ ์์ ์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ
largest๋ ๋ณ์๋ฅผ ์ ์ธํ ํ ๊ฐ ๋ฐฐ์ด์ ๋๋ฉฐ largest์ ๊ฐ์ ๋น๊ตํ์ฌ ํฐ ์๋ก ๊ต์ฒดํ๋ ๋ฐฉ์.
function max(arr) { let largest; if(arr.length>0) { largest=arr[0];} else { largest = 0;} for(let i=0;i<arr.length;i++) { if(arr[i]>largest) largest = arr[i]; } return largest; }