no image
[JavaScript] 전력망을 둘로 나누기 - 완전탐색
프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편프로그래머스 완전탐색 마지막편입니다.이 문제는 개인적으로 어렵다고 느껴서 두고두고 공부할 필요성을 느꼈습니다. 문제보러가기 문제 설명n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다.당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다.이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다.송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요. 제한 사항  문제 풀이전력망..
2024.11.06
no image
[JavaScript] 모음사전 - 완전탐색
프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편     문제풀이모음의 수는 정해져 있습니다. 그래서 vowels로 배열을 만들어서 쉽게 접근할 수 있었습니다.vowels는 순서대로 배치했습니다. 재귀함수를 이용해서 단어를 생성하고, 마지막에 word와 같은 단어의 index를 찾는 방향으로 구현하고자 했습니다. currentWord를 dictionary 배열에 push하면서 모든 경우의 단어를 넣었습니다.currentWord + vowels[i]를 인자로 넣어주면서 계속 단어를 생성했습니다. 마지막에 사전 순으로 정렬을 하고 indexOf() 메서드를 활용하여 word의 인덱스를 찾았습니다.function solution(word) { const vowels = ['A', 'E', 'I', 'O',..
2024.11.04
no image
[JavaScript] 피로도 - 완전탐색
프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다.이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다."최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며,"소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다.이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 ..
2024.10.27
no image
[JavaScript] JS Heap 과 가비지 컬렉터
회사에서 타이머를 개선하던 중, setInterval 호출 주기에 따른 메모리 비용을 분석하면서,JS Heap과 가비지 컬렉터에 대해서 공부하고 정리해보게 되었어요! 😎😎    1. 메모리 관리란 무엇인가?자바스크립트가 어떻게 메모리를 관리하는지 알아보려면, 먼저 메모리 관리가 무엇인지 이해해야 해요. 컴퓨터 프로그램은 데이터를 처리하기 위해 메모리라는 공간을 사용하고, 이 메모리에는 변수를 저장하거나 객체를 생성하는 등의 작업이 이루어집니다. 메모리를 효과적으로 관리하지 않으면, 프로그램의 성능이 떨어지거나, 메모리 누수가 발생할 수 있어요.자바스크립트는 자동 메모리 관리를 제공합니다. 즉, 프로그래머가 직접 메모리를 할당하거나 해제하지 않아도, 자바스크립트 엔진이 이를 자동으로 처리합니다. 그 과..
2024.10.23
no image
[JavaScript] 카펫 - 완전탐색
프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편 완전탐색 네 번째 문제입니다.   문제풀이function solution(brown, yellow) { const area = brown + yellow; let w = 0; let h = 3; const result = []; while(true) { w = Math.floor(area / h); if(w  이 코드는 카펫의 테두리 갈색(brown) 격자 수와 내부 노란색(yellow) 격자 수가 주어졌을 때, 전체 카펫의 가로(w)와 세로(h) 크기를 찾는 함수입니다.주요 로직은:  1. 전체 면적(area)을 구합니다 (brown + yellow)  2. 세로(h)는 ..
2024.10.18
no image
[JavaScript] 소수 찾기 - 완전탐색
프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편 완전탐색 세 번째 문제입니다.  function solution(numbers) { const numArr = numbers.split(''); const set = new Set(); // 소수인지 확인하는 로직 function isPrime(num) { if(num 0) set.add(Number(number)); for(let i = 0;i  이전 완전탐색 문제들과 달리 필요한 작업이 많았습니다.경우도 많기 때문에 재귀를 사용해서 구현했습니다. 1. 어떤 수를 사용했고, 사용하지 않았는지도 중요했습니다. used를 매개변수로 사용하여 사용여부를 판단했습니다. 2. for문..
2024.10.17
no image
[JavaScript] 모의고사 - 완전탐색
프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편 완전탐색 두 번째 문제입니다.  저의 코드는 복잡합니다..학생1, 학생2, 학생3의 정답찍기 패턴과 정답 갯수를 묶어서 다루고 싶었습니다. 1. repeat을 통해서 정답찍기 패턴을 반복해서 생성할 수 있었습니다.2. 정확하게 나눠떨어지지 않는다면 slice함수를 이용해서 추가해주었습니다.3. for문을 돌면서 변형된 문자열을 돌면서 학생별로 정답을 누적합합니다.4. 누적합의 최댓값을 구하고, 학생별로 result 배열에 추가해줍니다. // 나의 풀이function solution(answers) { let result = []; const len = answers.length; let student1 = ["12345", 0]; let stud..
2024.10.16
no image
[JavaScript] 최소직사각형 - 완전탐색
프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편 제한사항* sizes의 길이는 1 이상 10,000 이하입니다.* sizes의 원소는 [w, h] 형식입니다.* w는 명함의 가로 길이를 나타냅니다.* h는 명함의 세로 길이를 나타냅니다.* w와 h는 1 이상 1,000 이하인 자연수입니다.   function solution(sizes) { let maxX = 0; let maxY = 0; for (let i = 0; i b - a); maxX = Math.max(maxX, w); maxY = Math.max(maxY, h); } return maxX * maxY;} 1단계 문제로써 쉽게 이해하고 접근할 수 있었습니다.재귀형식을 굳이 사용하지 않고 O(n)의 시간복잡도로 풀 수 ..
2024.10.15
no image
[TIL] setInterval, 시간보장 그리고 타이머 - 2편
지난 시간까지 setInterval이 왜 시간 보장을 해주지 않는지, event loop에 대한 개념과 이로 인해 발생한 사이드 이펙트까지 알아봤어요!   이번 시간에는 timeRef(useRef)에 매초 +1 씩 더하는 로직을 어떻게 수정했는지, 시간 계산을 어떻게 하여 시간 보장이 되었는지 공유해볼게요! ☺️ 1. Date.now()를 활용한 시간보장JavaScript를 다뤄보신 분들이라면 모두 한 번쯤은 보신 Date.now()를 활용했어요! // MEMO :: 타이머 시작// 참고만 해주세요! const start = useCallback(async () => { if (intervalRef.current !== null) { return; } if (isCountUp)..
2024.10.15