전체 글

프론트엔드, 백엔드, 앱, 웹 등을 다루는 Jukrap의 프로그래밍 및 개발 블로그. 사실 일상도 다룸.
개요문제 이름: LCS (9251)문제 링크: https://www.acmicpc.net/problem/9251플랫폼: 백준알고리즘 분류: DP소요 시간: 1시간 문제 전문설명입출력 문제 풀이해설이 문제는 두 문자열이 주어졌을 때, 두 문자열의 최장 공통 부분 수열(Longest Common Subsequence, LCS)의 길이를 찾는 문제입니다. LCS 문제는 대표적인 동적 계획법(Dynamic Programming, DP) 문제 중 하나입니다. 동적 계획법은 큰 문제를 작은 부분 문제로 나누어 풀이하는 알고리즘 설계 기법입니다. LCS 문제에서는 두 문자열의 부분 문제에 대한 솔루션을 통해 전체 문제의 솔루션을 구할 수 있습니다. 이 문제를 해결하기 위해서는 2차원 DP 테이블을 사용합니다. DP ..
개요문제 이름: 전화번호 목록 (5052) 문제 링크: https://www.acmicpc.net/problem/5052플랫폼: 백준알고리즘 분류: 정렬, 트리소요 시간: 1시간 30분 문제 전문설명입출력 문제 풀이해설이 문제는 주어진 전화번호 목록이 일관성을 유지하는지 판단하는 문제입니다. 전화번호 목록이 일관성을 유지하려면, 어떤 번호가 다른 번호의 접두어인 경우가 없어야 합니다. 문제를 해결하기 위해서는 다음과 같은 접근 방식을 사용할 수 있습니다.전화번호 목록을 정렬합니다.정렬을 하면 접두어 관계에 있는 번호들이 서로 인접하게 됩니다.정렬된 목록을 순회하면서 인접한 번호 쌍을 비교합니다.현재 번호가 다음 번호의 접두어인 경우, 목록은 일관성이 없는 것입니다. (NO 출력)현재 번호가 다음 번호의 ..
개요문제 이름: 트리 (1068) 문제 링크: https://www.acmicpc.net/problem/1068플랫폼: 프로그래머스/백준알고리즘 분류: 트리, DFS소요 시간: 1시간 30분 문제 전문설명 입출력 문제 풀이해설이 문제는 트리의 리프 노드 개수를 구하는 문제로, 깊이 우선 탐색(DFS) 알고리즘을 사용하여 해결할 수 있습니다. 주어진 트리에서 특정 노드를 삭제한 후 남은 트리의 리프 노드 개수를 세는 것이 목표입니다. 문제에서 요구하는 사항을 정리하면 다음과 같습니다.트리의 노드 개수 N이 주어진다. (N은 50 이하의 자연수)0번 노드부터 N-1번 노드까지 각 노드의 부모 노드 정보가 주어진다. 루트 노드는 -1로 표시된다.삭제할 노드 번호가 주어진다.주어진 트리에서 삭제할 노드를 제거하..
개요문제 이름: N번째 큰 수 (2075)문제 링크: https://www.acmicpc.net/problem/2075플랫폼: 백준알고리즘 분류: 정렬, 우선순위 큐소요 시간: 3시간 문제 전문설명제한사항메모리가 12 MB로 제한됨입출력 문제 풀이해설이 문제는 우선순위 큐를 사용하여 N x N 크기의 표에 채워진 N^2개의 수 중에서 N번째로 큰 수를 찾는 문제입니다. 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 특징이 있으며, 표에 채워진 수는 모두 다릅니다. 그러기에 주어진 표에서 각 줄을 읽어 들이면서 현재 읽은 숫자들 중에서 N개의 가장 큰 수만 우선순위 큐에 유지하면 됩니다. 여기서 우선순위 큐는 우선순위가 가장 높은 요소를 먼저 꺼내는 자료구조입니다. 이 문제에서는 숫자가 클수록 우선순위..
개요문제 이름: 평범한 배낭 (12865)문제 링크: https://www.acmicpc.net/problem/12865플랫폼: 백준알고리즘 분류: 다이나믹 프로그래밍, 배낭 문제소요 시간: 5시간 문제 전문설명입출력 문제 풀이해설이 문제는 동적 계획법(Dynamic Programming)을 사용하여 해결할 수 있는 대표적인 0-1 냅색 문제(Knapsack Problem) 혹은 배낭 문제 입니다. 냅색 문제는 제한된 용량의 가방(배낭)에 가치와 무게가 다른 물건들을 넣어 가방에 담을 수 있는 물건들의 가치합을 최대로 만드는 문제입니다. 0-1 냅색 문제는 각 물건을 가방에 담을지 안 담을지 두 가지 선택만 가능한 냅색 문제의 한 종류로, 동적 계획법의 대표적인 예시 문제 중 하나입니다. 이 문제에서 요..
개발 환경 구축의 배경과 필요성현대의 웹 브라우저 환경은 매우 다양하며, 각 브라우저마다 최신 자바스크립트 기능의 지원 범위가 상이하다. 크롬, 사파리, 파이어폭스, 엣지와 같은 에버그린 브라우저들은 ES6 사양을 약 98% 정도 지원하는 반면, IE 11의 ES6 지원율은 11%에 불과하다. 게다가 매년 새롭게 등장하는 ES6+ 버전과 아직 제안 단계에 있는 ES.NEXT 사양은 브라우저별로 지원 정도가 제각각이라는 문제가 있다. 대부분의 모던 프로젝트에서는 모듈 시스템을 사용하는데, ES6의 모듈 시스템(ESM)을 사용할 때 몇 가지 중요한 문제점이 존재한다. 첫째로, IE를 포함한 구형 브라우저들은 ESM을 전혀 지원하지 않는다. 둘째로, ESM을 사용하더라도 코드의 트랜스파일링이나 번들링 작업이 ..
개요문제 이름: 파도반 수열 (9461) 문제 링크: https://www.acmicpc.net/problem/9461플랫폼: 백준알고리즘 분류: 다이나믹 프로그래밍소요 시간: 50분 문제 전문설명입출력 문제 풀이해설이 문제는 다이나믹 프로그래밍이라고 불리는 동적 계획법을 사용하여 파도반 수열의 N번째 값을 구하는 문제입니다. 파도반 수열은 다음과 같은 점화식을 가집니다.P(N) = P(N-2) + P(N-3)N >= 4이는 N번째 파도반 수의 길이는 N-2번째 파도반 수의 길이와 N-3번째 파도반 수의 길이의 합과 같다는 것을 의미합니다.이 점화식을 활용하면 N번째 파도반 수의 길이를 계산할 수 있습니다. 동적 계획법의 핵심은 이전에 계산한 결과를 저장해 두고 필요할 때 그 값을 사용하는 것입니다. 이..
모듈의 일반적 의미모듈이란 애플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드 조각을 말한다. 일반적으로 모듈은 기능을 기준으로 파일 단위로 분리되며, 모듈이 성립하기 위해서는 자신만의 파일 스코프(모듈 스코프)를 가질 수 있어야 한다. 모듈의 특징은 다음과 같다.모듈의 자산(변수, 함수, 객체 등)은 기본적으로 비공개 상태다. 즉, 자신만의 파일 스코프를 갖는 모듈의 모든 자산은 캡슐화되어 다른 모듈에서 접근할 수 없다.모듈은 애플리케이션이나 다른 모듈에 의해 재사용되어야 의미가 있다. 따라서 모듈은 공개가 필요한 자산에 한정하여 명시적으로 선택적 공개가 가능하다. 이를 export라 한다.공개(export)된 모듈의 자산은 다른 모듈에서 재사용할 수 있다. 공개된 모듈의 자산을 사용하는 모듈을..
에러 처리의 필요성프로그래밍에서 에러가 발생하지 않는 코드를 작성하는 것은 사실상 불가능하다. 에러는 프로그램의 실행 중 언제든 발생할 수 있으며, 이러한 에러를 적절히 처리하지 않으면 프로그램은 강제로 종료된다.console.log('[Start]');foo(); // ReferenceError: foo is not defined// 에러 발생으로 인해 프로그램이 강제 종료된다console.log('[End]'); // 실행되지 않는다이러한 문제를 해결하기 위해 try...catch 문을 사용하면 발생한 에러에 대해 적절하게 대응할 수 있다. 이를 통해 프로그램이 강제 종료되는 것을 방지하고, 계속해서 코드를 실행시킬 수 있다.console.log('[Start]');try { foo();} ca..
제너레이터란?제너레이터는 ES6에서 도입된 특수한 형태의 함수로, 코드 블록의 실행을 일시 중지했다가 필요한 시점에 재개할 수 있는 독특한 기능을 제공한다. 일반적인 함수와는 달리, 제너레이터는 함수의 실행 흐름을 세밀하게 제어할 수 있는 다양한 특성을 가지고 있다. 함수 실행 제어권 양도제너레이터 함수의 가장 큰 특징은 함수의 실행 제어권을 함수 외부로 양도할 수 있다는 점이다. 일반 함수는 한번 실행이 시작되면 종료될 때까지 제어권이 함수 내부에 있으며, 함수 호출자는 실행에 개입할 수 없다. 반면 제너레이터 함수는 실행 중간에 제어권을 함수 호출자에게 양도할 수 있어, 함수 호출자가 실행을 일시 중지하거나 재개하는 것이 가능하다. 이러한 특성은 'yield' 키워드를 통해 구현되며, 이는 함수의 실..
개요문제 이름: 정수 삼각형 (1932)문제 링크: https://www.acmicpc.net/problem/1932플랫폼: 백준알고리즘 분류: 다이나믹 프로그래밍소요 시간: 1시간 문제 전문설명입출력 문제 풀이해설이 문제는 정수 삼각형에서 맨 위층부터 아래층까지 경로를 따라 내려오면서 수를 선택할 때, 선택된 수의 합이 최대가 되는 경로를 구하는 문제입니다. 이를 해결하기 위해 다이나믹 프로그래밍(DP) 알고리즘을 활용합니다. 다이나믹 프로그래밍은 큰 문제를 작은 부분 문제로 나누어 푸는 알고리즘으로, 이전에 계산한 부분 문제의 답을 메모리에 저장하여 다시 계산하지 않도록 합니다. 이 문제에서는 특정 층의 특정 위치에 도달했을 때 해당 위치까지의 선택된 수의 합이 최대인 값을 메모이제이션(Memoiza..
자바스크립트는 비동기 처리를 위한 패턴으로 전통적으로 콜백 함수를 사용해왔다. 그러나 이 콜백 패턴은 몇 가지 심각한 단점을 가지고 있는데, 가장 대표적인 것이 콜백 헬로 인한 코드 가독성 저하다. 또한 비동기 처리 중에 발생하는 에러를 처리하기가 매우 까다롭고, 여러 개의 비동기 작업을 동시에 혹은 순차적으로 처리하는 데에도 한계가 있었다. 이러한 문제들을 해결하기 위해 ES6에서는 프로미스(Promise)라는 새로운 패턴을 도입했다. 프로미스는 비동기 처리 시점을 명확하게 표현할 수 있게 해주며, 콜백 패턴이 가진 단점들을 효과적으로 보완했다. 특히 프로미스는 비동기 처리 상태와 결과를 객체로 관리하면서, 메서드 체이닝을 통한 콜백 헬 해결, 효과적인 에러 처리, 여러 비동기 처리의 조율 등을 가능하..
REST API 개요REST(REpresentational State Transfer)는 웹의 장점을 최대한 활용할 수 있는 아키텍처로서 2000년에 등장했다. HTTP/1.0과 1.1의 스펙 작성에 참여했고 아파치 HTTP 서버 프로젝트의 공동 설립자인 로이 필딩이 자신의 박사학위 논문에서 처음 소개했는데, 이는 당시 웹이 HTTP의 본래 장점을 제대로 활용하지 못하고 있는 상황을 개선하기 위해서였다. 로이 필딩은 HTTP 프로토콜의 의도에 맞게 설계하도록 유도하기 위해 REST를 제안했다. REST의 정의는 HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처다. REST의 기본 원칙을 성실히 지킨 서비스 디자인을 "RESTful"이라고 표현하는데, 이는 해당 서비스가 RE..
Ajax란?Ajax(Asynchronous JavaScript and XML)는 자바스크립트를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식이다. 이는 브라우저가 제공하는 Web API인 XMLHttpRequest 객체를 기반으로 동작하는데, 이 객체는 HTTP 비동기 통신을 위한 다양한 메서드와 프로퍼티들을 제공한다. XMLHttpRequest를 통해 개발자들은 서버와의 비동기 통신을 쉽게 구현할 수 있게 되었다. Ajax의 역사는 1999년으로 거슬러 올라간다. 마이크로소프트가 XMLHttpRequest를 처음 개발했을 당시에는 이 기술이 큰 주목을 받지 못했다. 하지만 2005년, 구글이 발표한 '구글 맵..
개요문제 이름: 내리막 길 (1520)문제 링크: https://www.acmicpc.net/problem/1520플랫폼: 백준알고리즘 분류: DFS소요 시간: 2시간 문제 전문설명입출력 문제 풀이해설이 문제는 DFS(깊이 우선 탐색) 알고리즘을 사용하여 주어진 지도에서 항상 내리막길로만 이동하는 경로의 개수를 구하는 문제입니다. DFS는 그래프나 트리 등의 자료구조를 탐색하는 알고리즘 중 하나로, 현재 정점에서 갈 수 있는 경로를 따라 깊이 우선으로 탐색을 진행합니다. 더 이상 갈 수 없는 정점에 도달하면 이전 정점으로 돌아와 다른 경로를 탐색하는 과정을 반복합니다. 이 문제에서는 현재 위치에서 상하좌우로 이동할 수 있으며, 이동한 지점의 높이가 현재보다 낮아야 합니다. 이러한 조건을 만족하는 경로를 ..
Jukrap
책돌이의 개발새발 라이프