Coder Social home page Coder Social logo

coding_test's Introduction

CodingTest_Retry

์ฝ”๋”ฉํ…Œ์ŠคํŠธ Level 1 ๋ถ€ํ„ฐ ๋‹ค์‹œ์‹œ์ž‘

์ˆซ์ž์˜ํ‘œํ˜„ (level2)

์ž์—ฐ์ˆ˜๋ฅผ ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ ์กฐ๊ฑด์‹๊ณผ ๋ฐ˜๋ณต์‹์„ ์ด์šฉํ•˜์—ฌ ํ’€์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋” ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์–ด์„œ ๋ฉ”๋ชจํ•œ๋‹ค.

์—ฐ์†ํ•˜๋Š” ์ž์—ฐ์ˆ˜์˜ ํ•ฉ์˜ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฑด ์•ฝ์ˆ˜ ์ค‘ ํ™€์ˆ˜์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์™€ ๊ฐ™๋‹ค.

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);

๋‹ค์Œํฐ์ˆซ์ž(level2) , match

์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ matchํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

string.match(์ฐพ์„๋‹จ์–ด) ์ด๋ ‡๊ฒŒ ์“ฐ์ธ๋‹ค.

indexOf์™€ ๋‹ค๋ฅธ ์ ์€ ์ •๊ทœ์‹ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

const RR = "love you , love, everything, love"
console.log(RR.match(/love/gi))//์—†์œผ๋ฉด null๊ฐ’์ด๋‚˜์˜จ๋‹ค.
//return [love,love,love]

์ง์ง€์–ด์ œ๊ฑฐํ•˜๊ธฐ ( level2 ) ,Splice vs slice

์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ๋ฐ˜๋ณต๋ฌธ(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๋งŒ ๋Œ๋ฆฌ๋ฉด์„œ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๋ ค๋ฉด ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋” ์ข‹๋‹ค.

๋ฉ€๋ฆฌ๋›ฐ๊ธฐ (ํ”ผ๋ณด๋‚˜์น˜์ˆ˜์—ด)

image

ํ•ด๋‹น๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์ฒ˜์Œ์—” ํŒฉํ† ๋ฆฌ์–ผ์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ๋‹ค.

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 ๋ฉ”์†Œ๋“œ)

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

new Map() ํ™œ์šฉ๋ฒ• (๋ฐฐ์—ด์—์„œ ํŠน์ • ์›์†Œ ๋ช‡๊ฐœ์ธ์ง€ ์ฐพ๊ฑฐ๋‚˜ ์ด๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ)

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);

๋‚˜์˜ ๋ฌธ์ œ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•˜์ž. (split)
  2. ๋ณ€๊ฒฝ๋œ ๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์ž. (sort)
  3. 0์ธ๋ฑ์Šค๋Š” ์ตœ๋Œ“๊ฐ’ lastIndex๋Š” ์ตœ์†Ÿ๊ฐ’์ด ๋œ๋‹ค.
  4. 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์‚ฌ์ด์—์„œ๋„ ์‚ฌ์šฉ์ด๊ฐ€๋Šฅํ•˜๋‹ค!!

JadenCase ๋ฌธ์ž์—ด

๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค! ๋ฌธ์ œ ์‚ฌ์ง„

๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ–ˆ์ง€๋งŒ ์ด์ƒํ•˜๊ฒŒ ํ’€๋ฆฌ์ง€๊ฐ€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿผ ํ•„์ž์—๊ฒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋ง..

์ด ์ „์— ํ’€์—ˆ์„ ๋•Œ๋Š” ํ†ต๊ณผํ–ˆ์—ˆ์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ์ง€์ €๋ถ„ํ–ˆ๋‹ค.

๋‚˜์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. split ๋ฉ”์„œ๋“œ๋กœ ์ŠคํŠธ๋ง์„ ๋ฐฐ์—ดํ™” ์‹œํ‚จ๋‹ค
  1. ๋ฐ›์•„์˜จ ์š”์†Œ์—์„œ ๊ณต๋ฐฑ์ด ์•„๋‹Œ ์š”์†Œ๋Š” ๋‹ค์‹œ ํ•œ๋ฒˆ map์„ ์‚ฌ์šฉํ•œ๋‹ค.
  2. ๊ทธ ๋•Œ ๋ฐ›์•„์˜จ ์š”์†Œ์˜ ์ธ๋ฑ์Šค๊ฐ€ 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(` `);

์œ„ ์ฝ”๋“œ๋Š”

CharAt, substring

์œ„ ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. 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๊ฐ€์ง€์ด๋‹ค

  1. sort๋Š” ์›๋ณธ์„ ๋ณ€๊ฒฝ์‹œํ‚จ๋‹ค! ๊ทธ๋Ÿผ์œผ๋กœ ์ƒˆ๋กœ ๊ทธ ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š์•„์ค˜๋„ ๋œ๋‹ค.
  2. reduce

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์— ์ ‘๊ทผํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

์ด์ง„๋ณ€ํ™˜๋ฐ˜๋ณตํ•˜๊ธฐ!

๋‚˜์˜ ํ’€์ด๋Š”

  1. s==="1"์ด ๋  ๋•Œ ๊นŒ์ง€ s๋ฅผ ๊นŽ์•„ ๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค!
  2. "0"์„ filter๋กœ ์ œ๊ฑฐํ•  ๋•Œ๋งˆ๋‹ค zeroCount๋ฅผ 1์”ฉ ๋†’์ด์ž
  3. ๊ทธ ํ›„ s= 0์ด ์ œ๊ฑฐ ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ 2์ง„๋ฒ•์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฐ’์œผ๋กœ "์žฌํ• ๋‹น" ํ•ด์ค€๋‹ค
  4. ๊ทธ๋ฆฌ๊ณ  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์˜ ์žฌํ• ๋‹น์„

๋‹ค์‹œ ํ•™์Šตํ•ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

const, let, var

  1. ๋ณ€์ˆ˜์„ ์–ธ๋ฐฉ์‹

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 ๋ณ€์ˆ˜์— ์žฌํ• ๋‹นํ•ด์ค„ ์ˆ˜๋Š” ์žˆ๋‹ค.
  1. ํ˜ธ์ด์ŠคํŒ… ๋ฐฉ์‹

๋จผ์ € ํ˜ธ์ด์ŠคํŒ…์ด๋ž€ ํ•จ์ˆ˜๋‚ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ณ€์ˆ˜๊ฐ’๋“ค์€ ์œ ํšจ๋ฒ”์œ„์˜ ์ตœ์ƒ๋‹จ์— ์„ ์–ธํ•œ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ทธ๋ƒฅ ๋ณ€์ˆ˜,ํ•จ์ˆ˜๋“ค์€ ๋งจ์œ„๋กœ ์˜ฌ๋ผ์˜จ๋‹ค๋Š” ๋ง!

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์€ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์„ ๋งŒ๋‚˜์•ผ ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

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๋ฌธ์ด ๋ฐ˜๋ณต๋˜๋„๋ก ํ•˜์˜€๋‹ค.

๊ฐœ์„ ์ 

  1. ๋ฐฐ์—ด์„ ๊ตณ์ด ๋งŒ๋“คํ•„์š”๊ฐ€ ์žˆ์„๊นŒ?
  2. else if๋ฅผ ์•ˆ์จ๋„ ๋ ๊ฑฐ ๊ฐ™๋‹ค.
  3. 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 ... ์ด๋ ‡๊ฒŒ ๋์— ๋‘๊ฐœ์”ฉ ๋”ํ•œ๊ฒŒ ๋‹ค์Œ ์ˆ˜์—ด์˜ ์›์†Œ๊ฐ€ ๋œ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ฒ˜์Œ ํ’€์—ˆ์„ ๋•Œ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜์—ฌ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋กœ ๋‚จ์•„์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋‹ค์‹œ ํ’€์–ด๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๋˜์—ˆ๋‹ค !!!! ใ…Žใ…Ž

๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋…ผ๋ฆฌ๋Š” ์ด๋ ‡๋‹ค.

  1. ๋ฐฐ์—ด๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ ๊ธฐ๋ณธ ๋ฐฐ์—ด [0,1]์— lastIndex์˜ ์›์†Œ์™€ lastIndex-1์˜ ์›์†Œ๊ฐ€ ๋‹ค์Œ ๋ฐฐ์—ด ์›์†Œ๊ฐ€ ๋œ๋‹ค.
  2. ๊ทธ๋ ‡๋‹ค๋ฉด lastIndex๋ฅผ ์•Œ์•„๋‚ด๊ณ  ๊ฐ๊ฐ lastIndex์›์†Œ์™€ lastIndex-1์˜ ์›์†Œ๋ฅผ ๋”ํ•ด ๋ฐฐ์—ด์— pushํ•œ๋‹ค.
  3. ์ด๋ฅผ 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๋ฅผ ํ•˜๊ธฐ์ „์— ๊ฐ ์›์†Œ๋ฅผ ๋”ํ•ด์ฃผ๋Š” ๊ณผ์ •์—์„œ ๋จผ์ € % ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ’์ด ์ผ์ • ์ด์ƒ ์ปค์ง€์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

๋‹ค์Œํฐ์ˆซ์ž

๋ฌธ์ œ๋งŒ ์ดํ•ดํ•˜๋ฉด ์‰ฌ์šด๋ฌธ์ œ์ด๋‹ค!

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์ด์ „์— ํ’€์—ˆ์„ ๋•Œ๋„ ํ’€์—ˆ์—ˆ๊ณ  ์ง€๊ธˆ์˜ ์ฝ”๋“œ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์•˜๋‹ค.

๋…ผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. n์„ toString() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด์ง„๋ฒ•์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ํ›„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜, ๊ทธ๋•Œ "1"๋งŒ filterํ•˜์—ฌ ๊ทธ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  2. ๊ทธ๋ฆฌ๊ณ  for๋ฌธ์„ ๋งŒ๋“ค์–ด n+1์„ ์‹œ์ž‘์œผ๋กœ 1,000,000 ๊นŒ์ง€ ์ˆœํ™˜ํ•˜๋„๋ก ๋งŒ๋“  ํ›„
  3. ํ•ด๋‹น 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];
}

ํ•จ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์ง€ ์•Š์•˜์„ ๋ฟ ๊ณผ์ •์€ ๋น„์Šทํ•˜๋‹ค.

๋…ผ๋ฆฌ๋Š” ์ด๋ ‡๋‹ค.

  1. ์ด์ „์— ๋“ฑ์žฅํ–ˆ๋˜ ๋‹จ์–ด๋ฅผ ์ฐพ๋Š” ์กฐ๊ฑด๋ฌธ์ด ํ•„์š”
  • ๋ฐฐ์—ด์„ includes ํ•จ์ˆ˜๋กœ ํ™•์ธํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.
  1. ์ด์–ด์ง€์ง€์•Š๋Š” ๋‹จ์–ด ์ฐพ๋Š” ์กฐ๊ฑด๋ฌธ์ดํ•„์š”
  • stack ์ฒ˜๋Ÿผ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ stack arr์— ๋„ฃ์–ด stack arr์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๊ฐ’๊ณผ for๋ฌธ i ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด๋˜๊ฒ ๋‹ค.
  1. ํ•œ ๊ธ€์ž์ธ์ง€๋ฅผ ์ฐพ๋Š” ์กฐ๊ฑด๋ฌธ์ด ํ•„์š”
  • for๋ฌธ ์†์—์„œ length๋ฅผ ๊ฑฐ๋ฅด๋Š” ์กฐ๊ฑด๋ฌธ์ด ํ•„์š”

๊ทธ๋ฆฌ๊ณ  Math.ceil,charAt ๋“ฑ์œผ๋กœ ๋””ํ…Œ์ผํ•œ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

๋‹ค๋ฅธ ๋ถ„๋“ค์ด ํ‘ผ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ slice๋กœ ํ‘ผ ํ’€์ด๊ฐ€ ๋งŽ์ด ๋ณด์˜€๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ slice์™€ splice๋ฅผ ๋น„๊ตํ•˜์—ฌ ํ•™์Šตํ•ด๋ณด์•˜๋‹ค.

splice vs slice

  • 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๋ช…์”ฉ ํƒœ์šฐ๋ฉด ๋˜์ง€์•Š๋‚˜? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

๋‚ด ๋…ผ๋ฆฌ๋Š” ์ด๋žฌ๋‹ค.

  1. sort๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ณ  ์•ž์—์„œ๋ถ€ํ„ฐ ๋”ํ•ด
  2. 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๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์ง€์•Š์•„๋„ ๋œ๋‹ค!!

๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋„ ๋ณดํ†ต ์ด๋Ÿฐ ๋…ผ๋ฆฌ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

์นดํŽซ

์ด ๋ฌธ์ œ๋Š” ์™„์ „ํƒ์ƒ‰ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ์—ˆ๋‹ค. ์™„์ „ ํƒ์ƒ‰์ด๋ž€ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ง ๊ทธ๋Œ€๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ํ•„์ž๋Š” ์ด ๋ฌธ์ œ์—์„œ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์ „์ฒด ์นดํŽซ์˜ ๊ฐ€๋กœ๊ธธ์ด์™€ ์„ธ๋กœ๊ธธ์ด์ž„์„ ์•Œ๊ณ  ๊ทœ์น™์ด ์žˆ์„ ๊ฑฐ๋ž€ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. x, y๋ฅผ ์‚ฌ์šฉํ•œ ์—ฐ๋ฆฝ๋ฐฉ์ •์‹์œผ๋กœ ํ’€์ˆ˜์žˆ๊ฒ ๋‹ค.
  1. ์—ฌ๊ธฐ์„œ x๋Š” yellow์˜ ๊ฐ€๋กœ๊ธธ์ด y๋Š” yellow์˜ ์„ธ๋กœ๊ธธ์ด์ด๋‹ค.
  2. x+y = (brown-4)/4
  3. 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๋ฅผ ์‚ฌ์šฉํ•˜์‹  ๋ถ„์ด ๋งŽ์ด ๊ณ„์…”์„œ ์ด ๋‘ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

Math.sqrt

์œ„ ๋ฉ”์„œ๋“œ๋Š” number ์— ๋ฃจํŠธ๋ฅผ ์”Œ์›Œ์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

console.log(Math.sqrt(36))
//return 6

Math.pow

์œ„ ๋ฉ”์„œ๋“œ๋Š” 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;
    }
  }
}

๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋„ ์œ„์™€ ๊ฐ™์€ ๋กœ์ง์œผ๋กœ ํ•ด๊ฒฐ์„ ํ–ˆ๋‹ค!!๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

N๊ฐœ์˜์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

์œ„ ๋ฌธ์ œ๋Š” ๋ฐฐ์—ด๋กœ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ด ๋“ค์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

๊ฒฐ๊ตญ, ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋‚˜๋จธ์ง€ ๋ฐฐ์—ด์›์†Œ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๋ชจ๋‘ ๋‚˜๋จธ์ง€๊ฐ€ 0์ผ ๋•Œ ๊ทธ๋•Œ์˜ ๊ฐ€์žฅ ํฐ ์ˆ˜์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ๋œ๋‹ค.

logic์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ฐฐ์—ด์˜ ์ตœ๋Œ€๊ฐ’์„ ๊บผ๋‚ด์˜จ๋‹ค. (Math.max ํ•จ์ˆ˜๋ฅผ ์ด์šฉ)
  1. ์ตœ๋Œ€๊ฐ’์„ ์ œ์™ธํ•œ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
  2. ๋งŒ๋“  ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ์ตœ๋Œ€๊ฐ’์„ ๋‚˜๋ˆˆ๋‹ค.
  3. ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ์•„๋‹Œ๊ฒŒ ์žˆ๋‹ค๋ฉดใ… ์ตœ๋Œ€๊ฐ’์— ์ตœ๋Œ€๊ฐ’์„ ๋” ํ•œํ›„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ˆœํšŒํ•œ๋‹ค.
  4. ๋งŒ์•ฝ ๋ชจ๋‘ ๋‚˜๋จธ์ง€๊ฐ€ 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์€ ๋ณ€์ˆ˜์™€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

  1. Call Stack์€ ๋จผ์ € ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ €๊ธฐ Stack์— ๋จผ์ € ํ•จ์ˆ˜๋“ค์ด ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์ธ๋‹ค.

  2. ๊ทธ๋ฆฌ๊ณ  ๋‚œ ํ›„ ๋™๊ธฐ์  ํ•จ์ˆ˜๋“ค์€ ์‹คํ–‰์ด ๋œ๋‹ค.

  3. ๋น„๋™๊ธฐ์  ํ•จ์ˆ˜๋Š” ๋Œ€๊ธฐ์‹ค์„ ๊ฑฐ์ณ Queue๋กœ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด๊ฐ€๊ณ 

  4. Call stack์ด ๋น„์–ด์žˆ์œผ๋ฉด Queue์—์„œ ์ค€๋น„ ๋œ ํ•จ์ˆ˜๋“ค์ด Call stack์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค.

  5. ์ด๋•Œ 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์ง„์ˆ˜๊ฒŒ์ž„

  1. ํ•ด๋‹น ๋ฌธ์ œ๋Š” k์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ M(๊ฒŒ์ž„ ์ฐธ๊ฐ€ํ•˜๋Š” ์ธ์›) , t(์ˆœ์„œ) ์ž„์œผ๋กœ mt๊นŒ์ง€ string์„ ์ž˜๋ผ์ฃผ์–ด์•ผํ•œ๋‹ค. (์ด๋–„ ์™„์ „ํ•˜๊ฒŒ ์›ํ•˜๋Š” ๋งŒํผ๋งŒ ์ž๋ฅผ ์ˆœ ์—†๋‹ค , string ์ƒํƒœ๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— M*t์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฐ ์ˆœ๊ฐ„์— ์ž˜๋ผ์ฃผ์–ด์•ผํ•œ๋‹ค.)

  2. ๊ทธ ํ›„ ๋งŒ๋“ค์–ด์ง„ string์„ ๋‹ค์‹œ ํ•œ๋ฒˆ slice ๋ฉ”์„œ๋“œ๋กœ ์ž˜๋ผ์ฃผ๊ณ  ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜, ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ค€ ํ›„

  3. filter ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ index % M ===p(ํŠœ๋ธŒ์ˆœ์„œ)-1 ๋กœ ์ž˜๋ผ๋‚ธ๋‹ค์Œ

  4. 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;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.