# 자바스크립트 기본

# 배열 삭제

var num = [100, 200, 300, 400, 500];
// 400, 500 삭제하기
const newNum = num.filter(el => el !== 500 && el !== 400);

# splice 사용법

var arr = [200, 100, 300];
// [200, 100, 10000, 300] 만들기

const target = arr.indexOf(300);
arr.splice(target, 0, 10000);
  • splice는 1번 파람에 데이터를 추가, 삭제, 수정할 타겟 인덱스
  • 2번 파람에 삭제한다면 지울 갯수
  • 3번 파람에 추가 or 수정 할 값을 넣는다.

# falsy 값 종류

  • falsy: 0, '', NaN, false, null, undefined

# 변수명 짓기 규칙

  • 특수기호 : _, $ 만 사용가능
  • 문자열 - 예약어는 불가능 (var, let, const, function, for 등등)
  • 숫자: 첫번째 숫자만 불가능

# 객체 접근 방법 차이 (점접근, 곽괄호)

var d = {
  test: 120,
  test: 1000
};

// 점 접근
d.test; // 1000

// 곽괄호 접근
d["test"]; // 1000
  • 곽괄호는 string값을 넣어줘야한다.
  • 객체의 키이름이 중복될경우 밑에 정의한 키, 값으로 할당된다.

# concat 사용법

  • conscat은 배열과 문자열에 사용 가능하다.
var test = "안";
var test2 = "하";
console.log(test.concat("녕", test2, "세요")); // 안녕하세요

# class 사용법

다음 소스코드에서 클래스를 작성하여 게임 캐릭터의 능력치와 '파이어볼'이 출력되게 만드시오. 주어진 소스 코드를 수정해선 안됩니다.

// 데이터
// <여기에 class를 작성하세요.>

const x = new Wizard(545, 210, 10);
console.log(x.health, x.mana, x.armor);
x.attack();

// 출력
// 545 210 10
// 파이어볼
// 클래스 만들기
class Wizard {
  // 객체에서 인스턴스가 생성될때 반드시 생성되어 변수 초기화함
  constructor(health, mana, armor) {
    // wizard의 health는 this을 가진 변수
    this.health = health;
    this.mana = mana;
    this.armor = armor;
  }
  attack = function() {
    console.log("파이어볼");
  };
}

const x = new Wizard(545, 210, 10);
console.log(x.health, x.mana, x.armor);
x.attack();
  • class는 constructor를 가진다 (react class component 와 유사)
  • constructor의 내부에 init value를 세팅한다
  • class의 내부의 변수는 this로 접근 가능하다.
  • react의 class component와 비슷하게 메소드는 constructor의 바깥에 정의한다.
  • 만든 클래스 사용은 new className으로 사용한다

# set 사용법

  • set: 중복되지 않는 데이터를 저장하는 데이터 구조
  • set 객체안의 데이터는 중복을 허용하지 않는다. (객체, 배열은 주소값)
const list = [1, 2, 2, 3, 4, 5, 6, 6, 6, 6];

// Set 생성
let setVal = new Set(list);

setVal.add({ id: 1 });

setVal.delete(7);

console.log(setVal.has(8));


// set 자료형 응용
unction test47(members) {
  return new Set(Object.keys(members)).size;
}

console.log(
  test47({
    이호준: "01050442903",
    이호상: "01051442904",
    이준호: "01050342904",
    이호준: "01050442903",
    이준: "01050412904",
    이호: "01050443904",
    이호준: "01050442903"
  })
);

# 시간복잡도

  • 문제 해결 시간이 일정할 때 o(1) - array의 개수가 커져도 메소드의 작동시간이 일정하면 o(1)
  • arr[i] -> arr의 개수가 아무리 커도 index에 접근방법은 1개이므로 o(1)
  • arr.push(5) -> 배열의 가장 끝에 푸시의 매개변수를 넣는 것이므로, 그던, 작던 끝에만 추가하는 행동만 함으로 o(1)
  • arr.slice() -> slice의 매개변수만큼 잘라서 새로운 배열을 만드는 메소드 -> 시간복잡도는 가장 최악을 대상으로 함으로 o(n)
  • arr.pop() -> 배열의 가장 끝 원소를 제거 o(1)
  • arr.includes(5) -> 배열의 매개변수 값을 찾아서 true,false -> 배열의 원소만큼 찾아서 매개변수를 비교함으로 o(n)

# Factory 함수

  • 함수가 함수를 리턴하는 함수를 Factory 함수라 부른다
function one(n) {
  function two(x) {
    console.log(x);
    return Math.pow(x, n);
  }
  return two;
}

const a = function(x) {
  return Math.pow(x, 2);
};
const b = one(3);
const c = one(4);

console.log(a(10));

# 중복되는 요소 카운팅 후 가장 많은 요소 찾기

function test(str) {
  let newStr = str.split(" ");
  let result = {};
  for (let i = 0; i < newStr.length; i++) {
    let val = newStr[i];
    result[val] = result[val] === undefined ? 1 : result[val] + 1;
  }
  const key = Object.keys(result).reduce(function(a, b) {
    return result[a] > result[b] ? a : b;
  });

  return `${key} ${result[key]}`;
}

console.log(test("원범 원범 혜원 혜원 혜원 혜원 유진 유진 유진 유진 유진"));

# 배열 줄세우기

  • 줄 세우는 알고리즘은 먼저 소팅을 한다.
function test(member) {
  let memberList = member.split(" ");
  let count = 3;

  memberList = memberList.sort((a, b) => b - a);
  for (let i = 0; i < memberList.length; i++) {
    if (memberList[i] !== memberList[i + 1]) {
      count--;
    }
    if (!count) return i + 1;
  }
}

console.log(test("97 86 75 66 55 97 85 97 97 95"));

# 문자 찾아서 바꾸기

function test39(str) {
  // split, join으로 바꾸기
  return str.split("q").join("e");
  // 정규식으로 바꾸기
  return str.replace(/q/gi, "e");
}

console.log(test39("hqllo my namq is hyqwon"));

# 소수 판별

  • 본인과 1을 제외한 숫자로 나누어떨어지지 않는 것
function test41(n) {
  for (let i = 2; i < n; i++) {
    if (n % i === 0) {
      return false;
    }
    if (n === 1) {
      return false;
    }
    return true;
  }
}

# #년#월#일 요일 찾기

  • Date 생성자 활용
function test42(a, b, c) {
  const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];

  const x = new Date(`${a}-${b}-${c}`);

  return day[x.getDay()];
}

# 10진수를 2진수로

function test43(num) {
  let answer = [];
  while (num) {
    const count = num % 2;
    answer.push(count);
    num = Math.floor(num / 2);
  }
  return answer.reverse().join("");

  // 또는
  return num.toString(10);
}

# 배열내 요소 더하기, 비교

  • 배열내 더하기, 비교하는 것은 reduce로 해결
function test46() {
  let nums = "";
  for (let i = 1; i < 21; i++) {
    nums += i;
  }
  return nums.split("").reduce((prev, next) => prev + Number(next), 0);
}

console.log(test46());

// 최댓값 반환
function test49(str) {
  return str
    .split(" ")
    .reduce(
      (prev, next) => (prev <= next ? (prev = Number(next)) : (prev = prev)),
      0
    );
}

console.log(test49("10 9 8 7 6 5 4 3 2 1"));

# 버블정렬

function test50() {
  let arr = [10, 8, 9, 2, 3, 5];
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        const temp = arr[j]; // 두 수를 서로 바꿔준다
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

console.log(test50());

# comma

const nums = 1000000000;
console.log(nums.toLocaleString()); // "1,000,000,000"

# 연속된 문자 숫자로 표현하기

// aaaabbcccddd -> a4b2c3d3

function continusNum() {
  const problem = "aaaabbcccddd";
  let count = 1;
  let answer = "";
  let store = problem[0];
  for (let i of problem) {
    if (i === store) {
      count++;
    } else {
      answer += store;
      answer += count;
      count = 1;
      store = i;
    }
  }
  answer += store;
  answer += count;

  return answer;
}

# 가장 적게 옮기는 횟수 출력

let n = 24;
let result = 0; -> 가장 적게올리는 횟수 (어떻게든 안되면 -1)
while(true){
	if (n%7 === 0) {
		result += parseInt(n/7, 10);
		console.log(result);
		break;
	}
	n -= 3
	result += 1;
	if (n < 0){
		console.log(-1);
		break;
	}
}

# map응용

a = [1, 2, 3, 4];
b = ["a", "b", "c", "d"];
// 위문자를 응용해 [[1,a],[b,2],[3,c],[d,4]] 출력하라

const c = a.map((el, index) => {
  if (index % 2 === 0) {
    return [el, b[index]];
  } else {
    return [b[index], el];
  }
});
노경환
이 글이 도움이 되셨다면! 깃헙 스타 부탁드립니다 😊😄

# 지정된 문자열의 모든 경우의 수

// 'ABCDEF'가 있으면 가능한 모든 문자 조합 구하기, 두번째문자열과 중복 가장 많이된 length 찾기
function sol(string) {
  let result = [];
  for (let i = 1; i < string.length + 1; i++) {
    for (let j = 0; j < i; j++) {
      result.push(string.slice(j, j + string.length + 1 - i));
    }
  }
  return result;
}
let inputOne = "ABCDEF";
let inputTwo = "BCDFH";

const ArrayOne = sol(inputOne);
// [ 'ABCDEF', 'ABCDE', 'BCDEF', 'ABCD', 'BCDE', 'CDEF', 'ABC'..'F']
const ArrayTwo = sol(inputTwo);

const c = ArrayOne.filter(x => ArrayTwo.includes(x)).map(el => el.length); // [3,2,1,1,1..]
console.log(Math.max(...c)); // 3
최근변경일: 3/25/2024, 12:16:11 PM