[Javascript][Programmers] 정수 삼각형
·
🔢 Algorithm
문제삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾는 문제입니다. 이 문제는 동적 프로그래밍(DP)으로 해결하기에 적합합니다. 그 이유는 다음과 같습니다:삼각형의 꼭대기에서 특정 위치까지의 최대 합은 이전 위치들의 최대 합에 기반합니다.여러 경로가 같은 위치를 지나갈 수 있어 중복 계산이 발생합니다. 풀이처음에는 재귀를 활용한 Top-down 방식으로 접근했습니다. 시간복잡도: O(N²) (N: 삼각형의 높이)function solution(triangle) { const memo = {}; function dp(i, j) { // 삼각형의 마지막 행에 도달한 경우 if (i === triangle.length - 1) {..
[Javascript][Programmers] 신고 결과 받기
·
🔢 Algorithm
문제이 문제를 해결하기 위해서는 다음과 같은 핵심 로직이 필요합니다:각 사용자별 신고 목록 관리각 사용자별 신고당한 횟수 계산k번 이상 신고된 사용자 식별처리 결과 메일 수 계산 나의 풀이시간복잡도: O(n)function solution(id_list, report, k) { const mailCounts = new Map(); const reportMap = new Map(); for (const id of id_list) { mailCounts.set(id, 0); reportMap.set(id, new Set()); } // 신고 정보 처리 for (const r of report) { // 중복 제거 const [report..
[Javascript][Programmers] 베스트 앨범
·
🔢 Algorithm
문제이 문제를 해결하기 위해서는 다음과 같은 핵심 로직이 필요합니다:장르별 총 재생 횟수 계산장르 내 노래들의 재생 횟수 정렬장르 전체의 정렬각 노래의 고유번호가 존재한다는 점을 통해 해시 구조를 사용하면 효율적으로 문제를 해결할 수 있다고 생각할 수 있습니다. 나의 풀이처음에는 각 노래의 고유번호를 key로 매핑하는 방식으로 접근했습니다.시간복잡도: O(n log n)function solution(genres, plays) { const musics = new Map(); const genrePlays = new Map(); // 장르별 총 재생 횟수와 음악 정보 수집 for (let i = 0; i b[1] - a[1]) .map(([genre]) => genre..
[Javascript][Programmers] 오픈채팅방
·
🔢 Algorithm
문제이 문제의 핵심은 사용자가 닉네임을 변경할 때 해당 변경사항을 전체 대화 기록에 소급 적용하여, 모든 입장 및 퇴장 메시지에서 가장 최근의 닉네임이 일관되게 표시되도록 하는 것입니다.사용자 닉네임 변경 시 가장 직관적인 방법은 모든 이전 메시지를 순회하며 닉네임을 수정하는 것이지만, 이는 메시지마다 전체 기록을 다시 검토해야 해서 시간복잡도가 O(N²)이 되어 비효율적입니다. 나의 풀이문제를 자세히 분석해보면, 요구사항은 최종 메시지 출력에 집중되어 있고, 각 사용자마다 고유한 ID가 존재합니다. 이 특성을 활용하여 해시 구조를 사용하면 효율적으로 문제를 해결할 수 있습니다.시간복잡도: O(N)function solution(record) { const userNicknames = new Map..
[Javascript][Programmers] 할인 행사
·
🔢 Algorithm
문제이 문제의 핵심은 특정 상품들을 원하는 수량만큼 모두 할인 받을 수 있는 연속된 10일의 기간이 몇 번 있는지 계산하는 것입니다. 가장 먼저 떠올릴 수 있는 해결 방법은 매우 간단하고 직관적입니다. 할인 목록을 처음부터 끝까지 순회하면서, 매 시작점에서 10일 간의 할인 품목을 확인하는 것입니다. 이를 코드로 구현하면 다음과 같습니다:시간 복잡도: O(n * m * k) (n = discount 길이, m = want 길이, k = slice의 길이(10))// 메인 함수: 할인 적용 가능한 회원 등록 날짜 수를 계산function solution(want, number, discount) { let count = 0; // 조건을 만족하는 날짜 수를 저장할 변수 // discount 배..
[Javascript][Programmers] 완주하지 못한 선수
·
🔢 Algorithm
문제해당 문제를 해결하는 가장 간단한 방법은 하나씩 대조하며 완주하지 못한 사람을 찾는 것입니다. 완주자 목록에 있는 이름을 참가자 목록에서 하나씩 삭제하다보면 완주하지 못한 한 사람을 찾을 수 있게 됩니다. 가장 직관적인 방법은 두 배열을 정렬한 후 순서대로 비교하는 것입니다.시간복잡도: O(NlogN)function solutionWithSort(participant, completion) { participant.sort(); completion.sort(); for(let i = 0; i 이 방법은 간단하고 이해하기 쉽지만 대규모 데이터셋에서는 효율성이 떨어질 수 있습니다. 나의 풀이더 효율적인 방법으로 해시 맵을 사용할 수 있습니다.시간복잡도: O(N)function soluti..
[Javascript][Programmers] 다리를 지나는 트럭
·
🔢 Algorithm
문제이 문제는 트럭이 순차적으로 다리를 건너며, 다리 위에서의 트럭 상태(시간, 무게)를 관리해야 하는 점이 핵심입니다. 트럭을 순차적으로 처리해야하는 점을 고려하면 큐를 사용하는 것이 적합합니다. 나의 풀이function solution(bridge_length, weight, truck_weights) { let time = 0; // 경과 시간 let bridgeQueue = []; // 다리 위의 트럭 상태 관리 (트럭 무게와 남은 시간을 관리) let bridgeWeight = 0; // 현재 다리 위에 있는 트럭들의 무게 합 while (truck_weights.length > 0 || bridgeQueue.length > 0) { time++; ..
[Javascript][Programmers] 카드 뭉치
·
🔢 Algorithm
문제문제에는 다음과 같은 조건이 제시되어 있습니다.카드 뭉치에서 카드를 순서대로 사용합니다.카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.이러한 조건들을 고려해보면, 이 문제는 "선입선출(FIFO: First In, First Out)" 원칙을 따르고 있음을 알 수 있습니다. 이런 특성을 가장 잘 구현할 수 있는 자료구조는 큐(Queue)입니다.  나의 풀이시간복잡도: O(M) (cards의 길이: N, goal의 길이: M)function solution(cards1, cards2, goal) { let index1 = 0; let index2 = 0; for (let goalIndex = 0; goalIndex  다른 풀..
윤도기
'programmers' 태그의 글 목록
상단으로