분류 전체보기 189

📑 Do it! 코딩테스트-기초편. 3_자료구조

자료구조란? 자료구조는 데이터를 효율적으로 저ㅗ장, 접근, 수정하기 위한 그릇입니다. 코딩 테스트에서는 각 문제에 주어진 입력 데이터의 형태와 사용해야 하는 알고리즘에 따라 적절한 자료구조를 선정해 사용하는 것이 매우 중요하다. 3-1 배열과 리스트 기본 자료구조인 배열과 리스트는 비슷한 점도 많지만 다른 점도 많다. 두 자료구조의 특징을 정확하게 이해하고 문제가 요구하는 조건에 따라 적절하게 선택해 사용하는 것이 중요하다. 배열 배열은 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조이다. 배열의 값은 인덱스를 통해 참조할 수 있으며, 선언한 자료형의 값만 저장할 수 있다. 다음 그림은 배열을 나타낸 것이다. 그림을 보면 배열에 값1, 값2, ... 값6이 채워져 있고, 각 값은 0부터 5까지 인..

📑 [PL/SQL] 프로시저

1. 프로시저(Procedure)란? 데이버테이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리시스템에 저장한 것으로 영구 저장 모듈(Persistens Storage Module)이라고도 불린다. 테이블에서 데이터를 추출해 조작하고 그 결과를 다른 테이블에 다시 저장하거나 갱신하는 일련의 처리를 할 때 주로 프로시저를 사용한다. 보통 저장 프로시저를 프로시저라고 부르며, 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 즉, 특정 작업을 위한 쿼리들의 블록이다. 2. 장점 하나의 요청으로 여러 SQL문을 실행시킬 수 있다.(네트워크 부하를 줄일 수 있다.) 네트워크 소요시간을 감소시켜 성능이 개선된다. 여러 어플리케이션과 공유가 가능하다.(API처럼 제공가능) 기능 변경..

📑 nomadcoders_바닐라JS로 크롬앱 만들기_day2

- 2023.03.07 -> CSS in JavaScript 자바스크립트와 상호작용하기 위한 총 3가지의 스텝이 있다고 한다. Element 찾기 event를 listen하기 event에 반응(react)하기 이전 글에서 간단한 개념과 함께 1번과 2번을 정리했다. 오늘부터는 3번에 대해서 천천히 정리해보고자 한다. 간단하게 title을 눌렀을 때, title의 색상을 바꾸는 것이다. index.html Grab me 1! app.js const h1 = document.querySelector("div.hello:first-child h1"); function handleTitleClick(){ if(h1.style.color === 'blue'){ h1.style.color = "tomato"; }e..

📑 알고리즘 선택의 기준_시간복잡도

취업 준비기간에 알고리즘 학습용 책을 구매했었는데, 문제풀이 참고용으로만 사용하여 "진짜" 학습을 하지는 못한 것 같아서 다시 천천히 공부해보려 한다. 목표는 매일 한 챕터씩 학습하고 정리하는 것이다. 취업 이후 실무에서 작업을 하는 도중 마주치는 문제는 항상 단연코 '좀 더 빠르게', '메모리를 좀 더 효율적으로'일 것 같다. 나름 알고리즘을 열심히 풀어서 좀 한다고 생각했지만,,, 원리를 모르고 문제를 풀이하는 방법만 공부해왔던 것 같아서 다시 제대로 정리해보려 한다. 알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 말한다. 모든 개발자들이 바라는 효율적인 알고리즘이란 쉽게 말하면 입력값이 커짐에 따라 증가하는 연산 시간의 비율을 최소화하는 것이다. 일반적으로 수행시간은 1억 번의..

📑 nomadcoders_바닐라JS로 크롬앱 만들기_day1

참으로 오랜만에 블로그를 작성하기 시작하는 것 같다. 작년에 취업한 이래로 한 해가 바뀌면서 회고록을 작성하면서 다짐했지만 동기부여가 크게 되지 않았나 보다... 벌써 입사한 지 8개월 차가 되어 간다. 그동안 미뤄왔던 개인 공부를 솔찬히 시작하면서 블로그 작성을 시작해야겠다. 크게는 풀스택 개발자를 향하여 프런트 엔드는 자바스크립트를 시작으로 리액트까지 학습하며 어플을 만들어 볼 것이고, 백엔드는 김영한 선생님의 강의를 학습하면서 스프링부트와 JPA를 완전 정복하려 한다. 오늘이 시작이다. 너무 많은 것을 이루려 하지 말고 하루에 조금씩이라도 꾸준하게 진행하자. 무료로 제공되는 강의로 아주 높은 수준의 퀄리티를 자랑한다. 이전에 깃허브를 학습할 때 간간히 유튜브에서 봤던 형인데, 사이트에 방문하여 자신..

📑 2022년 회고록

도입 처음 블로그를 시작했을때가 생각이 난다. 이걸 굳이 해야하나 라는 생각과 함께 그냥 따로 공부만 하면 되지 라는 생각과 함께 블로그 시작을 미루고 미루었다. 옛날 사람은 아니지만 공책에 수기로 작성해서 정리하는것이 마음이 편하다고 생각하던 사람 중 1명이었다. 하지만 블로그에 내가 공부한 내용을 정리해두는 것이 나의 이력이 될 수 있다는 생각에 당찬 마음으로 시작하였지만,,,, 취업을 성공한 이후로 초심을 많이 잃었던 듯 싶다 . 졸업 2022년은 참으로 바쁘고 빠듯한 일정이었다. 수험생활을 끝마치고, 수능을 와장창 망해버린 나는 학점은행제로 학위를 따기로 결심을 하고 광운대학교 정보과학교육원에 입학했다. 그때까지만 해도 내가 이 직종에서 일을 하게 될 것이라고는 꿈에도 생각하지 못했었다... 막상..

📑 HTTP Request message

Request Header의 구조 파악 request line : 요청 형식 request headers request message header = line + headers Header와 Body는 개행으로 띄워서 구분하는 것이 약속 request message body(= payroad) Request Line GET -> 메소드 : 웹 브라우저와 웹 서버가 통신하는 방식 (데이터를 웹 서버로부터 가져올 때 사용. ex> URL) /1.html -> 웹 서버에게 요청하는 정보 HTTP/1.1 -> 웹 브라우저가 현재 사용하는 HTTP 프로토콜 버전 Request Headers host(필수) -> 인터넷에 존재하는 PC를 식별하는 개체 User-agent : 웹 브라우저의 다른 표현. 요청하는 웹 ..

📑 동적계획법_2294_동전2

동적계획법 주어진 문제를 여러 부분 문제들로 나누어 푼 다음, 그 결과들로 큰 문제를 푸는 알고리즘 어떤 문제를 풀기 위해 해결해야 하는 부분 문제의 개수가 k개라고 한다면, 전체적으로 풀어야하는 문제의 개수는 O(kN)개가 될 것이다. 이때 k가 충분히 무시할 수 있을 정도로 작은 수이고, 각가의 문제를 푸는데 걸리는 시간이 O(1)이라면, 문제의 결과를 저장할 O(N)의 메모리가 필요하며, O(N)만큼의 시간이 소요된다. 분할 정복 vs DP 분할하는 점은 동일하지만 전자는 겹치는 부분문제가 없지만, 후자는 있다는 것이다. 따라서 메모이제이션 기법으로 비효율적인 반복 연산을 줄인다. Greedy vs DP 모든 경우를 메모리까지 소비해가며 샅샅이 체크하는 점에서 전자보다 후자가 실행 시간은 길지만, ..

📑 동적계획법_9463_스티커

동적 계획법 주어진 문제를 여러 부분문제로 나누어 해결한 다음, 그 결과들로 주어진 큰 문제를 해결하는 것 F(N)을 구하기 위해서 풀어야 하는 부분 문제의 개수가 O(N)이라고 한다면, 이 답을 모두 저장할 메모리의 크기로 O(N)이 필요하며, 각각의 문제를 푸는 시간은 O(1)로, 전체 소요시간은 O(N)이다. 분할 정복 VS DP 위 두개 알고리즘의 가장 큰 차이점은 분할정복은 문제를 분할 했을 때, 겹치는 문제가 없다는 것이다. 하지만 DP는 겹치는 문제가 발생하기 때문에 필요 이상의 호출로 인한 시간 및 메모리 낭비 방지를 위해 메모이제이션을 한다. Greedy VS DP 모든 경우를 메모리가지 소비해가며 샅샅이 체크하는 점에서 실행시간이 그리디보다는 길지만, 더 폭 넓은 범위에서 경우의수를 따..

📑 동적계획법_1463_1로만들기

동적 계획법 주어진 문제를 여러 개의 부분 문제들로 나누어 푼 다음, 그 결과들로 주어진 큰 문제를 푸는 것 F(N)을 구하기 위해서 풀어야 하는 문제의 개수는 O(N)개 이고, 이 답을 모두 저장할 O(N)의 메모리가 필요하며, 각각의 문제를 푸는 데 걸리는 시간이 O(1)이므로 O(N)개의 문제를 푸는 데 O(N)의 시간이 든다. 분할 정복 VS DP 분할정복과의 차이점은 분할정복은 문제를 분할했을 때 생성되는 부분 문제들 중 겹치는 문제가 발생하지 않는다. 하지만 DP는 겹치는 문제가 발생하기 때문에 메모이제이션 기법이 필요하다. EX) 피보나치 -> F(N)[구해야할 문제] = F(N-1) [ 부분 문제 ] + F(N-2) [ 부분 문제 ] Greedy VS DP 모든 경우를 메모리까지 소비해가며..

📑 조합 Combination

오늘은 코딩테스트에 자주 등장하는 기본 개념으로 조합을 알아보자. 사실 조합으로만 푸는 문제가 나오진 않지만, 가장 빈출되는 동적 계획법을 풀이하기 위해선 조합에 대한 이해를 기반으로 점화식을 도출하는 연습은 필수라고 할 수 있다. 조합과 대비되는 개념으로는 순열이 있는데 이는 가볍게 개념만 인지하고 넘어가자 - 조합 : nCr = n!/(n-r)! -> n개의 수 중에서 r개의 수를 순서를 고려하여 나열할 경우의 수 - 순열 : nPr - n!/(n-r)!r! -> n개의 수 중에서 r개의 수를 순서를 고려하지 않고 뽑는 경우의 수 알고리즘에서는 위의 수학적 점화식을 코드ㄹ화하지 않고 점화식을 사용해 표현한다. 1. 특정 문제를 가정하기 먼저 가벼운 조합 문제를 가정해보자. 5개의 데이터에서 3개를 선..

📑 최소공통조상

트리 그래프에서 임의의 두 노드를 선택했을 때, 두 노드가 각각 자신을 포함해 거슬러 올라가면서 부모 노드를 탐색할 때, 처음 공통으로 만나게 되는 부모 노드를 최소 공통 조상(LCA : Lowest Common Ancestor)이라고 한다. 핵심 이론 - 배열 형성 > 높이 맞추기 > 찾기 1. 일반적인 최소 공통 조상 구하기 먼저 트리의 높이가 크지 않을 때 LCA를 구하는 방법을 예시와 함께 알아보자. 특정 트리에서 두 개의 노드를 임의로 정한 다음 각 노드의 깊이와 부모 노드를 찾아보자. 이때는 DFS or BFS를 이용해 탐색을 수행한다. 선택된 두 노드의 깊이가 다른 경우, 더 깊은 깊이의 노드를 해당 노드의 부모 노드로 1개씩 올려주면서 같은 깊이로 맞춰준다. 이때 만일 두 노드가 같아지면 ..