본문 바로가기

전체 글185

[프로그래머스 lv2] 연속된 부분 수열의 합JS [투포인터] https://school.programmers.co.kr/learn/courses/30/lessons/178870 문제 요점 비내림차순이란 222, 2334 처럼 nlogN 풀이 투포인터 시작 포인터와 끝 포인터 두 가지를 사용하면서 범위를 넓혀나간다. 포인터 사이의 모든 원소의 합이 k이하면 끝 포인터 값을 늘리고 k초과면 시작 포인터 값을 늘리기 포인터 i, j 둘 다 0인덱스에서 시작하고, j가 sequence 배열 끝에 다다를 때까지 순회하면서 합sum을 계산한다. (j가 sequence를 넘어가면 더 이상 큰 부분수열의 합을 구할 수 없다.) 둘의 합 = k 이면 answer에 {시작 인덱스, 끝 인덱스, 끝 인덱스-시작인덱스}를 저장한다 가장 작은 수인 sequence[i]를 sum에서 빼고.. 2023. 10. 9.
[프로그래머스 lv2] 할인 행사 https://school.programmers.co.kr/learn/courses/30/lessons/131127 첫번째 풀이 (성공) 10개씩 나눈 뒤에 (주의 hash[a] = (hash[a] || 0) + 1); // 원하는 품목과 선택된 품목의 갯수 비교 for (const [key, value] of Object.entries(hash)) { if (!obj[key] || hash[key] !== obj[key]) { return false; } } return true; } for (let i = 0; i { obj[w] = number[i]; }) const window = {}; for (let i = 0; i < 10; i++) { const curr = discount[i]; wind.. 2023. 10. 9.
[스택] 뒤에 있는 큰 수 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/154539 가장 가까이 있는 => 스택 첫풀이 (시간초과) 배열 모든 원소를 -1로 초기화 뒤에서부터 numbers 순회 stack에 numbers의 뒷 부분부터 넣고 뒤에서부터 순회하면 가장가깝고 큰수를 찾는다 // 뒤에서부터 // curr -1); const stack = [numbers[numbers.length-1]]; for (let i = numbers.length-1; i >= 0 ; i--) { const.. 2023. 10. 8.
[스택, 그리디] 큰 수 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/42883# 첫풀이 (런타임에러 12번 케이스) 앞에서부터 k개를 제거해야하므로 앞에서부터 순회한다 앞의수(a)와 뒤의 수(b)를 비교해서 a 1 1->2 2->3 3->4 while (r.. 2023. 10. 8.
[프로그래머스 lv2] 택배상자 JS https://school.programmers.co.kr/learn/courses/30/lessons/131704 문제요점 1번부터 n번까지 증가하는 순으로 벨트에 놓여있다. 1번부터 순서대로 상자를 내릴 수 있다. 현재 실을 순서가 아니면 보조컨테이너에 보관 => 보조컨테이너는 마지막에 보관한 상자부터 꺼내게 된다 stack 보조를 사용해도 순서대로 싣지 못하면 더이상 상자를 싣지 않는다 실을 수 있는 상자 갯수 리턴 풀이 기존의 상자 순서대로 진행할 때, 다음상자와 보조컨테이너의 마지막 상자를 체크한다 O(nlogn) 상자를 1부터 n개까지 순회하며 현재 실어야하는 순서인지 확인한다 컨테이너벨트에 상자가 있으면 옮기고 보조컨테이너벨트(stack)의 마지막에 상자가 있으면 stack의 마지막 상자를 .. 2023. 10. 6.
[hash, 이진탐색 LV2] 시소 짝꿍 JS https://school.programmers.co.kr/learn/courses/30/lessons/152996 문제요점 4,3,2 축 2,3,4 시소짝꿍: 몸무게*거리가 같으면 몇쌍 짝꿍존재? (보충) 짝꿍끼리의 순서는 상관없다. (시소의 오른쪽, 왼쪽 중 어디에 앉는지는 구별하지 않음) 풀이 2,3,4를 통해 가능한 조합을 만든다 짝꿍끼리의 순서는 상관없으므로 왼쪽무게 중심으로 가능한 오른쪽 무게를 찾고 그 갯수를 더한다 왼쪽 중심으로 가능한 오른쪽무게는 왼쪽무게의 *1, *3/2, *2, *4/3이다 왼쪽이 2, 오른쪽 2일때 => 1:1 => 오른쪽은 왼쪽의 1배 왼쪽이 2, 오른쪽 3일때 => 2:3 => 오른쪽은 왼쪽의 3/2배 왼쪽이 2, 오른쪽 4일때 => 1:2 => 오른쪽은 왼쪽의 .. 2023. 10. 4.