728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131701
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[나의 코드 ver 01]
const solution =(elements)=>{
let answer=[]
for(i=0;i<elements.length;i++){
let tempArr=elements.concat(elements.slice(0,i))// i값에 따라 새로운 배열을 만듦(원형 조합 계산 위함)
//i=0 =>[7,9,1,1,4]
//i=1 =>[7,9,1,1,4,7]
//i=2 =>[7,9,1,1,4,7,9]
//i=3 =>[7,9,1,1,4,7,9,1]
//i=4 =>[7,9,1,1,4,7,9,1,1]
for(j=0;j<tempArr.length-i;j++){
let sum=tempArr.slice(j,j+i+1).reduce((a,b)=>a+b)
//answer에 추가할 값은 tempArr를 j부터 i개만큼 더한 값임
console.log(tempArr.slice(j,i+j+1),j,i)
answer.push(sum)
}
}
let set = new Set(answer)
return set.size
}
테스트 통과! 사실 마지막 i의 경우에는 tempArr가 굳이 필요가 없다. 어차피 값은 전체 배열의 원소의 값이 중복해서 들어갈 것이기 때문이다. 따라서 아래와 같이 수정을 해주었다.
[나의 코드 ver 02]
const solution =(elements)=>{
let answer=[]
for(i=0;i<elements.length-1;i++){
let tempArr=elements.concat(elements.slice(0,i))// i값에 따라 새로운 배열을 만듦(원형 조합 계산 위함)
//i=0 =>[7,9,1,1,4]
//i=1 =>[7,9,1,1,4,7]
//i=2 =>[7,9,1,1,4,7,9]
//i=3 =>[7,9,1,1,4,7,9,1]
for(j=0;j<tempArr.length-i;j++){
let sum=tempArr.slice(j,j+i+1).reduce((a,b)=>a+b)
//answer에 추가할 값은 tempArr를 j부터 i개만큼 더한 값임
// console.log(tempArr.slice(j,i+j+1),j,i)
answer.push(sum)
}
}
answer.push((elements.reduce((a,b)=>a+b)))
let set = new Set(answer)
return set.size
}
i 를 element.length-1 까지만 반복문을 돌려주고 마지막에 전체 element의 합을 한 번 더 푸쉬하는 식으로 코드를 변경하였다. 테스트 결과 아주 미세하게! 시간이 단축되었다. 그러나 현재 코드 처럼 일단 다 푸시한 후에 중복을 나중에 제거하는 것 보다는 기존의 코드에 원소가 없는 경우에만 추가해주는 식으로 변경하면 더 좋은 코드가 될 것 같다.
728x90
'알고리즘' 카테고리의 다른 글
2. 정렬된 배열에서 특정 원소의 개수 구하기 (0) | 2023.04.30 |
---|---|
1. 이진 탐색 알고리즘 이해하기 (0) | 2023.04.30 |
그리디 문제풀이(3) (0) | 2023.04.23 |
그리디 문제풀이(2) (0) | 2023.04.23 |
그리디 문제 풀이 (1) (0) | 2023.04.23 |