분류 전체보기
[JavaScript] 깊은 복사, 얕은 복사
[JavaScript] 깊은 복사, 얕은 복사
2021.07.12깊은 복사, 얕은 복사 결론부터 말하자면 얕은 복사는 객체의 참조값(주소 값)을 복사하고, 깊은 복사는 객체의 실제 값을 복사합니다. 먼저, 자바스크립트에서 값은 원시값과 참조값 두 가지 데이터 타입의 값이 존재합니다. 원시값은 기본 자료형(단순한 데이터)을 의미합니다. Number, String, Boolean, Null, Undefined 등이 해당합니다. 변수에 원시값을 저장하면 변수의 메모리 공간에 실제 데이터 값이 저장됩니다. 할당된 변수를 조작하려고 하면 저장된 실제 값이 조작됩니다. 참조값은 여러 자료형으로 구성되는 메모리에 저장된 객체입니다. Object, Symbol 등이 해당합니다. 변수에 객체를 저장하면 독립적인 메모리 공간에 값을 저장하고, 변수에 저장된 메모리 공간의 참조(위치 값..
[JavaScript] for of / in
[JavaScript] for of / in
2021.07.07for...of, for...in 둘 의 차이점은 배열 내부를 탐색하느냐, 객체 내부를 탐색하느냐에 대한 차이라고 할 수 있습니다. for of - 배열 내부에 접근합니다. - 이터러블한 객체에 모두 사용 가능합니다. - 헷갈리기 쉬운 문법입니다. 헷갈린다면 자바 처럼 일반 for문을 사용하는 것도 괜찮습니다. const numbers = [10, 20, 30, 40, 50]; for (let number of numbers) { console.log(number); } for (let i=0; i < numbers.length; i++) { console.log(numbers[i]); } // 둘이 같음. 10 20 30 40 50 출력. for in - 객체 내부에 접근합니다. - 모든 프로퍼티에 사..
[JavaScript] 배열(Array) , 대표적인 Array 내장함수
[JavaScript] 배열(Array) , 대표적인 Array 내장함수
2021.07.06배열(Array) - 배열은 여러 개의 항목들이 들어있는 리스트와 같습니다. - 배열은 [대괄호]를 이용하여 선언합니다. 배열 안에는 "문자열", 숫자, {객체} 등을 넣을 수 있습니다. 섞어서 넣는 것도 가능합니다. - 배열의 인덱스는 0부터 시작합니다. 이 인덱스를 활용하여 값을 조회, 수정, 추가 ,삭제 등을 할 수 있습니다. 대표적인 Array 내장함수 push() - 배열의 마지막에 새로운 요소를 추가한 후, 변경된 배열의 길이를 반환합니다. push()는 기존의 배열을 수정합니다. pop() - 배열의 마지막 요소를 제거한 후, 제거한 요소를 반환합니다. pop()은 기존의 배열을 수정합니다. - 맨 뒤에 원소를 바닥날 때까지 하나씩 추출합니다. 다 추출했으면 빈 배열을 반환합니다. unshi..
[JavaScript] 접근자 프로퍼티 (Getter / Setter)
[JavaScript] 접근자 프로퍼티 (Getter / Setter)
2021.07.05Getter / Setter 접근자 프로퍼티 접근자란 객체 지향 프로그래밍에서 객체가 가진 프로퍼티 값을 바깥에서 읽거나 쓸 수 있도록 제공하는 메서드를 말합니다. 객체의 프로퍼티를 객체 바깥에서 직접 조작하는 행위는 데이터의 유지 보수성을 해치는 주요한 원인입니다. 접근자 프로퍼티의 본질은 함수인데, 이 함수는 값을 획득(Get)하고 설정(Set) 하는 역할을 합니다. 접근자 프로퍼티는 'getter(획득자)'와 ‘setter(설정자)’ 메서드로 표현됩니다. 객체 리터럴 안에서 getter와 setter 메서드는 get과 set으로 나타낼 수 있습니다. Getter : 인수가 없는 함수로, 특정 값을 조회하고자 할 때 사용합니다. Setter : 인수가 하나인 함수로, 특정 값을 설정하고자 할 때 사용..
[Java] 다익스트라(Dijkstra) 알고리즘.
[Java] 다익스트라(Dijkstra) 알고리즘.
2021.05.28공부가 목적인 포스팅으로, 미흡한 점이 있다면 피드백 부탁드리겠습니다. 다익스트라로 불리는 이 알고리즘은 그래프의 가중치를 활용하여 최단 경로를 구하는 알고리즘입니다. 이 알고리즘은 어떤 한 정점(노드)에서 나머지 모든 정점(노드)에 대하여 최단 거리를 알려줍니다. 하지만 이때 단 하나의 음의 간선(음의 가중치)이 존재하면 안됩니다. 말 그대로 '최단 거리'를 구하고자 하는 것이기 때문에 음의 간선이 존재하면 최단 거리의 의미가 퇴색됩니다. 다익스트라 알고리즘은 그리디 알고리즘 + 다이나믹 프로그래밍(DP) 알고리즘을 합친 버전이라 볼 수 있습니다. 방문하지 않은 정점 중 가장 가중치가 적은 정점을 선택하는 방법(그리디) + 하나의 최단 거리를 구할 때 그 이전에 구한 최단 거리 정보를 이용하는 방법(D..
[Java] 이분 탐색(Binary Search)
[Java] 이분 탐색(Binary Search)
2021.05.15공부를 목적으로 진행하는 포스팅으로 만약 틀린 부분이 있거나 미흡한 점이 있으면 피드백 부탁드리겠습니다. 이분 탐색 혹은 이진 탐색이라 불리는 이 알고리즘은 간단하면서 굉장히 효율적인 알고리즘입니다. 이 알고리즘을 수행하기 위해서는 기본적으로 정렬이 되어있어야 합니다. 정렬된 자료구조 안에서 특정 값을 찾을 때 절반씩 나누어 값을 찾는다는 것이 핵심적인 아이디어입니다. 이분 탐색은 탐색을 진행할 때마다 탐색 범위를 반으로 줄입니다. 분할 정복(Divide Conquer)알고리즘과 유사한데 이분 탐색은 분할 정복 알고리즘의 한 예입니다. 만약 탐색 범위가 더이상 나눠지지 않는 1이 될 때의 탐색 횟수를 T라고 하고, 정렬된 배열의 길이가 N인 자료구조에서 이분 탐색을 했을 경우의 시간 복잡도를 표로 보여드..
[Java]투 포인터 / 슬라이딩 윈도우 알고리즘
[Java]투 포인터 / 슬라이딩 윈도우 알고리즘
2021.05.13비슷하면서도 다른 두 알고리즘을 설명하겠습니다. 공부를 목적으로 진행하는 포스팅으로 만약 틀린 부분이 있거나 미흡한 점이 있다면 피드백 부탁드리겠습니다. 투 포인터와 슬리이딩 윈도우. 이 두 알고리즘은 선형 공간(1차원 배열)을 2회 이상 반복적으로 탐색해야 할 경우 O(N^2) 이상 걸릴 시간 복잡도를 부분 배열을 활용하여 O(N)으로 줄일 수 있다는 공통점이 있습니다. 그렇다면 이 두 알고리즘의 차이점은 무엇일까요? 바로, 부분 배열 길이의 변화 여부입니다. 더 쉽게 말해서, 투 포인터 알고리즘은 부분 배열의 길이가 가변적이지만 슬리이딩 윈도우 알고리즘은 부분 배열의 길이가 고정적입니다. 투 포인터 투 포인터는 연속되고 길이가 가변적인 부분 배열들을 활용하여 특정 조건을 일치시키는 알고리즘입니다. 여..
[코테 후기] 21년 라인 AD 플랫폼 인턴 코딩 테스트 후기
[코테 후기] 21년 라인 AD 플랫폼 인턴 코딩 테스트 후기
2021.05.01프로그래머스에서 2시간 동안 3문제 봤습니다. 히든 테스트 케이스가 존재하여서 작성한 코드가 완전히 정답인지는 모릅니다. 난이도는 2번 문제가 효율성 문제라 백준 기준 골드 4~5 정도 되는거 같고 나머지는 실버1~3 정도 되는 것 같습니다. 1번 문제는 문자열(괄호), 스택을 활용한 문제였지만 제한 사항과 요구 사항이 많았습니다. 구현 자체가 어렵진 않지만 시간이 꽤 걸렸습니다. 2번 문제는 간단한 구현 문제로 볼 수 있지만 효율성이 포함되어있었습니다. 아마 이 문제에서 많이 갈릴듯 합니다. 3번 문제는 우선 순위 큐를 활용해서 해결할 수 있는 문제였습니다. 예상 컷 : 2.5솔 / 주관적인 견해입니다. 효율성 문제를 풀었다는 가정하에 2.5솔입니다. 비슷한 문제 유형입니다. www.acmicpc.ne..
[React] useReducer / 커스텀 Hook 만들기
[React] useReducer / 커스텀 Hook 만들기
2021.04.16useReducer - 기초 상태를 업데이트할 때에는 useState를 사용해서 새로운 상태를 설정해주었습니다. 하지만 useState 말고 또 다른 방법이 있습니다. useReducer Hook 함수입니다. 이 함수를 사용하면 컴포넌트의 상태 업데이트 로직을 컴포넌트에서 분리시킬 수 있습니다. 상태 업데이트 로직을 컴포넌트 바깥에 작성할 수 있고, 다른 파일에 작성 후 불러와서 사용할 수도 있습니다. reducer : 상태를 업데이트하는 함수입니다. 즉, 현재 상태와 액션 객체를 파라미터로 받아와서 새로운 상태를 반환해주는 함수입니다. function reducer(state, action) { // 새로운 상태를 만드는 로직 switch (action.type) { case 'INCREMENT' : ..