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] 카펫 - 완전탐색
프로그래머스 - 알고리즘 고득점 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
[JavaScript] 백준 2565번 문제 풀이
문제 풀이 처음에는 가장 많이 겹치는 순으로 제거하면서 겹치지 않는 선들만 남기려고 헀다. 하지만, 이 접근 방식은 DP와 거리가 있다고 생각을 했고 오히려 Greedy 알고리즘에 가깝다는 생각이 들었다. DP의 가장 중요한 특성 중 하나인 bottom-up을 고려하여 다시 생각을 해보는 시간을 가졌다. ⇒ 결과적으로 겹치지 않는 경우를 카운트 첫 번째 줄부터 마지막 줄까지 순차적으로 보면서 겹치는 경우를 고려하려고 했으나 쉽지 않았다. 처음에 입력을 받을 때, 랜덤한 순서로 받기 때문에 오름차순으로 정렬하여 우선 조금 더 쉽게 판단할 수 있도록 했다. (왼쪽을 기준으로 오름차순 정렬) 오름차순으로 정렬하여 가장 긴 수열(경우)를 찾는 것 = 가장 많이 겹치지 않는 경우
2023.09.23
no image
[JavaScript] 백준 1520번 문제 풀이
풀이를 생각해낸 과정 이 문제는 예전에 알고리즘 과제와 유사하다는 느낌을 받았다. (그래서 예전 알고리즘 수업 자료도 보면서 다시 공부를 했다.) 목적지에 도달을 하면 경우의 수에 1을 더하는 방식을 생각을 했었고, 그 과정에서 지나온 경로들을 모두 처리해줘야 했었다. 지나온 경로는 상하좌우를 따지면서 내리막길인 경우에 다른 표기를 해야한다고 생각했다. 그렇게 목적지에 도달하면 해당 경우의 수를 1씩 증가시키면서 답을 구하려고 했다. 오렌지 부분에서 고민을 많이 했고, 시간이 너무 지체되어서 참고를 하면서 구현을 했다. 풀이에 대한 설명 세부적인 내용은 주석을 통해서 간단하게 설명을 했고 핵심적인 내용 위주로 설명을 하면 각각의 노드에 왔을 때, 상하좌우를 따지면서 범위를 벗어났다면 continue를 하..
2023.09.22