일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 딕셔너리
- DFS
- 프로그래머스스쿨
- 다이나믹 프로그래밍
- 프로그래머스
- 그리디 알고리즘
- 너비 우선 탐색
- lv2
- 구현
- JavaScript
- programmers
- 파이썬
- 알고리즘
- CSS
- 자바스크립트
- 자료구조
- 그래프이론
- 웹 프론트엔드
- 정렬
- DP
- 그래프 탐색
- 스택
- BFS
- 문자열
- 백준
- 브루트포스 알고리즘
- BASIC
- level2
- web
- 그래프 이론
Archives
- Today
- Total
DevLog:-)
[프로그래머스][JavaScript]연속 부분 수열 합의 개수 본문
반응형
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(e) {
let s = [];
let set = new Set(); //set 중복 안들어감
let k;
let sum =e.reduce((sum,cv)=>sum+cv,0); //reduce를 이용해 합을 구함
set.add(sum);
let len = e.length
//parseInt 나누기의 몫을 구함
for(let i = 1 ; i <= parseInt(len/2);i++){
for(let j=0; j<len;j++){
//slice특정 부분 추출 (문자열에서 substr과 비슷)
if(i+j <len){ k = (e.slice(j,(j+i)).reduce((sum,cv)=>sum+cv,0)); }
else{ k = (e.slice(j).concat(e.slice(0, j+i-len)).reduce((sum,cv)=>sum+cv,0)); }
set.add(k);
set.add(sum-k);
}
}
return set.size;
}
//set을 쓰기 전 코드 (findIndex를 이용해 중복 방지 -> 시간 초과 발생)
//if(s.findIndex((a)=>a==k)==-1){s.push(k);} //findIndex(함수) : 함수에 해당하는 값의 인덱스를 반환 없으면 -1반환
//if(s.findIndex((a)=>a==(sum-k))==-1){s.push(sum-k);}
✅checkpoint
Set(); | 유일한 값을 저장 |
parseInt(len/2) | 나누기 후 몫을 구하기 |
e.slice(1,3) | 배열에서 특정 구간 추출 (문자열에서 substr과 유사) |
arr1.concat(arr2, ···) | 배열arr1과 배열arr2 합침 |
arr.findIndex((a) => a==='a') | 배열 내에 a값의 최초 인덱스 반환(없으면 -1반환) |
[Set 객체] | |
Set(); | -삽입한 순서대로 요소를 순회할 수 있음 -유일한 값을 저장 (하나의 Set 내 값은 한 번만 나타날 수 있다.) |
let set = new Set(); | 객체 생성하기 |
.size | set 내에 원소의 개수 |
.clear(); | set 내에 모든 원소 제거 |
.delete(value) | set 내에 value 제거 후 성공 여부(boolean) return |
.has(value) | set 객체에 value가 있는지 여부(boolean) return |
(추가 코드 ) | |
set 반복하기 | for (let item of mySet) console.log(item); mySet.forEach(function(value) { console.log(value); }); |
Set 객체를 Array 객체로 변환 | let myArr = Array.from(mySet); |
Array를 Set으로 변환 | let mySet = new Set([1, 2, 3, 4]); |
교집합 | let intersection = new Set([...set1].filter(x => set2.has(x))); |
차집합 | let difference = new Set([...set1].filter(x => !set2.has(x))); |
[배열인지 확인하기] | |
Array.isArray(배열) | 배열이면 true, 아니면 false |
typeof(배열) | 'object' (배열은 'object'의 특수한 한 형태) |
[배열 내 검색하기] | |
find(함수) | 인자로 받은 판별 함수를 만족하는 첫 번째 요소를 반환 |
- arr.find(callback) - 반환 : value / 없을 땐 undefinded - callback(element, index, array) → 콜백 함수가 받는 인자(배열에서 받아옴) - 원하는 요소 찾으면 바로 메서드 종료 ex) arr =[1,2,3,4,5] let result = arr.find((element, index, arr) => element === 2); //2반환 let result2 = arr.find((e) => e > 4); //5반환 |
|
findIndex(함수) | 인자로 받은 판별 함수를 만족하는 첫 번째 식별자를 반환 |
-arr.findIndex(callback) -반환: index, 없다면 -1 -callback(element, index, array) -원하는 요소를 찾자마자 메서드를 종료 ex) arr =[1,2,3,4,5] let result = arr.findIndex((element, index, arr) => element === 2); //1반환 let result2 = arr.findIndex((e) => e > 4); //4반환 |
|
indexOf(value) |
인자로 요소를 받아 만족하는 첫 번째 식별자를 반환 |
-arr.indexOf(value, fromIndex) -반환 : index, 없다면 -1 -value 매개변수 : 배열에서 찾을 요소 -원하는 요소를 찾자마자 메서드를 종료함 ex) arr =[1,2,3,4,5] let result = arr.indexOf(1);//0반환 let result2 = arr.indexOf(3);//2반환 +lastIndex() 마지막 index리턴 |
|
includes(value) | 인자로 요소를 받아 포함 여부(boolean) 반환 |
-arr.includes(value) -반환 : true, false -object 체크시 같은 요소가 객체를 가리키는 지의 여부를 반환함 주의 ex) arr =[1,2,3,4,5] arr.includes(1); //true arr.includes(6); //false |
|
some(함수) | 조건에 맞는 값이 있는지 여부(boolean) 반환 |
-arr.some(callback) -반환: true, false ex) arr =[1,2,3,4,5] arr.some((e)=>e===2); //true반환 |
반응형
📖다른 풀이
function solution(elements) {
const circular = elements.concat(elements);
const set = new Set();
for (let i = 0; i < elements.length; i++) {
let sum = 0;
for (let j = 0; j < elements.length; j++) {
sum += circular[i + j];
set.add(sum);
}
}
return set.size;
}
-> 처음부터 리스트 + 리스트 붙임!!👍
function solution(elements) {
const set = new Set();
for (let i = 1; i <= elements.length; i++) {
const els = elements.concat(elements.slice(0, i));
for (let j = 0; j < elements.length; j++) {
set.add(els.slice(j, j + i).reduce((a, c) => a + c, 0));
}
}
return set.size;
}
->for를 돌 때마다 필요한 만큼 리스트를 추가함
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Javascript]숫자 변환하기 (0) | 2023.07.21 |
---|---|
[프로그래머스][Javascript]땅따먹기 (0) | 2023.07.20 |
[프로그래머스][JavaScript]최솟값 만들기 (0) | 2023.07.19 |
[프로그래머스][파이썬]추억점수 (0) | 2023.06.15 |
[프로그래머스][파이썬] 달리기 경주 (1) | 2023.06.14 |