분류 전체보기

    [알고리즘]프로그래머스 - N으로 표현 <동적계획법(DP)>

    프로그래머스 - N으로 표현 문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다. 최솟값이 8보다 크면 -1을 return 합니다. 입출력 예 N n..

    [TypeScript] 타입스크립트란?

    자바스크립트 종류 1. 표준 자바스크립트인 ES5 2. ESNext, 3. ESNext에 타입 기능을 추가한 타입스크립트 타입스크립트로 개발했더라도 타입 기능을 사용하지 않는다면 ESNext 소스나 마찬가지임 javascript의 문제점 JavaScript의 동일 연산자는 (==) 인수를 강제로 변환하여(coerces), 예기치 않은 동작을 유발 if ("" == 0) { // 참입니다! 근데 왜?? } if (1 < x < 3) { // *어떤* x 값이던 참입니다! } JavaScript는 또한 존재하지 않는 프로퍼티의 접근을 허용 const obj = { width: 10, height: 15 }; const area = obj.width * obj.heigth; // area값은 NaN으로 뜸 -..

    [알고리즘] 백준 13904 과제 node.js (Greedy)

    그리디 관련 문제를 풀다가 이상한 점을 발견했다. 오름차순 내림차순에 따라 정답이 맞고 틀렸기 때문이다. https://www.acmicpc.net/problem/13904 13904번: 과제 예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다. www.acmicpc.net 풀이 방법 주어진 과제들을 순서대로 정렬한 뒤, 각 마감일까지의 날짜 중에서 가장 높은 점수를 얻을 수 있는 과제를 선택하는 방식으로 탐욕적으로 접근하였다. ❌틀린 코드 let input = require("fs").readFileSync("예제.txt").toString().split("\n"); const N = parseInt(in..

    [알고리즘] 탐욕법(Greedy)

    탐욕법 (Greedy) 그리디 알고리즘 (탐욕법, Greedy Algorithm) 이란? 탐욕 알고리즘은 말 그대로 선택의 순간마다 당장 눈 앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법이다. '각 단계에서 최적이라고 생각되는 것을 선택'해 나가는 방식으로 진행하여 최종적인 해답에 도달하는 알고리즘 - 이 때, 항상 최적의 값을 보장하는 것이 아니라 최적의 값의 '근사한 값'을 목표로 한다. 탐욕 알고리즘을 적용할 수 있는 문제들은 지역적으로 최적이면서 전역적으로 최적인 문제들이다. 그리디 알고리즘 활용 기법 1. 탐욕 선택 속상 (greedy choice property) 각 단계에서 '최선의 선택'을 했을 때 전체 문제에 대한 최적해를 구할 수 있는 경우를 말한다. 즉, 각 단계에서..

    [알고리즘] 완전탐색 예제 # 1 단순 브루트포스

    프로그래머스 Level 1 최소직사각형 https://school.programmers.co.kr/learn/courses/30/lessons/86491?language=javascript 더보기 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. 명함 번호 가로 길이 세로 길이 1 60 50 2 30 70 3 60 30 4 80 40 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로)..

    [알고리즘] 완전 탐색

    완전 탐색 (Brute Force) 1. 완전 탐색이란? 가능한 모든 경우의 수를 일일이 나열하면서 답을 찾는 방법을 의미한다. '무식하게 푼다'라는 의미인 Brute-Force (브루트 포스)라고도 부른다. 알고리즘을 모르는 사람이 프로그래밍 문제를 푼다면, 당연히 가능한 모든 경우들을 다 구해서 그중에 만족하는 답을 찾아낼 것이고 이 과정 자체가 완전 탐색이다. 대신에 이 방식은 절대 답을 못 구하는 경우는 없으므로 나름 강력한 방법이다. 하지만, 알고리즘을 사용할 때는, 기본적으로 2가지 규칙을 적용한다. 1. 사용된 알고리즘이 적절한가? ( 문제를 해결할 수 있는가 ) -> 만족 2. 효율적으로 동작하는가? -> 제한이 따르는 경우가 있음 (시간복잡도 측면) 2. 완전 탐색 기법 활용 방법 1. ..

    [Javascript] for, foreach

    알고리즘 문제를 풀던 중 다른 분 코드에서 foreach의 사용을 보게 되었다. foreach의 존재는 알지만 for문이 익숙하다보니 foreach는 사용하지 않게 되었는데 이번 기회에 차이를 다시 한번 정리하며 어떤 문법을 사용하는것이 편한지 공부 하고자 한다. for문 const wires = [[1,2],[2,3],[3,4]] for (let i = 0; i < wires.length; i++) { let wire = wires[i]; let node1 = wire[0]; let node2 = wire[1]; tree[node1].push(node2); tree[node2].push(node1); } for (let i = 0; i < wires.length; i++) { let wire = wir..

    [알고리즘] Hash

    Key-value쌍으로 데이터를 빠르게 찾아보세요. 👩🏼‍💻 해시 키와 값이 한 쌍으로 구성된 데이터 👩🏼‍💻 해시 테이블 key, value가 쌍을 이룬 형태로 데이터가 저장 되어있는 자료구조 데이터 검색과 저장이 아주 빠르게 진행됨 검색과 저장의 평균적인 시간복잡도가 O(1+α(적재율))에 수렴 👩🏼‍💻 해시 테이블의 원리 파이썬의 딕셔너리와 동일 [JS에서 해시 쓰는 방법] 사실 js에서 일반 배열에서 Key값에 문자열이 주는게 가능함 왜? js배열은 우리가 알고있는 배열과 조금 다른 희소배열이기 때문 희소배열 : 여러개의 자료형을 허락하는 배열 🚨 Map key가 있는 데이터를 저장하는데 쓰이는 자료구조 key값은 문자열 또한 가능 new Map() -> Map 객체를 만들때 쓰인다. map.se..

    [Error] addCase cannot be called with two reducers for the same action type

    [Error] addCase cannot be called with two reducers for the same action type 특정 페이지에 리덕스 툴킷을 만지다 이러한 에러가 떴다 [에러가 난 코드] const initialState: RandomState = { randomInput: { loading: false, data: { cuid: "", result: "", type: "", }, error: null, }, randomRecInput: { loading: false, data: { cuid: "", result: "", type: "", }, error: null, }, }; const randomSlice = createSlice({ name: RANDOM, initialSta..

    [React] Debounce_lodash 활용

    Debounce란? Debounce는 함수를 여러번호출하고 마지막 호출에서 일정 시간이 지난 후 해당 함수의 기능이 동작하는 기법 Debounce는 호출 시 지정된 시간 이후 호출된 가장 마지막 이벤트만 실행되는 기술 Debounce 함수는 lodash의 debounce 함수를 사용할 수 있음 예를 들어 검색창에 "google"을 검색하는 경우 6번의 api 요청을 한다 → 비효율 Debounce를 사용하는 경우 함수는 6번 호출되지만 일정 시간이 지난 후 마지막 호출에서 api 요청을 함 api 호출 횟수가 5번에서 1번으로 감소 → 효율 scroll, resize, input, mousemove 와 같은 이벤트는 짧은 시간 간격으로 연속해서 발생 이러한 이벤트에 바인딩한 이벤트 핸들러는 과도하게 호출..

    [React] redux

    리덕스(redux) - 리액트 생태계에서 가장 사용률이 높은 상태관리 라이브러리 redux를 사용하기 적절한 때 계속해서 바뀌는 상당한 양의 데이터가 있음 상태를 위한 단 하나의 근원이 필요함 최상위 컴포넌트가 모든 상태를 가지고 있는 것은 적절하지 않음 redux 기본 개념 1. Single source of truth 동일한 데이터는 항상 같은 곳에서 가지고 온다. 즉, 스토어라는 하나뿐인 데이터 공간이 있다는 의미이다. 2. State is read-only 리액트에서는 setState 메소드를 활용해야만 상태 변경이 가능하다. 리덕스에서도 액션이라는 객체를 통해서만 상태를 변경할 수 있다. 3. Changes are made with pure functions 변경은 순수함수로만 가능하다. 리듀서..

    [React] 리덕스

    이론상으로 리덕스를 한번 훑어봤지만 많이 사용되는 라이브러리치고는 사용 이유를 모르겠어서 다시 한번 정리하고자 함 Redux(리덕스)란 Javascript(자바스크립트) 상태 관리 라이브러리이다. 상태 관리 도구가 왜 필요한가? 상태 : React에서 State는 component 안에서 관리되는 것이다. 리액트는 여러 컴포넌트로 구성되어 있다. 각각의 컴포넌트마다 state가 있을 수 있고, useState와 같은 hook으로 상태를 관리할 수도 있다. state가 변경되면 컴포넌트가 리렌더링되어 변하게 된다. 리액트는 단방향 데이터 흐름( 부모 -> 자식) 으로만 데이터가 전달이 가능하기 때문에 자식 컴포넌트도 state에 맞게 변경하려고 한다면 props로 전달해야 한다. 만약 자식 컴포넌트에서도 ..