JavaScript로 해결하는 활동 선택 문제 (Activity Selection Algorithm)
·
Programing/Algorithm
활동 선택 문제란?"활동 선택 문제"는 주어진 여러 활동 중에서 겹치지 않도록 가장 많은 활동을 선택하는 문제입니다. 각 활동은 "시작 시간"과 "종료 시간"으로 정의되며, 하나의 활동이 끝난 후에만 다음 활동을 시작할 수 있다는 조건이 있습니다.이 문제는 "탐욕 알고리즘(Greedy Algorithm)"을 활용하여 빠르고 효율적으로 해결할 수 있는 대표적인 스케줄링 문제입니다.문제 정의활동은 [start, end] 형태의 쌍으로 주어짐하나의 시간대에는 하나의 활동만 가능선택된 활동은 서로 겹치지 않아야 함목표: 선택할 수 있는 활동의 최대 개수를 구함실생활 예시회의실 예약 시간표 구성작업 스케줄 최적화인터뷰 일정 조정탐욕 알고리즘의 접근 방식핵심 전략"종료 시간이 빠른 순"으로 활동을 정렬한 후, 현재..
JavaScript로 해결하는 거스름돈 문제 (Greedy Algorithm)
·
Programing/Algorithm
거스름돈 문제란?"거스름돈 문제"는 주어진 금액을 가장 적은 개수의 동전으로 만들기 위한 전략을 찾는 문제입니다. 이 문제는 "탐욕 알고리즘(Greedy Algorithm)"의 대표적인 예시로 자주 사용되며, ATM 출금, 자동결제 시스템, 화폐 자동 교환기 등 다양한 실무 분야에서도 적용됩니다.문제 정의동전 단위가 담긴 배열 coins[]와 목표 금액 amount가 주어짐목표: 동전을 조합해 총합이 amount가 되도록 하고, 사용한 동전의 개수를 최소화동전은 무한정 사용할 수 있음예: coins = [500, 100, 50, 10], amount = 1260이면 정답은 동전 6개 (500x2, 100x2, 50x1, 10x1)탐욕 알고리즘의 접근 방식핵심 전략"큰 단위 우선"의 전략을 사용합니다. 가..
JavaScript로 해결하는 0/1 배낭 문제 (Knapsack Problem)
·
Programing/Algorithm
0/1 배낭 문제란?"0/1 배낭 문제"는 주어진 아이템들 중 일부를 선택해 제한된 무게 안에서 가치를 최대로 만드는 조합을 찾는 대표적인 "동적 계획법" 문제입니다. 각 아이템은 한 번만 선택할 수 있으며, 쪼갤 수 없습니다. 이 문제는 물류 최적화, 자원 분배, 게임 인벤토리 설계 등 다양한 분야에 활용됩니다.문제 조건 요약:각 아이템은 무게(weight)와 가치(value)를 가짐아이템은 쪼갤 수 없으며, 선택하거나 선택하지 않음배낭에는 정해진 "무게 제한"이 있음선택한 아이템들의 "총 무게"는 제한을 넘을 수 없음가능한 조합 중, "가치의 합이 최대"가 되도록 선택예: 무게가 [2, 3, 4, 5], 가치가 [3, 4, 5, 6]인 아이템과 capacity = 5가 주어졌을 때, 최대 가치는 7입..
JavaScript로 해결하는 동전 교환 문제 (Coin Change Algorithm)
·
Programing/Algorithm
동전 교환 문제란?"동전 교환 문제"는 주어진 동전의 종류와 금액이 있을 때, 해당 금액을 만들기 위한 최소 동전 개수를 구하는 대표적인 "동적 계획법(DP) 문제"입니다. 이 문제는 실생활에서도 다양한 곳에서 활용됩니다. 예를 들어 자동 결제 시스템, POS 단말기, 게임 내 재화 계산 등에서 최적의 동전 개수를 계산해야 할 때 사용됩니다.문제 조건동전의 종류: 정수 배열 형태 (예: [1, 2, 5])목표 금액: 양의 정수 (예: 11)목적: 해당 금액을 만들기 위한 "최소 동전 개수" 구하기불가능한 경우에는 -1을 반환합니다.자바스크립트로 구현하는 DP 기반 풀이function coinChange(coins, amount) { // "DP 배열"을 amount + 1 크기로 초기화 (모든 값은 무..
JavaScript로 이해하는 최적 경로 탐색 (최소 비용 경로, 다익스트라 알고리즘)
·
Programing/Algorithm
최적 경로 탐색이란?"최적 경로 탐색"은 출발 지점에서 도착 지점까지 가는 여러 경로 중에서 "가장 비용이 적은 경로"를 찾는 과정을 의미합니다. 이때의 비용은 거리, 시간, 금액 등 다양한 기준이 될 수 있습니다. 실생활에서는 다음과 같은 곳에서 활용됩니다:지도 앱: 최단 거리나 최소 소요 시간 경로 탐색네트워크 라우팅: 패킷이 지나가는 효율적인 경로 계산게임 개발: AI 캐릭터가 장애물을 피해 목표 지점까지 이동하는 경로이러한 문제들은 그래프 이론의 한 부분이며, 여러 알고리즘 중 "다익스트라 알고리즘(Dijkstra's Algorithm)"이 가장 널리 쓰입니다.다익스트라 알고리즘 개념 이해"다익스트라 알고리즘"은 가중치가 있는 그래프에서 한 정점으로부터 다른 모든 정점까지의 최소 비용 경로를 계산..
JavaScript로 구현하는 피보나치 수열 (Fibonacci Sequence)
·
Programing/Algorithm
피보나치 수열이란?"피보나치 수열"은 수학과 컴퓨터 과학에서 매우 널리 알려진 수열 중 하나입니다. 이 수열은 첫 번째 항이 0, 두 번째 항이 1로 시작하며, 이후의 항은 바로 앞의 두 항을 더한 값으로 정의됩니다. 즉, 세 번째 항부터는 F(n) = F(n - 1) + F(n - 2)의 관계를 가집니다.예를 들어 앞의 몇 항을 나열하면 다음과 같습니다:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610...이러한 규칙은 단순하면서도 수학적으로 아름다운 구조를 가지며, 황금비와도 연관되어 있는 특성이 있습니다. 또한, 프로그래밍 언어나 알고리즘 교육에서 "재귀 호출", "반복문", "동적 계획법" 등의 개념을 소개할 때 자주 사용되는 대표 예제이기..
리팩토링의 원칙과 사례 (Refactoring)
·
Programing
리팩토링이란 무엇인가?리팩토링(Refactoring)은 기존 코드의 외부 동작은 그대로 유지하면서 내부 구조를 개선하는 작업을 의미합니다. 즉, 기능은 동일하게 유지하면서 코드의 가독성, 유지보수성, 확장성을 높이는 것이 목적입니다.왜 리팩토링을 해야 할까?리팩토링은 단순히 코드 정리 이상의 가치를 제공합니다. 다음과 같은 이유에서 반드시 고려되어야 합니다:"코드의 중복 제거"와 같은 품질 향상을 통해 유지보수가 쉬워집니다."의미 있는 함수명"이나 구조 개선을 통해 협업이 수월해집니다.미래에 기능을 추가하거나 오류를 수정할 때 발생할 수 있는 문제를 줄입니다.테스트 자동화와 코드 리뷰가 용이해집니다.언제 리팩토링을 해야 하나?리팩토링의 타이밍은 다음과 같은 상황에서 특히 유효합니다:기능을 새로 추가하거나..
PHP와 JavaScript로 구현하는 게시물 등록일 상대 표기
·
Programing/PHP
상대 시간 표기가 필요한 이유웹사이트나 블로그에서 게시물의 등록일을 "2024-06-01 13:45"와 같은 절대 시간으로 표기하는 대신 "1시간 전", "3일 전"처럼 사람이 직관적으로 이해하기 쉬운 "상대 시간"으로 보여주는 방식은 사용자 경험(UX)을 크게 향상시킵니다.이러한 방식은 댓글, 알림, 블로그 포스트, 게시판 등 시간에 민감한 콘텐츠에 특히 유용하며, 사용자가 정보를 더 빠르게 해석할 수 있도록 돕습니다.상대 시간 변환 기준아래는 상대 시간 표기를 위한 변환 기준입니다:60초 이내 → "1분 전"1시간 이내 → "n분 전"하루 이내 → "n시간 전"한 달 이내 → "n일 전"1년 이내 → "n개월 전"1년 이상 → "n년 전"PHP로 구현하기PHP에서는 time() 값으로 저장된 타임스탬..
JavaScript로 구현하는 게임 데미지 단위 축약 (A ~ ZZZZ)
·
Programing/javascript
연관글2025.04.18 - [Programing/javascript] - 💰 숫자를 한글로 금액 단위로 표현2025.04.18 - [Programing/javascript] - 💻 숫자를 한글 숫자 표기로 변환2025.05.27 - [Programing/javascript] - JavaScript로 구현하는 금액의 영어 단위 변환 (Number to Words)2025.05.27 - [Programing/javascript] - JavaScript로 구현하는 금액 단축 표기 (K / M / B 표기법)2025.06.11 - [Programing] - 엑셀/스프레디시트에서 숫자를 한글로 표기하는 방법 총정리 (Excel to Hangul Conversion)왜 게임에서는 데미지 숫자를 축약해서 보여줄..
JavaScript로 구현하는 금액 단축 표기 (K / M / B 표기법)
·
Programing/javascript
연관글2025.04.18 - [Programing/javascript] - 💰 숫자를 한글로 금액 단위로 표현2025.04.18 - [Programing/javascript] - 💻 숫자를 한글 숫자 표기로 변환2025.05.27 - [Programing/javascript] - JavaScript로 구현하는 금액의 영어 단위 변환 (Number to Words)2025.05.27 - [Programing/javascript] - JavaScript로 구현하는 게임 데미지 단위 축약 (A ~ ZZZZ)2025.06.11 - [Programing] - 엑셀/스프레디시트에서 숫자를 한글로 표기하는 방법 총정리 (Excel to Hangul Conversion)금액 단축 표기의 필요성과 활용 사례"천 단위..