์ฝ๋ฉํ ์คํธ Level 1 ๋ถํฐ ๋ค์์์
์์ฐ์๋ฅผ ์ฐ์๋ ์์ฐ์๋ก ํํํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฌป๋ ๋ฌธ์ ์กฐ๊ฑด์๊ณผ ๋ฐ๋ณต์์ ์ด์ฉํ์ฌ ํ์๋ ์์ง๋ง ๋ ์ข์ ์์ด๋์ด๊ฐ ์์ด์ ๋ฉ๋ชจํ๋ค.
์ฐ์ํ๋ ์์ฐ์์ ํฉ์ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ๋ ๊ฑด ์ฝ์ ์ค ํ์์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๊ฐ๋ค.
const n = 24;
function solution(n) {
let count = 0;
for (i = 1; i <= n; i++) {
if (i % 2 === 1 && n % i === 0) {
count++;
}
}
return count;
}
solution(n);
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉฐ matchํจ์์ ๋ํด ๋ฐฐ์ธ ์ ์์๋ค.
indexOf์ ๋ค๋ฅธ ์ ์ ์ ๊ท์ ๊ฒ์์ ํตํด ๊ฒฐ๊ณผ๊ฐ์ ๋ฐฐ์ด๋ก ๋ฐ์๋ณผ ์ ์๋ค.
const RR = "love you , love, everything, love"
console.log(RR.match(/love/gi))//์์ผ๋ฉด null๊ฐ์ด๋์จ๋ค.
//return [love,love,love]
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ๋ฐ๋ณต๋ฌธ(for๋ฌธ) + splice,slice์ ๋ํด ๋ฐฐ์ธ ์ ์์๋ค.
Splice = > ์๋ณธ์ ์ํฅ์ ์ค๋ค. ์ ๊ฑฐํ๊ณ ๋จ์ ๋ฐฐ์ด์ ๋ฐํํ๊ณ ๋ง์ฝ ์ ๊ฑฐํ ๊ฒ ์๋ค๋ฉด undefined๋ฅผ ๋ฐํํ๋ค.
Slice => ์๋ณธ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค. return์ด ํ์ , ์ญ์ ํ ๋ฐฐ์ด ์์๋ฅผ ๋ฐํ ๋ฐ์ ์ ์๋ค.
ํค๋งธ๋ ๋ถ๋ถ
const s = "baabaa";
function solution(s) {
let A = [...s];
for (i = 0; i < A.length; i++) {
if (A[i] === A[i + 1]) {
A.splice(i, 2);
i = 0; // ์ฌ๊ธฐ์ i=0์ผ๋ก ๋ฆฌ์
ํ๋๋ฐ ๋ฐ๋ณต๋ฌธ์ i=1๋ก ๋์๊ฐ๋ค. ๋ฐ๋ณต๋ฌธ์ ์์๊ฐ์ 0์ผ๋ก ์์ํ ๋ฟ
// ๋ค์ loop๋ฅผ ๋ ๋๋ +1์ด ๋๊ธฐ ๋๋ฌธ์ i= -1 ์ ํด์ฃผ์ด์ผ ์ ์์ ์ผ๋ก ์๋๋์๋ค.
}
}
return A.length === 0 ? 1 : 0;
}
solution(s);
์ด๋ ๊ฒ ํ์๋๋ฐ ๊ฒฐ๊ณผ๊ฐ์ ์ ์์ ์ผ๋ก ๋์ค์ง๋ง ํจ์จ์ฑ ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค.
const s = "baabaa";
function solution(s) {
let A = [...s];
let B = [];
for (i = 0; i < A.length; i++) {
if (A[i] === B[B.length - 1]) {
B.pop();
} else if (A[i] !== B[B.length - 1]) {
B.push(A[i]);
}
}
return B.length === 0 ? 1 : 0; //์ด๋ ๊ฒ ํ์๋๋ ํต๊ณผํ๋ค.
//๋ธ๋ก๊ทธ๋ฅผ ์ฐพ์๋ณด์๋คใ
ใ
}
solution(s);
splice๋ ํจ์จ์ฑ์ด ๋จ์ด์ง๋ค ( ๋ฐ๋ณต๋ง๋ค ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ๋๋ฌธ) ๋ฐ๋ณต๋ฌธ์ ํ ๋ฒ์ loop๋ง ๋๋ฆฌ๋ฉด์ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ ค๋ฉด ํ๋์ ๋ฐฐ์ด์ ์์ฑํ์ฌ ์ค์๊ฐ์ผ๋ก ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ข๋ค.
ํด๋น๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ฒ์์ ํฉํ ๋ฆฌ์ผ์ ํ์ฉํ์ฌ ํด๊ฒฐํ๋ค.
const n = 10;
function solution(n) {
const A = Math.floor(n / 2);
let answer = 0;
for (i = 1; i <= A; i++) {
let Sum = 1;
let count = i + n - i * 2; //6
for (j = 0; j < i; j++) {
Sum = Sum * ((count - j) / (i - j));
}
answer = answer + Sum;
}
const answers = (answer + 1) % 1234567;
return answers;
}
solution(n);
ํ์ง๋ง ํด๋น๋ฌธ์ ๋ ํผ๋ณด๋์น ์์ด์ ํ์ฉํด์ ํธ๋ ๊ฒ๋ง ์ ๋ต์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋ค
(n-2)๋ฒ์งธ ํญ + (n-1)๋ฒ์งธ ํญ์ด n ๋ฒ์งธ ํญ์ธ ์์ด์ ๋งํ๋ค.
1,1,2,3,5,8,13,21 ์ด ์ด๋ฌํ๋ค
๋ฌธ์ ๋ฅผ ๋ณด๋ฉด n=1 ์ผ๋ 1 n=2 ์ผ ๋ 2 n=3 ์ผ๋ 3 n= 4์ผ๋ 5 n= 5์ผ๋ 8์ด ๋ฆฌํด๊ฐ์ผ๋ก ๋์ค๋๊ฒ์ ๋ณด๋ฉด ์ด๋ ํผ๋ณด๋์น ์์ด์์ ์ ์์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์
function solution(n) {
let answer = [0, 1, 2];
for (i = 3; i <= n; i++) {
answer[i] = (answer[i - 2] + answer[i - 1]) % 1234567;
}
return answer[n] % 1234567;
}//์ด๋ ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
reduce ๋ฉ์๋๋ map ๊ณผ forEach์ ๋น์ทํ๋ค!
const number = [1,2,3,4]
number.reduce((๋์ฐ๊ฐ,ํ์ฌ์์๊ฐ,ํ์ฌ์์์index,ํ์ฌ๋ฐฐ์ด)={
return ๋ค์๋์ฐ๊ฐ },์ด๊ธฐ๋์ฐ๊ฐ)
์๋ฅผ๋ค์ด ์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
const numbers = [1,2,3,4]
const sum = numbers.reduce((sum,num,index)=>{
return sum+num},0)
//10 ์์ฐจ์ ์ผ๋ก ๋ํด์ค๋ค.
์ฐธ๊ณ https://bigtop.tistory.com/69
const arr = [1,2,3,3,4,4,5,6,6]
arr์ forEach() ๋ฉ์๋๋ฅผ ํตํด ์ํํ๋ฉฐ map์ ์ ์ฅํ๋ฉด์ํ๋ฉด ๊ฐ๋จํ๊ฒ ๋ด์ฉ์ ์ ์ฅํ ์ ์๋ค.
arr.forEach((item))=>{
map.set(item,map.get(item)+1)
}
**๋งค์ผ 1~2๋ฌธ์ ๋ฅผ ๊พธ์คํ ํธ๋ ๊ฒ์ ์ข์ง๋ง ์ด๋ป๊ฒ ๊พธ์คํ ํ์ด๋๊ฐ๋๊ฐ ์ค์ํ ๊ฒ๊ฐ๋ค. ์์ผ๋ก๋ 30๋ถ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ์ ๋๋ ์คํจ๋ก ๊ฐ์ฃผํ๊ณ ํด๋ต์ ๋ณผ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ธ์ด ์จ์ฃผ์ ์ฝ๋๋ฅผ ํ์ธํ๊ณ ๊ทธ๊ณณ์์ ๋ฐฐ์ด ์ ์ ์ ๋ฆฌํ์ฌ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค์ด๋ณด์!! **
๋ฌธ์ ํ์ด๋ ์ ๋ต ์ฑ๊ณต๋ฅ ์์๋ก ์ ๋ ฌํ์ฌ ํ์ด๋๊ฐ๊ฒ ๋ค.
๋ด๊ฐ ํผ ํ์ด
const s = "1 2 3 4";
function solution(s) {
const arr = s.split(` `).sort((a, b) => b - a);
const lastIndex = arr.length - 1;
return `${arr[lastIndex]} ${arr[0]}`;
}
solution(s);
๋์ ๋ฌธ์ ๊ณํ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฌธ์์ด์ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํ์. (split)
- ๋ณ๊ฒฝ๋ ๋ฐฐ์ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์. (sort)
- 0์ธ๋ฑ์ค๋ ์ต๋๊ฐ lastIndex๋ ์ต์๊ฐ์ด ๋๋ค.
- return
${} ${}
๋ก ์ค๊ฐ ๊ณต๋ฐฑ์ ํ์ํ์.
๋ด๊ฐ ๋ณธ ํ์ด
function solution(s) {
const arr = s.split(``);
return Math.min(...arr) + ` ` + Math.max(...arr);
}
๊ตณ์ด ๋ฐฐ์ด์ ์ ๋ํ ํ์์์ด split์ผ๋ก ๊ณต๋ฐฑ์ ์ ๊ฑฐํ ๋ฐฐ์ด๋ก ๋ง๋ ํ ...์ spread operator๋ฅผ ํ์ฉํ์ฌ ๊ณต๋ฐฑ์ด ์๋ string์ผ๋ก ๋ง๋ค์ด์ค๋ค "1","2","3","4" ์ ํํ
๊ทธ ํ Math ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ Math.max, Math.min ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ ํจ์๋ string์ฌ์ด์์๋ ์ฌ์ฉ์ด๊ฐ๋ฅํ๋ค!!
๋ฌธ์ ๋ ๊ฐ๋จํ์ง๋ง ์ด์ํ๊ฒ ํ๋ฆฌ์ง๊ฐ ์์๋ค. ๊ทธ๋ผ ํ์์๊ฒ ๊ฐ๋จํ์ง ์์๋ค๋ ๋ง..
์ด ์ ์ ํ์์ ๋๋ ํต๊ณผํ์์ง๋ง ์ฝ๋๊ฐ ๊ต์ฅํ ์ง์ ๋ถํ๋ค.
๋์ ๋ฌธ์ ํด๊ฒฐ ๊ณํ์ ๋ค์๊ณผ ๊ฐ๋ค.
- split ๋ฉ์๋๋ก ์คํธ๋ง์ ๋ฐฐ์ดํ ์ํจ๋ค
- ๋ฐ์์จ ์์์์ ๊ณต๋ฐฑ์ด ์๋ ์์๋ ๋ค์ ํ๋ฒ map์ ์ฌ์ฉํ๋ค.
- ๊ทธ ๋ ๋ฐ์์จ ์์์ ์ธ๋ฑ์ค๊ฐ 0์ด๊ณ ์ฒซ ๋ฒ์งธ ์ธ์๊ฐ ์ซ์๊ฐ ์๋๋ผ๋ฉด toUpperCase๋ฅผํ๊ณ ๋๋จธ์ง ์์์ toLowerCase๋ฅผ ํ๋ค.
๊ฒฐ๊ณผ๋ ์คํจ !
์คํจํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
const s = "3people unFollowed me";
function solution(s) {
const arr = s
.toLowerCase()
.split(` `)
.map((item) => {
if (item === ``) {
return item;
}
return item
.split()
.map((charset, index) => {
const check = /^[a-zA-Z]+$/;
console.log(charset);
return check.test(charset) === false && index === 0
? charset
: charset.toUpperCase();
})
.join(``);
});
return arr;
}
solution(s);
์ ๊ท์์.. map ๋๋ฒ split ๋๋ฒ ๊ต์ฅํ ๋ณต์กํด๋ณด์ธ๋ค.
ํนํ ์ ๊ท์์์ ์ ํค๋งธ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค. **๊ธฐ๋ณธ์ ์ธ ์ ๊ท์.test(string) ** ์ด๊ฑธ ์ ๊ทธ๋ ๊ฒ ํค๋ฉจ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
์ ๋ฆฌํ๋ฉด์ ํด๋ณด๋ ๋ด๊ฐ ์๋๊ฒ ์ ๋๋ก ์๋๊ฒ ์๋์๊ตฌ๋ ๋ผ๋ ์ ์ ์๊ฒ๋๋ค..
๋ค์ ํด๋ต์ ๋ณด๋ฉด์ ๋๋ ์ ๋ฐ ์๋ชป๋ ์ค๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค.
toUpperCase์ toLowerCase๋ ์ซ์์ ์ ์ฉํ๋ ๋น์นธ์ ์ ์ฉํ๋ ๋ณํ์ง ์๋ ํจ๊ณผ๋ ๋์ผํ๋ค ์ฆ, ๊ตณ์ด ์ซ์์ ๋น์นธ์ ๋๋์ด์ค ํ์๊ฐ ์๋ค. ๊ทธ๋ฅ ์ฒซ๋ฒ ์งธ ์ธ๋ฑ์ค๋ UpperCase() ๋๋จธ์ง๋ LowerCase()๋ฅผ ์ ์ฉํด์ฃผ๋ฉด๋๋ค.
์ด๋ ๊ฒ ์๊ฐํ๋ ์ ๊ท์์ด ํ์๊ฐ ์์ด์ก๋ค. ์ด์ ๊ทธ๋ฅ string์ ์ฒซ ๋ฒ์งธ ์์์ ๋๋จธ์ง ์์์ ์ ๊ทผํ ์ ์์ผ๋ฉด ๋๋ค.
๋ด๊ฐ ๋ณธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
const S = "3people unFollowed me";
const arr = S.split(` `)
.map((item) =>
item === ""
? item
: item.charAt(0).toUpperCase() + item.substring(1).toLowerCase()
)
.join(` `);
์ ์ฝ๋๋
์ ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. map๊ณผ forEach๋ ๋ฐฐ์ด์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ด ๋งค์๋๋ฅผ ์ฐ๋ ค๊ณ ๋ค์ํ๋ฒ ๋ฐฐ์ด์ ์์ฑํ๋ ๋ฐ๋ณด๊ฐ์ ์ง์ ํ๋ค..
string ์์ฒด์์ ๋ช ๋ฒ์งธ ์์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด charAt,substring ๋๊ฐ๋ฉด ๋๋ค.
๋จผ์ charAt์ผ๋ก string์์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๊ฐ์ ธ์์ toUpperCaseํด์ฃผ๊ณ ๋๋จธ์ง ์์๋ substring์ผ๋ก ์ ๊ทผํ์ฌ toLowerCase ํด์ฃผ๋ฉด ๋๋ค. javascript์์๋ string ๋ผ๋ฆฌ์ + ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ item.charAt(0).toUpperCase() + item.substring(1).toLowerCase() ์ด๋ ๊ฒ return ํด์ค ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์๊ฒ๋ ํ์์ ์ข์ง ์์ ์ต๊ด์ ๋ฌธ์ ์ ์จ์ง๋๋ก ํผ๋ค๋ ์ ์ด๋ค ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์๊ฐํ ํ ํด๊ฒฐํ๋ ์ต๊ด์ ๊ฐ์ ธ์ผ ํ ๊ฑฐ ๊ฐ๋ค. ๋ฌธ์ ์ ์จ์ง ํํธ๋๋ก ํด๊ฒฐํ๋ค๋ณด๋ ๋ฌธ์ ๊ฐ ๋ณต์กํด์ง๊ณ ํ์์๋ ์ฐ์ฐ์ด ๋ค์ด๊ฐ๋ค.
์ด ๋ฌธ์ ๋ ๋น๊ต์ ์ฌ์ด ๋ฌธ์ ์๋ค.
๋ฐฐ์ด์ ์์๋ฅผ ๋๋คํ๊ฒ ๊ณฑํ์ ๋ ๊ฐ์ฅ ์ต์๊ฐ ๋์ค๋ ๊ฐ์ ๋ฆฌํดํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
ํ์์ ์ ๊ทผ๋ฒ์ ๋ค์๊ณผ๊ฐ๋ค.
A๋ฐฐ์ด์ ๊ฐ์ฅ ์์ ์ซ์์ B๋ฐฐ์ด์ ๊ฐ์ฅ ํฐ์ซ์๋ฅผ ๊ณฑํ๋ฉด ๊ฒฐ๊ณผ๊ฐ์ด ๊ฐ์ฅ ์์ง์๋?
๊ฒฐ๊ณผ๋ ์ฑ๊ณต!
๋ด๊ฐ ํผ ์ฝ๋
const A = [1, 4, 2];
const B = [5, 4, 4];
function solution(A, B) {
const a = A.sort((a, b) => a - b);
const b = B.sort((a, b) => b - a);
let answer = 0;
for (let i = 0; i < A.length; i++) {
answer = answer + a[i] * b[i];
}
return answer;
}
๊ทธ๋ผ์๋ ์ฌ๊ธฐ์ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ ์๋ ํ์ธ์ ์ฝ๋๊ฐ ์์๋ค.
function solution(A,B){
A.sort((a, b) => a - b)
B.sort((a, b) => b - a)
return A.reduce((total, val, idx) => total + val * B[idx], 0)
}
์ฌ๊ธฐ์ ๋ฐฐ์ด ์ ์ 2๊ฐ์ง์ด๋ค
- sort๋ ์๋ณธ์ ๋ณ๊ฒฝ์ํจ๋ค! ๊ทธ๋ผ์ผ๋ก ์๋ก ๊ทธ ๊ฐ์ ์ ์ฅํ์ง ์์์ค๋ ๋๋ค.
- reduce
reduceํจ์๋ ๊ฐ๋ ์ผ์์ง๋ง ์์ฃผ ์ฐ์ง๋ ์์๋ค. ๋ญ๊ฐ reduce๋ฅผ ์ฐ๋ ๊ฒ๋ณด๋ค for๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ธ์ ์ผ๋ก๋ ๋ ์ข์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ผ์๋ reduce๋ฅผ ํ๋ฒ ์์๋ณด๊ณ ๋์ด๊ฐ์ผํ ๊ฑฐ ๊ฐ์ ์ ๋ฆฌ๋ฅผ ํด๋ณธ๋ค.
reduce ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
๋ฐฐ์ด.reduce((๋์ ๊ฐ,ํ์ฌ๊ฐ,์ธ๋ฑ์ค,์์)=>{return ๊ฒฐ๊ณผ, ์ด๊ธฐ๊ฐ}
์ฌ๊ธฐ์ ์ด๊ธฐ๊ฐ์ ์ค์ ํด์ฃผ์ง ์์ผ๋ฉด ์๋์ผ๋ก 0์ด ๋๋ค.
ํ์ง๋ง reduce๋ฅผ ๋ฌด์กฐ๊ฑด ๋ง์ ์ ํ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋ค.
map, filter์ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
result = array.reduce((acc,cur)=>{
acc.push(cur%2===0 ? "ํ์" : "์ง์")
return acc;
},[])
์ด๋ ๊ฒ ์ด๊ธฐ๊ฐ์ [] ์ธ ๋ฐฐ์ด๋ก ์ค์ ํ๋ฉด ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ฐฐ์ด๋ก ๋ฆฌํด๋ ๊ฐ๋ฅํ๋ค.
์ ๋ฆฌํ๋ฉด array.reduce((๋์ ๊ฐ, ํ์ฌ๊ฐ, ์ธ๋ฑ์ค)=>{ return },์ด๊ธฐ๊ฐ)
์ด๋ ๊ฒ ์ฌ์ฉํ๊ณ return๋ ๊ฐ์ ๋ฐ๋ ๋ฉ์๋์ด๋ค! ์ ๋ก์ด Reduce ์ค๋ช ๊ธ
์ฌ๋ฐ๋ฅธ ๊ดํธ๋ฌธ์ ๋ "์คํ" ๋ฌธ์ ์ด๋ค
์คํ๋ฌธ์ ๋ ํ๋ก๊ทธ๋๋จธ์ค JS ์ฝ๋ฉํ ์คํธ ์ธํฐ๋ท๊ฐ์
์ฌ๊ธฐ์ ๋ค๋ฃจ์ด ๋ณด์๋ค. ์คํ์ First In Last Out์ด๋ค. ์ฒ์์ ๋ค์ด์จ๊ฒ์ด ๋ง์ง๋ง์ ๋๊ฐ๋ ์์์ธ๋ฐ ์ฌ๊ธฐ์๋ ๊ทธ๋ฅ ๊ฒ์ฆ์ ํด์ฃผ๋ ์ฉ๋๋ก ์คํ์ ์ฌ์ฉํ๋ฉด๋๋ค.
๋์ ์ ๊ทผ๋ฒ์ ์๋์ ๊ฐ๋ค. "(" ๋ฅผ ๋ณด๋ฉด arr์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ด๊ณ ")"๋ฅผ ๋ณด๋ฉด arr์์ ํ๊ฐ์ง๋ฅผ ๋นผ์ ๋ง์ฝ arr์ด ๋น์๋๋ฐ (length๊ฐ 0 ์ธ๋ฐ) ")" ๊ฐ ๋์จ๋ค๋ฉด false๋ฅผ return ๋ ๋ชจ๋ ๋ฐฐ์ด ์ํ์ด ๋๋ ํ length๊ฐ 0๋ณด๋ค ํฌ๋ฉด false๋ฅผ return ํ๋ ๊ฒ์ผ๋ก ์ ํ๋ค.
๋์ ํ์ด๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
const s = "(())()";
function solution(s) {
const check = [];
for (let i = 0; i < s.length; i++) {
if (s.charAt(i) === "(") {
check.push(0);
}
if (s.charAt(i) === ")") {
if (check.length === 0) {
return false;
}
check.pop();
}
}
if (check.length > 0) {
return false;
}
return true;
}
์์ ๋ฐฐ์ด ๋ฌธ์ ์์ split ํ์ง ์๊ณ charAt์ผ๋ก string ๋ด๋ถ์ index์ ์ ๊ทผํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
๋์ ํ์ด๋
- s==="1"์ด ๋ ๋ ๊น์ง s๋ฅผ ๊น์ ๋๊ฐ์ผ๊ฒ ๋ค!
- "0"์ filter๋ก ์ ๊ฑฐํ ๋๋ง๋ค zeroCount๋ฅผ 1์ฉ ๋์ด์
- ๊ทธ ํ s= 0์ด ์ ๊ฑฐ ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ 2์ง๋ฒ์ผ๋ก ๋ํ๋ธ ๊ฐ์ผ๋ก "์ฌํ ๋น" ํด์ค๋ค
- ๊ทธ๋ฆฌ๊ณ transCount(2์ง๋ฒ์ผ๋ก ๋ฐ๊พผ ํ์)๋ฅผ ๋์ธ๋ค
๋์ ์ฝ๋
function solution(s) {
let zeroCount = 0;
let transCount = 0;
while (s !== "1") {
//.split ๋ณด๋ค spread Operator๋ฅผ ์ฌ์ฉํด์ string => arr๋ก ๋ณ๊ฒฝํ์๋ค.
const ArrLength = [...s].filter((item) => {
if (item === "1") {
return item;
}
if (item === "0") {
zeroCount = zeroCount + 1;
}
}).length;
s = ArrLength.toString(2);
transCount = transCount + 1;
}
//0๋ค ์ฌ๋ผ์ง
return [transCount, zeroCount];
}
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด์ ์ฌํ ๋น์ ๋ํ ๊ฐ๋ ์ ์ข ๋ ํ์ตํด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
ํ์๊ฐ ์ด ๋ฌธ์ ์์ ํค๋งธ๋ ๋ถ๋ถ์ ์ฌํ ๋น์ ํด์ฃผ๋ ์์ ์ ํท๊ฐ๋ คํ๋ค.. ์๋ง let๊ณผ const์ ์ฌํ ๋น์
๋ค์ ํ์ตํด์ผ๊ฒ ๋ค ์๊ฐ์ ํ๋ค.
- ๋ณ์์ ์ธ๋ฐฉ์
Var : ์ค๋ณต ์ ์ธ โญ๏ธ ์ฌํ ๋น โญ๏ธ
var A ="123"
var A ="345"
์ด๊ฒ ๋๋ค ใท ใท var์ ๋ง์ง๋ง์ ํ ๋น๋ ๊ฐ์ด ์ต์ข ๋ณ์์ ์ ์ฅ๋๋ค. ์ด๋ ์๋ ์ ๊ฒ์ด ๋ ์ ์๋ค. ์ ์ฐํ๊ฒ ์ฌ์ฉ๋ ๊ฐ๋ฅํ์ง๋ง ๋์ ์ค์๋ฅผ ์ด๋ค ๊ฒ๋ ์๋ ค์ฃผ์ง ์๋๋ค..
Let : ์ค๋ณต์ ์ธ โ ์ฌํ ๋น โญ๏ธ
let A ="123"
let A ="345"
//์ด๋ฌ๋ฉด ์ค๋ฅ๋ฉ์ธ์ง ๋ฐ๋ก ๋ฑ์ฅ!!
A = "456"
//์ด๊ฑด ๊ฐ๋ฅ!
์ ์ฝ๋์ ๊ฐ์ด ์ค๋ณต์ ์ธ์ ์๋์ง๋ง ์ฌํ ๋น์ ๊ฐ๋ฅํ๋ค. ์ฌํ ๋น์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ๋ฅผ ํ๋ ์ ์ฉํ๊ฒ ์์ฉํ ๊ฑฐ ๊ฐ๋ค.
Const: ์ค๋ณต์ ์ธ โ ์ฌํ ๋นโ
const A ="123"
const A="345"
//์ค๋ฅ๋ฐ์!!!
A="678"
//์ค๋ฅ๋ฐ์!!!
Const๋ ๋ณํ์ง ์๋ ๊ฐ์ ์ ์ธํ๋๋ฐ ์ ์ฉํ๋ค ๊ทธ๋ฌ๋ array์ push ๋๋ ๊ฒ์ ์ค๋ณต์ ์ธํ๊ฑฐ๋ ์ฌํ ๋น ํ๋๊ฒ์ด ์๋์ผ๋ก ๋ฐฐ์ด์๋ const๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
2.์ค์ฝํ
Var: ํจ์๋ ๋ฒจ์ค์ฝํ
์ฆ, ํจ์ ๋ด๋ถ์ ์๋ var์ด๋ฉด ํจ์ ๋ด์์ ์ ํจํ๋ค!
const AA = (a)=>{
if(a==="1"){
var b="234"
}
console.log(b)
}
AA(a) //์ด๊ฒ ์๋ฌ๋์ง์๊ณ ๊ฐ๋ฅํ๋ค ๊ทธ์ ํจ์์์์๋ง ์ ์ธ๋๋ค๋ฉด
//๊ทธ ํจ์ ๋ด๋ถ์์๋ ๋ชจ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
Const, Let : ๋ธ๋ก๋ ๋ฒจ์ค์ฝํ
ํจ์ ๋ฟ ์๋๋ผ if ์ for while try/catch forEach ๋ฑ ๋ชจ๋ ์ฝ๋๋ธ๋ก ๋ด๋ถ์์ ์ ์ธ๋ ๋ณ์๋ ๋ธ๋ก ๋ด๋ถ์์๋ง ์ ํจํ๋ค.
const AA =()=>{
for(let i = 0 ; i<3;i++){
const A = "123"
}
console.log(A)
}
//์ด๋ฌ๋ฉด ๋ฐ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. A๋ for๋ฌธ ์์์ ์ ์ธ๋๊ธฐ ๋๋ฌธ์ for๋ฌธ ์์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
//for๋ฌธ ์์ ๊ฐ์ ์ธ๋ถ์ let ๋ณ์์ ์ฌํ ๋นํด์ค ์๋ ์๋ค.
- ํธ์ด์คํ ๋ฐฉ์
๋จผ์ ํธ์ด์คํ ์ด๋ ํจ์๋ด ํ์ํ ๋ชจ๋ ๋ณ์๊ฐ๋ค์ ์ ํจ๋ฒ์์ ์ต์๋จ์ ์ ์ธํ๊ฒ์ฒ๋ผ ๋์ํ๋๊ฒ์ ๋งํ๋ค. ๊ทธ๋ฅ ๋ณ์,ํจ์๋ค์ ๋งจ์๋ก ์ฌ๋ผ์จ๋ค๋ ๋ง!
Var:
console.log(a); //undefined
var a = 123;
console.log(a); //123
a์ ํ ๋น๋ง ์๋์ ๋ฟ ์ ์ธ๋์์์ ์๊ณ undefined๋ก ์ด๊ธฐํ๋ฅผ ์์ผ๋์์ undefined๋ฅผ ์ถ๋ ฅํ๋ค.
Const,Let:
console.log(a); //ReferenceError: a is not defined
let a = 123;
console.log(a); // 123
let๊ณผ const๋ ์ ์ธ๋งํด๋๊ณ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฆ, ์ด๊ธฐํ ์ฐจ์ด์ด๋ค. Var์ ์ ์ธ๊ณผ ๋์์ ๋ณ์ ๊ฐ์ ๋ํ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง๋ง const ์ let์ ๋ณ์ ์ ์ธ๋ฌธ์ ๋ง๋์ผ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
๋ฌธ์ ๋ 1์ฉ ๋ํด์ n์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์๋ค. ์ฌ์ค ์ด ๋ฌธ์ ๋ฅผ ๊ธ๋ฐฉ ํ์ ์์ ๊ฑฐ๋ผ ์๊ฐํ๋๋ฐ 35๋ถ์ ๋ ๊ฑธ๋ ธ๋ ๊ฑฐ ๊ฐ๋ค..
์ด ์ ์ ์ด ๋ฌธ์ ๋ฅผ ์ ํ์ ๋ ์ด์คfor๋ฌธ(์ด๋ฒ๋์ฌ์ฉํ์ง๋ง ใ ใ ) else if ๋ถํ์ํ ์ ์ ์ ๊ฑฐํ๊ณ ์ต์ ์ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ๊ณ ์ถ์๋ค.
์ด์ ์ ๋ด๊ฐ ํ์๋ ํ์ด ๋ฐฉ๋ฒ์
function solution(n) {
let arr = [];
let sum = 0;
let count = 0;
let check = 0;
for (i = 1; i <= n; i++) {
arr.push(i);
}
for (i = 0; i < arr.length; i++) {
sum = sum + arr[i];
if (sum > n) {
check = check + 1;
i = check;
sum = 0;
} else if (sum === n) {
check += 1
count +=1
i = check;
sum = 0;
}
}
return count;
}
๋ค์๊ณผ ๊ฐ๋ค. ๋จผ์ n๊น์ง์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๊ทธ ๋ฐฐ์ด์ for๋ฌธ ์์์ ์ํํ๋ฉด์ ์์ฐจ์ ์ผ๋ก ๋ํ๋ค. ์ด์คfor๋ฌธ์ ์ฌ์ฉํ๋ ๋์ ์ check๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด ๊ทธ๊ฒ์ผ๋ก i๋ฅผ ์ฌํ ๋น ํ์ฌ 1๊ฐ์ for๋ฌธ์ด ๋ฐ๋ณต๋๋๋ก ํ์๋ค.
๊ฐ์ ์
- ๋ฐฐ์ด์ ๊ตณ์ด ๋ง๋คํ์๊ฐ ์์๊น?
- else if๋ฅผ ์์จ๋ ๋ ๊ฑฐ ๊ฐ๋ค.
- check๋ผ๋ ๋ณ์๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ฒ๋ณด๋ค๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์๊น?
์ ์ธ๊ฐ์ง ์ฌํญ์ ๊ณ ๋ คํ์ฌ ๋ค์ ์ฝ๋๋ฅผ ๊ตฌ์ฑํด ๋ณด์๋ค.
const n = 15;
function solution(n) {
let count = 0;
for (let i = 1; i < n / 2; i++) {
let sum = 0;
for (let j = i; j < n; j++) {
sum = sum + j;
if (sum === n) {
count = count + 1;
break;
}
if (sum > n) {
break;
}
}
}
return count + 1;
}
solution(n);
์ผ๋จ ์ด์คํฌ๋ฌธ์ ์ฌ์ฉํ์๊ณ break๋ฅผ ํตํด ๋ด๋ถ์ for ๋ฌธ์ ์ปจํธ๋กคํ์๋ค. ์ธ๋ถ์ for๋ฌธ์ ๊ตณ์ด n ๊น์ง ๋์ง ์์๋ ๋๋ค๊ณ ์๊ฐํ์ฌ n/2 ๊น์ง๋ง ๋๋๋ก ์ฝ๋๋ฅผ ์งฐ๋ค.
ํ์ธ์ ์ฝ๋
function expressions(num) {
var answer = 1; //(15)
var n, sum;
for(var i=1;i<=Math.floor(num/2);i++){
n = i;
sum = 0;
while(sum<num) sum += n++;
if(sum==num) answer++;
}
return answer;
}
๋ด๊ฐ ๋จธ๋ฆฌ์์ ๊ตฌ์ํ๋ ๊ฑด ์ ์ฝ๋์ด๋ค!!
while(sum<num) ์ผ๋ก ์ ํ์ ๊ฑธ์ด๋์ด์ ์๋์ผ๋ก ํฉ์ด num์ ๋์ด์๋ฉด ๋ค์ i๋ก ์งํ๋๋๋ก ์ฝ๋๊ฐ ์ง์ฌ์ ธ์์ด์ ๋ณด๊ธฐํธํ๋ค.
ํผ๋ณด๋์น ์์ด์ 0,1,1,2,3,5,8,13,21 ... ์ด๋ ๊ฒ ๋์ ๋๊ฐ์ฉ ๋ํ๊ฒ ๋ค์ ์์ด์ ์์๊ฐ ๋๋ค.
์ด ๋ฌธ์ ๋ ์ฒ์ ํ์์ ๋ ์ดํดํ์ง ๋ชปํ์ฌ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๋ก ๋จ์์์๋ค.
๊ทธ๋ฐ๋ฐ ๋ค์ ํ์ด๋ณด๋ ์๊ฐ๋ณด๋ค ์ฝ๊ฒ ํด๊ฒฐ์ด ๋์๋ค !!!! ใ ใ
๋ด๊ฐ ์๊ฐํ ๋ ผ๋ฆฌ๋ ์ด๋ ๋ค.
- ๋ฐฐ์ด๋ก ์๊ฐํ์ ๋ ๊ธฐ๋ณธ ๋ฐฐ์ด [0,1]์ lastIndex์ ์์์ lastIndex-1์ ์์๊ฐ ๋ค์ ๋ฐฐ์ด ์์๊ฐ ๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด lastIndex๋ฅผ ์์๋ด๊ณ ๊ฐ๊ฐ lastIndex์์์ lastIndex-1์ ์์๋ฅผ ๋ํด ๋ฐฐ์ด์ pushํ๋ค.
- ์ด๋ฅผ n-1 ๋งํผ ์ํํ๋ฉด์ push ํด์ผ ์ํ๋ ๋ง์ง๋ง ๋ฐฐ์ด์์๋ฅผ ์ป์ ์ ์๊ณ ์ด๊ฒ์ด ๋ต์ด๊ฒ ๋ค!
ํด์ ์ฒ์ ์ง ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
const n = 5;
function solution(n) {
const arr = [0, 1];
while (arr.length !== n + 1) {
const Arrlength = arr.length;
arr.push((arr[Arrlength - 1] + arr[Arrlength - 2]));
}
return arr[arr.length - 1] % 1234567;
}
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ํด๊ฒฐํ๋ ค๊ณ ํ์ ํจ์จ์ฑํ ์คํธ์์ ๋ชจ๋ ๋ถํฉ๊ฒฉ ํ์๋ค. n์ 100,000๊น์ง ๋์ฌ ์ ์๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด 100,000๋ฒ์งธ ํผ๋ณด๋์น์์ด์ ๋๋ฌด ๊ฑฐ๋ํด %1234567์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
์ค๋ฅผ ์ค๋ฒํ๋ก์ฐ ๋ผ๊ณ ํ๋ค. ์ด ์ซ์๋ค์ 32๋นํธ ์ ์ ๋ฒ์๋ฅผ ๋๊ธฐ๋๋ฌธ์ ๋ชจ๋ ๋จ๊ณ์ %์ฐ์ฐ์ ์ฌ์ฉํด์ผํ๋ค.
๊ทธ๋ ๊ฒ ์์ ํ ์ฝ๋๋
const n = 5;
function solution(n) {
const arr = [0, 1];
while (arr.length !== n + 1) {
const Arrlength = arr.length;
arr.push((arr[Arrlength - 1] + arr[Arrlength - 2]) % 1234567;);
}
return arr[arr.length - 1];
}
์ ์ฝ๋์ด๋ค. push๋ฅผ ํ๊ธฐ์ ์ ๊ฐ ์์๋ฅผ ๋ํด์ฃผ๋ ๊ณผ์ ์์ ๋จผ์ % ์ฐ์ฐ์ ํ์ฉํ์ฌ ๊ฐ์ด ์ผ์ ์ด์ ์ปค์ง์ง ์๊ฒ ๋ง๋ค์๋ค.
๋ฌธ์ ๋ง ์ดํดํ๋ฉด ์ฌ์ด๋ฌธ์ ์ด๋ค!
ํด๋น ๋ฌธ์ ๋ ์ด์ ์ ํ์์ ๋๋ ํ์์๊ณ ์ง๊ธ์ ์ฝ๋์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์๋ค.
๋ ผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- n์ toString() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ด์ง๋ฒ์ผ๋ก ๋ํ๋ธ ํ ๋ฐฐ์ด๋ก ๋ณํ, ๊ทธ๋ "1"๋ง filterํ์ฌ ๊ทธ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค.
- ๊ทธ๋ฆฌ๊ณ for๋ฌธ์ ๋ง๋ค์ด n+1์ ์์์ผ๋ก 1,000,000 ๊น์ง ์ํํ๋๋ก ๋ง๋ ํ
- ํด๋น i์ ์ด์ง๋ฒ ๋ณํ, ๋ฐฐ์ดํ ํ "1"๋ง ํํฐ๋งํ์ฌ ์ n์ ๊ธธ์ด์ ๊ฐ์์ง ํ์ธํ๋ค!
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
const n = 78;
function solution(n) {
const oneCount = n
.toString(2)
.split(``)
.filter((item) => item === "1").length;
for (let i = n + 1; i < 1000000; i++) {
if (
i
.toString(2)
.split(``)
.filter((item) => item === "1").length === oneCount
) {
return i;
}
}
}
solution(n);
์ ๋ฌธ์ ๋ ์คํ๋ฌธ์ ์๋ค.
์คํ Arr์ ์์ฑํ์ฌ ๋ฐฐ์ด์ ์ํํ๋ฉด์ ์ด์ ์๊ฐ๋ค๊ณผ ๋น๊ต ํ ์คํ Arr์ ์ ๊ฑฐํด๋๊ฐ๋ฉด๋๋ค.
์ด ๋ฌธ์ ๋ ์ด์ ์๋ ํ์์๊ณ ๋ ผ๋ฆฌ๋ ๊ทธ ์ ๊ณผํฌ๊ฒ ๋ค๋ฅด์ง ์์๋ค
function solution(s) {
const Arr = s.split(``);
const check = [];
for (let i = 0; i < Arr.length; i++) {
if (check[check.length - 1] === Arr[i]) {
check.pop();
continue;
}
check.push(Arr[i]);
}
return check.length === 0 ? 1 : 0;
}
์ ์ฝ๋๋ ์ฒ์ ํ์๋ ์ฝ๋์ด๋ค. continue๋ฅผ ํตํด if๋ฅผ ์ต๋ํ ๋๋ฒ ์์ฐ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค ์ฐ์ํํ ํฌ์ฝ์ค ํ๋ฆฌ์ฝ์ค์์ if์ else๋ ์ต๋ํ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ผ์๋ ๋น๊ต๋ฅผ ์ํด else๋ฅผ ์จ๋ณด์๋๋ฐ ์ด ๋ฌธ์ ์์ ๊ทธ๊ฒ ๋ ํจ์จ์ฑ์ด ์ข๊ฒ ๋์๋ค.
else๋ฅผ ์ฌ์ฉํ ๋ฌธ์ ํ์ด
function solution(s) {
const Arr = s.split(``);
const check = [];
for (let i = 0; i < Arr.length; i++) {
if (check[check.length - 1] === Arr[i]) {
check.pop();
} else {
check.push(Arr[i]);
}
}
return check.length === 0 ? : 1 : 0
}
๋ฌธ์ ๋ณ๋ก else๋ฅผ ์ผ์ ๋ ๋ ๋์ ํจ์จ์ ๋ณด์ผ ์ ์๋๋ณด๋ค
๊ทธ๋ฆฌ๊ณ ๋ ํ๋ ๋ฐฐ์ด์ ์ for๋ฌธ์์ ++ ์ +=1 ์ ๋น๊ต์ด๋ค.
++๋ณด๋ค +=1 ์ ํจ์จ์ฑ์ด ๋ ๋๊ฒ๋์๋ค. ์ด๊ฒ ์ญ์ ๋ฌธ์ ๋ณ๋ก ๋ฌ๋ผ
ํน์ ํจ์จ์ฑ ๋ฌธ์ ์์ ํต๊ณผํ์ง ๋ชปํ์ ๋ ์ ๋ ๊ฐ์ง๋ฅผ ๋ณ๊ฒฝํด ๋ณด์์ผ๊ฒ ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ์์๋ forEach๋ก ์ ๊ทผํ์๋๋ฐ
forEach๋ณด๋ค๋ for๋ฌธ์ด ๋ ๋์ ํจ์จ์ฑ์ ๋ณด์๋ค.
์ด ์ ์๋ ํ์ด๋ณธ ๋ฌธ์ ์ง๋ง ์ด๋ฒ์ ์๋กญ๊ฒ ํ ๋ ํจ์จ์ฑ์ด ๋ง์ด ๊ฐ์ ๋์ด ๊ธฐ๋ถ์ด ์ข์๋ค.
์ด ๋ฌธ์ ๋ ์ฝ๊ฐ ํ๋น์ฑ๊ฒ์ฌ์ ๋น์ทํ ๋ฌธ์ ์ด๋ค. ๋ช๊ฐ์ง ์กฐ๊ฑด์ ๋ฐ๋ผ return ๊ฐ์ด ๋ฌ๋ผ์ง๋ค
๋จผ์ ๊ณผ๊ฑฐ์ ๋ด๊ฐ ํ์๋ ์ฝ๋๋ฅผ ๋ณด๊ฒ ๋ค!
function findFailPerson(index, n) {
const answer = [];
const person = (index + 1) % n;
const personOrder = Math.ceil((index + 1) / n);
if (person === 0) {
answer.push(n, personOrder);
}
if (person !== 0) {
answer.push(person, personOrder);
}
return answer;
}
function findWordLength(wordArr) {
if (wordArr.length < 2) {
return false;
}
}
function findWordDuplicate(word, checkDupArr) {
if (checkDupArr.includes(word)) {
return false;
}
checkDupArr.push(word);
}
function findWordLine(wordArr, checkLineArr, index) {
const wordArrLastIndex = wordArr.length - 1;
const checkLineArrLastIndex = checkLineArr.length - 1;
if (index !== 0 && checkLineArr[checkLineArrLastIndex] !== wordArr[0]) {
return false;
}
checkLineArr.push(wordArr[wordArrLastIndex]);
}
function solution(n, words) {
const checkDupArr = [];
const checkLineArr = [];
let index = 0;
for (index; index < words.length; index++) {
const wordArr = words[index].split(``);
if (findWordLength(wordArr) === false) {
console.log("asdd");
return findFailPerson(index, n);
}
if (findWordDuplicate(words[index], checkDupArr) === false) {
return findFailPerson(index, n);
}
if (findWordLine(wordArr, checkLineArr, index) === false) {
console.log("Ads");
return findFailPerson(index, n);
}
console.log(wordArr);
}
return [0, 0];
}
์ด๋๋ ๋ญ๊ฐ..ํจ์๋ฅผ ๋๋๋๋ฐ ์ฌ์ทจํด์์๋ ๊ฑฐ ๊ฐ๋ค.. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ ๊ฒ ๋๋ด๋ ๋ถ๋ถ์ด ๋ ์ข์ง ์์ ํจ์จ์ ๋ง๋ค์๋ค. ํ์ง๋ง ์ด๋์ ๋ด ์ฝ๋๋ ๊ฝค ๋ง์์ ๋ ๋ค! ์๊ฐ๋ณด๋ค ๊ธธ์ด์ ๋นํฉํ์ง๋ง ํ๋ํ๋ ๋ณด๋ค๋ณด๋ ์ด๋ค ์ญํ ์ ํ๋ ํจ์์ธ์ง ๋ณด์ด๊ธดํ๋ค.ใ ใ ใ ใ
์๋๋ ์ค๋ ์๋กญ๊ฒ ํผ ํ์ด์ด๋ค.
function solution(n, words) {
const check = [];
for (let i = 0; i < words.length; i++) {
if (words[i].length === 1) {
return [(i % n) + 1, Math.ceil((i + 1) / n)];
}
if (check.includes(words[i])) {
return [(i % n) + 1, Math.ceil((i + 1) / n)];
}
const checkLastIndex = check.length - 1;
check.push(words[i]);
if (i > 0) {
if (
check[checkLastIndex].charAt(check[checkLastIndex].length - 1) !==
words[i].charAt(0)
) {
return [(i % n) + 1, Math.ceil((i + 1) / n)];
}
}
}
return [0, 0];
}
ํจ์๋ฅผ ๋๋์ง ์์์ ๋ฟ ๊ณผ์ ์ ๋น์ทํ๋ค.
๋ ผ๋ฆฌ๋ ์ด๋ ๋ค.
- ์ด์ ์ ๋ฑ์ฅํ๋ ๋จ์ด๋ฅผ ์ฐพ๋ ์กฐ๊ฑด๋ฌธ์ด ํ์
- ๋ฐฐ์ด์ includes ํจ์๋ก ํ์ธํ๋ฉด ๋๊ฒ ๋ค.
- ์ด์ด์ง์ง์๋ ๋จ์ด ์ฐพ๋ ์กฐ๊ฑด๋ฌธ์ดํ์
- stack ์ฒ๋ผ ๋ฐฐ์ด์ ์ํํ๋ฉฐ stack arr์ ๋ฃ์ด stack arr์ ๋ง์ง๋ง ์ธ๋ฑ์ค ๊ฐ๊ณผ for๋ฌธ i ์ธ๋ฑ์ค์ ๊ฐ์ ๋น๊ตํ๋ฉด๋๊ฒ ๋ค.
- ํ ๊ธ์์ธ์ง๋ฅผ ์ฐพ๋ ์กฐ๊ฑด๋ฌธ์ด ํ์
- for๋ฌธ ์์์ length๋ฅผ ๊ฑฐ๋ฅด๋ ์กฐ๊ฑด๋ฌธ์ด ํ์
๊ทธ๋ฆฌ๊ณ Math.ceil,charAt ๋ฑ์ผ๋ก ๋ํ ์ผํ ๋ถ๋ถ์ ๊ตฌํํ์๋ค.
๋ค๋ฅธ ๋ถ๋ค์ด ํผ ํ์ด๋ฅผ ๋ณด๋ slice๋ก ํผ ํ์ด๊ฐ ๋ง์ด ๋ณด์๋ค. ๊ทธ๋์ ๊ฐ๋จํ๊ฒ slice์ splice๋ฅผ ๋น๊ตํ์ฌ ํ์ตํด๋ณด์๋ค.
- slice
slice ๋ฉ์๋๋ ์์๋ถํฐ ๋๊น์ง๋ฅผ ํ๋กํผํฐ๋ก ๋ฐ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ค.
_์ด๋, ์๋ณธ ๋ฐฐ์ด์ ์์ ๋์ง ์๋๋ค!! _
-splice
splice ๋ฉ์๋๋ ๊ธฐ์กด์ ๋ฐฐ์ด์ ์ญ์ ๋๋ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
์ฆ ์๋ณธ๋ฐฐ์ด์ ์์ ๋๋ค.
splice(์์์ธ๋ฑ์ค,์ ๊ฑฐํ ์์์ ์ , ์ถ๊ฐํ ์์)
let arr =[1,2,3,4]
const arr2 = arr.splice(0,2,"5")
console.log(arr) //[3,4,5]
console.log(arr2) //[1,2]
์ฆ ์๋ณธ์ ์๋ ค๋๊ฐ๊ณ ๋, ์๋ ค๋๊ฐ ๋ถ๋ถ์ ์๋ก์ด ๋ณ์์ ํ ๋นํ์ฌ ๊ฐ์ ธ์ฌ ์ ์๋ค. ๋์ splice๋ ํจ์จ์ ์ผ๋ก ๊ฝค ๋ถ๋ฆฌํ๋ค
์ด ๋ฌธ์ ๋ ์ ๋ฒ์ ํ์์ ๋ ์คํจํ์๋ค. ๊ทธ๋์ ๋ค๋ฅธ ๋ถ๋ค์ด ํ์ด๋์ ์ฝ๋๋ฅผ ๋ณด๊ณ ํ์ตํ์๋๋ฐ ๊ธฐ์ต์ด ์ ๋์ง์์.. ์ด๋ฒ์๋ ํค๋ฉจ๋ค.. ๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ฝ์ง ์์์ ๋์ฑ ๋ ํค๋ฉจ๋ค..
๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์์ ์ต๋ 2๋ช ์ฉ์ธ ๊ฒ์ ๋นผ๋จน๊ณ ํผ์ ์์ฃผ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์์๋ค.. ์ญ์ ๋ฌธ์ ๋ฅผ ๊ผผ๊ผผํ ์ฝ์ด๋ณด๋ ์์ธ๊ฐ ์ค์ํ๋ค.. ์ฒ์ ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋ ๊ทธ๋ฅ ์ต๋ํ ๋ง์ด ํ์ฐ๋๊ฒ ์ค์ํ๋๊น ๋ชธ๋ฌด๊ฒ๊ฐ ์กฐ๊ธ ๋๊ฐ๋ ์ฌ๋์ ์ต๋ํ ํ์ฐ๊ณ ๋ชธ๋ฌด๊ฒ๊ฐ ๋ง์ด ๋๊ฐ๋ ์ฌ๋์ 1๋ช ์ฉ ํ์ฐ๋ฉด ๋์ง์๋? ๋ผ๋ ์๊ฐ์ ํ๋ค.
๋ด ๋ ผ๋ฆฌ๋ ์ด๋ฌ๋ค.
- sort๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ชธ๋ฌด๊ฒ๊ฐ ์์ ์์๋๋ก ์ ๋ ฌํ๊ณ ์์์๋ถํฐ ๋ํด
- limit๋ฅผ ๋์ด์๋ฉด ๊ทธ๋ count๋ฅผ ํ๋ ๋ฐฉ๋ฒ
๊ทผ๋ฐ ์ด ๋ฐฉ๋ฒ์ ์์ ํ ์๋ชป๋๋ค..
์ฌ์ค ์ต๋ํ limit์ ๊ทผ์ ํ๊ฒ ํ์์ผ ๊ฐ์ฅ ์ ์ ํ์๋ก ์ฌ๋๋ค์ ์ฎ๊ธธ ์ ์๋ค.
๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํด์ ๋ฌธ์ ๋ 2๋ช ๋ง ํ์ธ ์ ์๋ค๊ณ ์น์ ํ๊ฒ ์ค๋ช ํด์ค๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฅ ๋ชธ๋ฌด๊ฒ๊ฐ ์ ์์ฌ๋๊ณผ ๊ฐ์ฅ ๋ง์ด๋๊ฐ๋ ๋์ ํฉ์ณค์ ๋ limit์ ๊ฐ์ฅ ๊ทผ์ ํ ๊ฒ์ด๋ค!
30,40,60,70 ์ด๊ณ limit์ด 100์ด๋ผ๋ฉด
sort๋ฅผ ํ ๋ค ๋งจ ์ ์์์ ๋งจ ๋ค ์์๊ฐ limit ์ ๋์ด๊ฐ์ง ์๋๋ค๋ฉด pop, shift๋ก ๋ฐฐ์ด์ ๋ณ๊ฒฝํ๊ณ ๋ฐ๋ณต๋ฌธ์ ์ด๊ธฐํํ๋ฉด๋๋ค.
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค!
function solution(people, limit) {
let Arr = people.sort((a, b) => a - b);
let count = 0;
for (let i = 0; i < people.length; i++) {
if (Arr[0] + Arr[Arr.length - 1] <= limit) {
Arr.pop();
Arr.shift();
i = 0;
count = count + 1;
} else if (Arr[0] + Arr[Arr.length - 1] > limit) {
Arr.pop();
i = 0;
count = count + 1;
}
}
return count + Arr.length;
}
์์ชฝ์ ๋น๊ต ํ limit ์ด ๋์ผ๋ฉด shift๋ง ๋์ง์์ผ๋ฉด pop๊ณผ shift๋ฅผ ์ฌ์ฉํ๋ฉด๋๋ค!
์์ฌ์ด ์ ์ for๋ฌธ ๋ณด๋ค๋ while ๋ฌธ์ด ๋ ์ ํฉํ์ ๊ฑฐ ๊ฐ์ ์ฝ๋๋ฅผ ๋ค์ ๊ตฌ์ฑํด๋ณด์๋ค.
function solution(people, limit) {
let Arr = people.sort((a, b) => a - b);
let count = 0;
while(Arr.length<2){
if (Arr[0] + Arr[Arr.length - 1] <= limit) {
Arr.pop();
Arr.shift();
} else if (Arr[0] + Arr[Arr.length - 1] > limit) {
Arr.pop();
}
count = count + 1;
}
return count + Arr.length;
}
์ด๋ ๊ฒ while ๋ฌธ์ ์ฌ์ฉํ๋ฉด i๋ฅผ ์ด๊ธฐํํด์ฃผ์ง์์๋ ๋๋ค!!
๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ ๋ณดํต ์ด๋ฐ ๋ ผ๋ฆฌ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ด ๋ฌธ์ ๋ ์์ ํ์ ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฅ๋์ด ์์๋ค. ์์ ํ์์ด๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ง ๊ทธ๋๋ก ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ํ์๋ ์ด ๋ฌธ์ ์์ ๊ตฌํด์ผ ํ๋ ๊ฒ์ ์ ์ฒด ์นดํซ์ ๊ฐ๋ก๊ธธ์ด์ ์ธ๋ก๊ธธ์ด์์ ์๊ณ ๊ท์น์ด ์์ ๊ฑฐ๋ ์๊ฐ์ ํ๋ค. ๋ด๊ฐ ๋ฐ๊ฒฌํ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- x, y๋ฅผ ์ฌ์ฉํ ์ฐ๋ฆฝ๋ฐฉ์ ์์ผ๋ก ํ์์๊ฒ ๋ค.
- ์ฌ๊ธฐ์ x๋ yellow์ ๊ฐ๋ก๊ธธ์ด y๋ yellow์ ์ธ๋ก๊ธธ์ด์ด๋ค.
- x+y = (brown-4)/4
- xy = yellow
์ฆ, yellow์ ๊ฐ๋ก๊ธธ์ด์ ์ธ๋ก๊ธธ์ด๋ฅผ ์๊ฒ ๋๋ฉด ์ ์ฒด ์นดํซ์ ๊ฐ๋ก, ์ธ๋ก๊ธธ์ด๋
yellow๊ฐ๋ก +2 , yellow์ธ๋ก +2
๊ฐ ๋ ๊ฒ์ด๋ค!
๊ทธ๋ ๊ฒ ๋ด๊ฐ ์๊ฐํ ์ฝ๋๋
function solution(brown, yellow) {
const plus = (brown - 4) / 2;
let x = 0;
let y = 0;
for (let i = 1; i <= plus; i++) {
y = plus - i;
//y = plus-x
if (i * y === yellow) {
//xy= yellow
x = i;
break;
}
}
return [x + 2, y + 2].sort((a, b) => b - a);
}
์ ๋ฒ ์๊ฐ์ ํ์ตํด๋์๋ let์ ์ฌํ ๋น์ ๋ํ ๊ฐ๋ ์ ์ฌ์ฉํ๋ ํ์ด๊ฐ ์ด ์ ๋ณด๋ค ๋ ๊ฐ๊ฒฐํด์ง๊ฑฐ ๊ฐ๋ค.
const , let , var์ ๋ํ ์ค๋ช ์ (2)์ ์ ๋ฆฌํด๋์๋ค.
๋, ๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ Math.sqrt์ Math.pow๋ฅผ ์ฌ์ฉํ์ ๋ถ์ด ๋ง์ด ๊ณ์ ์ ์ด ๋ ๋ฉ์๋์ ๋ํ ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค.
์ ๋ฉ์๋๋ number ์ ๋ฃจํธ๋ฅผ ์์์ฃผ๋ ๋ฉ์๋์ด๋ค.
์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
console.log(Math.sqrt(36))
//return 6
์ ๋ฉ์๋๋ number์ ์ ๊ณฑ๊ทผ์ ์์ผ์ฃผ๋ ๋ฉ์๋์ด๋ค.
์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
console.log(Math.pow(2,3))
//return 8
์์ ๋์งํ ๋ฌธ์ ๋ ๊ทธ๋ฅ ์๋์ปต์์ D์กฐ์ ์๋ ํ์ ๋ช๋ฒ์งธ์ ๋ง๋ ์ ์๋!!
์ด ๋ง๊ณผ ๋์ผํ๋ค. ์ต๊ทผ ์๋์ปต์ ๋ณด๋ฉด์ ํผ์ ์๊ฐ์ ํด๋ณธ์ ์ด ์์ด์ ๋ก์ง์ ๋ ์ฝ๊ฒ ์งค ์ ์์๋ค.
์ ๋ฒ์ ํ์์ ๋๋ ์ฌ์ค ํด๊ฒฐํ์ง ๋ชปํด ์ง๋ฌธํ๊ธฐ์ ์๋ ๋ต์ ๊ธ์ด์๋ ๊ธฐ์ต์ด ๋๋ค.
์ด๋ฒ์๋ ์ข ๋ ์๊ฐ์ ํด๋ณด๋ ๋ค์๊ณผ ๊ฐ์ logic์ ์๊ฐํ ์ ์์๋ค.
1,2 3,4 5,6 7,8
์ ๋ชจ๋ ์กฐ๋ก ์๊ฐ์ ํ์ ๋ 1์กฐ 2์กฐ=> 1์กฐ๋ก, 3์กฐ4์กฐ๋=> 2์กฐ๋ก 5์กฐ6์กฐ => 3์กฐ, 7์กฐ8 => 4์กฐ๋ก
๊ฒฐ๊ตญ ์ด๊ฑด 2๋ก ๋๋ ๋ชซ์ ์ฌ๋ฆผ์ ํ ๊ฒฐ๊ณผ๊ฐ์ด ๊ฐ์์ผ ๊ฒฝ๊ธฐ๋ ๋ง๋๋ ๊ตฌ๋ ๋ผ๊ณ ์๊ฐ์ ํ๋ค.
let n = 8;
let a = 4;
let b = 7;
function solution(n, a, b) {
let count = 0;
while (true) {
a = Math.ceil(a / 2);
b = Math.ceil(b / 2);
count = count + 1;
if (a === b) {
return count;
}
}
}
๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ ์์ ๊ฐ์ ๋ก์ง์ผ๋ก ํด๊ฒฐ์ ํ๋ค!!๐ฅ๐ฅ๐ฅ
์ ๋ฌธ์ ๋ ๋ฐฐ์ด๋ก ์ซ์๊ฐ ์ฃผ์ด์ก์ ๋ ์ด ๋ค์ ์ต์ ๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
๊ฒฐ๊ตญ, ๊ฐ์ฅ ํฐ ์๋ฅผ ๋๋จธ์ง ๋ฐฐ์ด์์๋ก ๋๋์์ ๋ ๋ชจ๋ ๋๋จธ์ง๊ฐ 0์ผ ๋ ๊ทธ๋์ ๊ฐ์ฅ ํฐ ์์ ๋ฐฐ์๊ฐ ์ต์ ๊ณต๋ฐฐ์๊ฐ ๋๋ค.
logic์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฐฐ์ด์ ์ต๋๊ฐ์ ๊บผ๋ด์จ๋ค. (Math.max ํจ์๋ฅผ ์ด์ฉ)
- ์ต๋๊ฐ์ ์ ์ธํ ํ๋์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
- ๋ง๋ ๋ฐฐ์ด์ ์ํํ๋ฉฐ ์ต๋๊ฐ์ ๋๋๋ค.
- ๋๋จธ์ง๊ฐ 0์ด ์๋๊ฒ ์๋ค๋ฉดใ ์ต๋๊ฐ์ ์ต๋๊ฐ์ ๋ ํํ ์ฒ์๋ถํฐ ์ํํ๋ค.
- ๋ง์ฝ ๋ชจ๋ ๋๋จธ์ง๊ฐ 0์ด๋ผ๋ฉด ๊ทธ๋์ ์ต๋๊ฐ์ ๋ฆฌํดํ๋ค.
function solution(arr) {
const Max = Math.max(...arr);
let plusMax = Math.max(...arr);
//ํ ๋ฒ ๋ ๊ฐ์ ๊ฐ์ ๋ค๋ฅธ ๋ณ์์ ์ ์ฅํ ์ด์ ๋
//plusMax๋ ๊ณ์ ๋ณํด์ผํ์ง๋ง Max๊ฐ์ ๊ณ ์ ๋์ด์ผํ๊ธฐ๋๋ฌธ์ด๋ค.
let check = [];
const filterArr = arr.filter((item) => item !== Max);
// ์ต๋๊ฐ์ ์ ์ธํ ํ๋์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
while (true) {
check = filterArr.filter((item) => plusMax % item === 0);
//for๋ฌธ์ผ๋ก i๋ฅผ ๋ฆฌ์
ํ๋ ํ์์ผ๋กํ๋ฉด ๋ ํจ์จ์ ๋์ผ ์ ์์ ๊ฑฐ ๊ฐ๋ค.
if (check.length === filterArr.length) {
return plusMax;
}
plusMax = plusMax + Max;
}
}
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ดํด์์ด ์ฝ๋๋ฅผ ์ง์๋ค. ๊ทธ๋ ๊ฒ ํ์ด์๋ ๋ด ๋ชจ์ต์ด ๋๋์ด.. ์ฝ์ ์ผ๋ก ๋์์๋ค. DFS, BFS, ์์ ํ์, ํด์ํ์ด๋ธ ๋ฑ CS์ง์์ด ์ ํ ์๋ํฐ๋ผ ์ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ํ์ํ์ง๋ ์ ๋ชฐ๋๋ค. ์ง๊ธ์ ์๋ฃ๊ตฌ์กฐ๋ ๊ทธ์ ๋ก์ง์ ์ง๋๋ฐ ํ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ดํดํ๊ณ ์๋ค.
์ด๋ฒ ๋ธ๋ก๊ทธ๊ธ์์๋ ์ฌ๊ทํจ์์ DFS,BFS์ ๋ํด ์์ ๋ณผ ๊ฒ์ด๋ค. ๋๋ฌด๋๋ฌด ํ๋ค์๊ธฐ ๋๋ฌธ์ ํ์๋ ์ด๋ฅผ ์์ฑํ๋ฉด์ ์ดํดํ ๋ด์ฉ์ ๊ธฐ์ตํ๊ณ ๋์๊น์ง ํด๋ณด๊ณ ์ถ๋ค.
ํ์๋ BFS/ DFS ์ด์ ์ ์ฌ๊ทํจ์์ ๋ํด์๋ ๋ฌด์งํ์๋ค. ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํด ๋ฌธ์ ๋ฅผ ํ์ด๋ณธ ์ ์ด์์ด ์ฌ๊ท์ ์ฌ๊ณ ๋ฅ๋ ฅ์ด ์ ํ์์๋ค. ๋จผ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง๋ ๋ชฐ๋๋ ๊ฑฐ ๊ฐ๋ค.
CS๋ฅผ ํ์ตํ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋๋ฐฉ๋ฒ๋ ๊ณต๋ถํ ์ ์์๋ ๊ฑด ํฌ์ฌ์ผ๊น?..
๋จผ์ "์ด๋ฒคํธ ๋ฃจํ" ๋ฅผ ํ์ตํ๋ค.
๋จผ์ ์ด๋ฒคํธ ๋ฃจํ๋ Callback Event Queue์์ ํ๋์ฉ ๊บผ๋ด์ ๋์์ํค๋ loop์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ํ๋ฒ์ ํ๋์ฉ ์์ ์ ์งํํ๋ค. ํธ์ถ์คํ์ ํ๋๋ง ์ฌ์ฉํ๋ค.
์ ์ฒด์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ ํ๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค!!
์ฌ๊ธฐ์ Heap์ ๋ณ์์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ์ ์ฅ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
-
Call Stack์ ๋จผ์ ํจ์๊ฐ ์คํ๋๋ฉด ์ ๊ธฐ Stack์ ๋จผ์ ํจ์๋ค์ด ์ฐจ๊ณก์ฐจ๊ณก ์์ธ๋ค.
-
๊ทธ๋ฆฌ๊ณ ๋ ํ ๋๊ธฐ์ ํจ์๋ค์ ์คํ์ด ๋๋ค.
-
๋น๋๊ธฐ์ ํจ์๋ ๋๊ธฐ์ค์ ๊ฑฐ์ณ Queue๋ก ์์๋๋ก ๋ค์ด๊ฐ๊ณ
-
Call stack์ด ๋น์ด์์ผ๋ฉด Queue์์ ์ค๋น ๋ ํจ์๋ค์ด Call stack์ผ๋ก ๋ค์ด์จ๋ค.
-
์ด๋ Call Stack์ด ๋น์ด์์ด์ผ Queue์ ํจ์๊ฐ ๋ค์ด์ฌ ์ ์๋ค.
์ด ๊ณผ์ ์ ์ด๋ฒคํธ๋ฃจํ๊ฐ ์ ๋ดํด์ฃผ๋ ๊ฒ์ด๋ค.
ํ: ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๋ ๋ถ๋ถ ( ๋ณ์, ๊ฐ์ฒด๋ค์ด ์ ์ฅ๋๋ ์ผ์ข ์ ์ฐฝ๊ณ ) ํธ์ถ ์คํ : ์ฝ๋๊ฐ ํธ์ถ์คํ์ ์์ธ๋ค. ํ ์คํฌ ํ : ๊ทธ ๋ค์ ํ ์คํฌ ํ์ ๋๊ฒจ์ค๋ค. ํธ์ถ ์คํ์ด ์์ ๋ ํ ์คํฌ ํ์์ ์ฝ๋ฐฑํจ์๊ฐ ์ฝ ์คํ์ผ๋ก ๋์ด๊ฐ
์ด๋ ํธ์ถ์คํ์ด ๋น์ด์์ผ๋ฉด ๋จผ์ ๋ค์ด์จ ์์๋๋ก ์ฝ๋ฐฑ ํ์ ์๋ ์ฝ๋ฐฑ ํจ์๋ค์ ํธ์ถํ๋ค.
๋ง์ด ๋์์ ๋ฐ์ ์๋ฃ ์ด๋ฒคํธ๋ฃจํ ์๋ฐ์คํฌ๋ฆฝํธ๋์์๋ฆฌ ํผํฐ์ ์ด๋ฒคํธ๋ฃจํ
์ ๋ด์ฉ์ ์์์ผ ์ฌ๊ทํจ์์ ๋ํด ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค.
๋ด์ฉ์ ํ ๋๋ก ํฉํ ๋ฆฌ์ผ์ ๊ตฌํํ๋ ํจ์๋ฅผ ์ง๋ณด์๋ค!
function factorial(number){
if(number===1){
return 1
}
return number*factorial(number-1)
}
factorial(6)
์๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค
๊ทธ๋ ๋ค๋ฉด ์คํ์ ์ด๋ ๊ฒ ์์ผ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
call stack
2 x factorial(1) 3 x factorial(2) 4 x factorial(3) 5 x factorial(4) 6 x factorial(5)
ํ์ง๋ง ๋ค์ ์๊ฐํด๋ณด๋ stack์ ์์ด์ง ์๊ณ ๋ฐ๋ก๋ฐ๋ก ์คํ์ด ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ์ฆ, 6 x factorical(5) ์คํ => 6 x 5 x factorial(4) ์คํ => 6 x 5 x 4 x factorial(3)
์คํ์ ์์ด์ง ์๊ณ ํ ์ธต์์ ๊ณ์ ์ด๋ฌํ ํจ์๊ฐ ๋ฐ๋ณต ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ ์ ๋ฅผ ๋จน์๋ ๋ฌธ์ ์์๋ ์ด๋ป๊ฒ ์ ์ฉ์ด ๊ฐ๋ฅํ ๊น
๋ฌธ์ ๋ฅผ ์ฒ์ ์ ํ์ ๋ for๋ฌธ์ ๋ช๋ฒ์ ๋๋ ค์ผ ์ด ๋ฌธ์ ๋ฅผ ํ์ ์๋ ๊ณ ๋ฏผํ๋ค. ๊ทธ๋ ์ง๋ง ์ฌ๊ทํจ์๋ฅผ ๋ฐฐ์ด ํ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์งค ์ ์์๋ค.
const numbers = [1, 1, 1, 1, 1];
const target = 3;
function solution(numbers, target) {
let answer = 0;
function DFS(index, sum) {
if (index === numbers.length) {
if (sum === target) {
answer = answer + 1;
}
return;
}
DFS(index + 1, sum + numbers[index]);
DFS(index + 1, sum - numbers[index]);
}
DFS(0, 0);
return answer;
}
์ ์ฝ๋๋ฅผ ํ๋์ฉ ์์๋๋ก ์ ๋ฆฌํด๋ณด๊ฒ ๋ค..(์๋๋ฉด ์ด ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ์๊ธฐ ๋๋ฌธ์ด๋ค.)
๋จผ์ DFS๊ฐ ํจ์ ๋ด๋ถ์์ ๋ ๋ฒ ์คํ ๋์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋งค๋ฒ ๋ ๋ฒ ์คํ์ด ๋ ๊น? ์ ๋ต์ ๊ทธ๋ ์ง์๋ค!!
์ฌ๊ธฐ์ Call Stack์ ๊ฐ๋ ์ด ๋์จ๋ค.
solution(number,target)์ ํ๊ฒ ๋๋ฉด ๋ค์ ์์์ ๊ฐ์ด ์คํ๋๋ค.
DFS(index+1 , sum + numbers[index]) ---์คํ (์ ๊ณ์ ์คํ? index๊ฐ numberlength์ ๊ฐ์ง์์ผ๋๊น!) DFS(index+1, sum - numbers[index]) --- Call stack์ ์ ์ฅ (์์ง ์ฌ์ฉ๋์ง์์)
call Stack
DFS(index+1,sum-numbers[index])
์ ์ ๊ฐ์ด ๊ณ์ ๋ฐ๋ณต๋๋ค๋ฉด ์ด๋ ๊ฒ ์ ๋ฆฌ๋๋ค
DFS(0+1, 0 + numbers[0])--์คํ (index===1 , sum === 1 )
callStack
DFS(0+1, 0-1)
DFS(1+1, 1 + numbers[1])--์คํ (index===2 , sum === 2 )
callStack
DFS(1+1, 1-1) DFS(0+1, 0-1)
DFS(2+1, 2 + numbers[2])--์คํ (index===3 , sum === 3 )
callStack
DFS(2+1, 2-1) DFS(1+1, 1-1) DFS(0+1, 0-1)
DFS(3+1, 3 + numbers[3])--์คํ (index===4 , sum === 4 )
callStack
DFS(3+1, 3-1) DFS(2+1, 2-1) DFS(1+1, 1-1) DFS(0+1, 0-1)
DFS(4+1, 4 + numbers[4])--์คํ (index===5 , sum === 5 )
์ด๋, index๊ฐ 5๊ฐ ๋จ์ผ๋ก ๋ ๋ฒ์งธ DFS(index+1, sum - numbers[index]) ๊ฐ ์คํ๋จ!
๊ทธ๋ผ DFS(4+1, 5-1) ์คํ (index===5 , sum===4) ๊ทธ ํ
์ด๋ call stack์ ๋งจ ์ DFS(3+1, 3-1)์ด ์ฐจ๋ก๋ก ์คํ๋๋ค (index===4, sum===2)
๊ทธ๋ผ index๊ฐ 5๊ฐ ์๋์ผ๋ก ๋ค์ ์์ DFS(index+1,sum+numbers[index]) ๊ฐ ์คํ๋๋ค.
๊ทธ๋ ๊ฒ DFS(4+1, 2+1)
์ ๋ฐ๋ณต ์ฒ๋ผ call stack์ ์๋ - ์ฐ์ฐ์ ๊ธฐ์ ์ผ๋ก ๊ณ์ ํ์ํ๋ ๊ตฌ์กฐ์๋ค.
Call Stack์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ์ฌ ํด๋น ๋ฌธ์ ๋ฅผ ์ด๋ ค์ ํ์๋ค.
๊ฒฐ๊ตญ์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฐ ๊ฒฝ์ฐ๋ง๋ค ๋ชจ๋ ํ์์ ์์ผ์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ ์ธ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ ๋ ๊ฐ์ฅ ๋ง์ด ๋์์ ๋ฐ์ ๋ธ๋ก๊ทธ ์์ฑ์ ๋ถ์๊ฒ ๊ฐ์ฌํ๋ค! ๋ธ๋ก๊ทธ
์ด๋ ๊ฒ ๊ณ์ํด์ ํ๊ณ ๋ค๋ฉด์ ๊ทธ ๊ฐ์ง๋ฅผ ๋ค ์์๋ณด๋ ๊ฒ์ด DFS (๊น์ด์ฐ์ ํ์)
๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ง๋ฅผ ๋จผ์ ์์๋ณด๋ฉด์ ํ๊ณ ๋๋ ๊ฒ์ด BFS(๋๋น์ฐ์ ํ์) ์ด๋ค
์ ๋ ๊ฐ์ง๋ ๋ ํ์ต์ ํด๋ณด์์ผ๊ฒ ๋ค.. ์์ง ์ฌ๊ทํจ์์ ์ง๊ธ ๊น์ง ๋ฐฐ์ด ๊ฒ๋ค์ ์ ๋ฆฌํ๋ ์๊ฐ์ด ํ์ํด๋ณด์ธ๋ค!
์ ๋ฌธ์ ๋ ๋ด์ฉ์ ์ดํดํด์ผ ํ ์ ์๋ ๋ฌธ์ ์๋ค. ์ฒ์์๋ ๋ฌธ์ ๋ฅผ ์ดํดํ์ง ๋ชปํด ์๊ฐ์ ๊ฝค ๋ณด๋๋ค.
๋ฌธ์ ์์๋ String์ด ์ฃผ์ด์ง๊ณ ์ ์คํธ๋ง์ ๊ฐ index๋ฅผ ํ๋์ฉ ์ํํ๋ฉฐ ๋ง์ฝ ํด๋น index๊น์ง์ ๋์ ๋ string์ด ์ฌ์ ARR์ ์๋ค๋ฉด ํด๋น ๋์ string์ ์ฌ์ ์ ๋ฃ์ด์ค ํ ํด๋น index ์ด์ ์ target์ ์์ธ๋ฒํธ๋ฅผ answer์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ ๋ก์ง์ด์๋ค.
๋ฌธ์ ๋ฅผ ์ดํด๋ง ํ๋ฉด ๊ตฌํ์ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์๋ ๊ฑฐ ๊ฐ๋ค. ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
const msg = "KAKAO";
function solution(msg) {
const Alpabet = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
];
const index = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26,
];
//Alpabet arr๊ณผ ์์ธ๋ฒํธ index arr์ ์์ฑํ์๋ค.
const answer = [];
let target = "";
// target์ ์ฌ์ ์ธ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ธฐ ์ํด let์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ์๋ค.
for (let i = 0; i < msg.length; i++) {
target = target + msg[i];
//for๋ฌธ์ด ๋๋ฉด์ target์ด ์ฌ์ ์ธ๋๋ค
if (Alpabet.includes(target) === false) {
// ๋ง์ฝ target์ด alpabet ์ฌ์ ์ ์์ผ๋ฉด!!!
Alpabet.push(target);
//์ฌ์ ์ ์ถ๊ฐ
index.push(index.length + 1);
//index์ ์ถ๊ฐ (์์ธ๋ฒํธ)
answer.push(index[Alpabet.indexOf(target.slice(0, -1))]);
// ๋ํด์ง๊ธฐ ์ ์ ํ๊ฒ์ index๋ฅผ ์ถ๋ ฅ
target = msg[i];
//ํ๊ฒ์ ๊ทธ ์์ ๋ถํฐ ๋ค์ ์์๋๊ณ
//ํด๋น ํ๊ฒ์
}
}
if (Alpabet.includes(target)) {
answer.push(index[Alpabet.indexOf(target)]);
}
// ๋ง์ฝ ๋ฐ๋ณต๋ฌธ์ด ๋๋ฌ๋๋ฐ target์ด ๋จ์ ์๋ค๋ฉด ํด๋น ์์ธ ๋ฒํธ๊น์ง answer์ push
return answer;
}
solution(msg);
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฌ์ธ์ , slice ๋ฑ์ ๋ํด ๋ค์ ๊ณต๋ถํ ์ ์์๊ณ ๋, ๊ณต์ฑ ์ ๋ฌธ์ ๋ฅผ ์ฐ๊ณ ๋ ํ ์ฝ๋ฉ์ ์์ํ๋ ์ต๊ด์ ๊ธฐ๋ฅผ ์ ์์๋ค.
์ ๋ฌธ์ ์ญ์ ๋ฌธ์ ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ก์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒ์ ๋ฌผ๊ฑด์ ์ฐ ๋ ์ง๋ฅผ ํฌํจํ์ฌ 10์ผ๊ฐ ํ ์ผ ํํ์ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ 10์ผ์ ๋ฐ๋ณต๋ฌธ ๋๋ ธ์ ๋ ์ฌ์ผํ๋ ๋ฌผ๊ฑด๋ค์ด ๋ค ๋น ์ ธ์ผํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ด discount arr์์ - 10 ์ด ๋๋ for๋ฌธ์ด 1๊ฐ ํ์ํ๊ณ
- 10๋ฒ ๋ ์ ์๋ for๋ฌธ์ด ํ์ํ๋ค.(10์ผ๊ฐํํ์์ผ๋ก)
- ์ด์ค ํฌ๋ฌธ์ ํ์ฉํ์ฌ ์ฌ์ผํ๋ ์๋์ด ๋ด๊ธด numberArr ๊ณผ ์ํ๋ ๋ฌผํ์ด ๋ด๊ธด want Arr์ ์ํํ๋ฉฐ ์ํ๋ ๋ฌผํ์ด ์์ ๋ ๋ง๋ค number ์ ํด๋น index์ ๋ฐ์ดํฐ๋ฅผ -1
- number์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ 0์ธ ๋ฐฐ์ด์ ์๋ฅผ return ํ๋ฉด ๋๊ฒ ๋ค.
ํ์๊ฐ ์ง ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
let want =["banana", "apple", "rice", "pork", "pot"]
let number = [3, 2, 2, 2, 1];
let discount = ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"]
function solution(want, number, discount) {
let answer = [];
for (let i = 0; i <= discount.length - 10; i++) {
let checkArr = number.map((item) => item);
//์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด ์ฌ์ ์ธ๋์ด number๊ฐ ๊ธฐ์กด์ number๋ก ์์๋ณต๊ตฌ๋์ง์๋๋ค.
for (let j = i; j < i + 10; j++) {
const numberIndex = want.indexOf(discount[j]);
if (want.includes(discount[j]) && checkArr[numberIndex] !== 0) {
checkArr[numberIndex] = checkArr[numberIndex] - 1;
}
}
answer.push(checkArr.reduce((acc, cur) => acc + cur));
}
answer = answer.filter((item) => item === 0);
return answer.length < 1 ? 0 : answer.length;
}
solution(want, number, discount);
์ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฌํ ๋น์ ๋ํด ๋ค์ ์๊ฐํ๊ฒ ๋์๋ค ์ฒ์์
checkArr = number
//์ด๋ ๊ฒ ๋ฐ๋ก ์ฌ์ ์ธ์ ํด๋ฒ๋ฆฌ๋ number๋ ์๋ณธ์ผ๋ก ๋ณต๊ตฌ๋์ง์๊ณ ์์ ๋ ์์ ๋ถํฐ ๊ณ์ ์ํฅ์ ๋ฐ์๋ค.
๊ทธ๋ ๊ฒ ํ์ฌ for๋ฌธ์ด ์ํํ ๋ ๋ง๋ค map์ผ๋ก ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๋ฏ์ด ์ ์ฅํด ์ฃผ๋ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์๋ค.
-
ํด๋น ๋ฌธ์ ๋ k์ง์๋ก ๋ณํํ ํ M(๊ฒ์ ์ฐธ๊ฐํ๋ ์ธ์) , t(์์) ์์ผ๋ก mt๊น์ง string์ ์๋ผ์ฃผ์ด์ผํ๋ค. (์ด๋ ์์ ํ๊ฒ ์ํ๋ ๋งํผ๋ง ์๋ฅผ ์ ์๋ค , string ์ํ๋ก ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ์์ค๊ธฐ ๋๋ฌธ์ M*t์ ๊ฐ๊ฑฐ๋ ํฐ ์๊ฐ์ ์๋ผ์ฃผ์ด์ผํ๋ค.)
-
๊ทธ ํ ๋ง๋ค์ด์ง string์ ๋ค์ ํ๋ฒ slice ๋ฉ์๋๋ก ์๋ผ์ฃผ๊ณ ๋๋ฌธ์๋ก ๋ณํ, ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ค ํ
-
filter ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ index % M ===p(ํ๋ธ์์)-1 ๋ก ์๋ผ๋ธ๋ค์
-
join ๋ฉ์๋๋ก stingํ ์์ผฐ๋ค.
function solution(n, t, M, p) {
let target = "";
let keepGoing = true;
// booleanํจ์๋ฅผ ์ง์ด๋ฃ์ด while๋ฌธ์ ์ปจํธ๋กคํ๋ค.
while (keepGoing) {
for (let i = 0; i < 123123; i++) {
target = target + String(i.toString(n));
if (target.length >= M * t) {
keepGoing = false;
break;
}
}
}
target = target
.slice(0, M * t)
.toUpperCase()
.split(``)
.filter((item, index) => index % M === p - 1)
.join(``);
return target;
}