문제 설명 : 다음에 올 숫자
등차수열 혹은 등비수열 common이 매개변수로 주어질 때,
마지막 원소 다음으로 올 숫자를 return 하는 solution함수??
제한사항
- 2 < common의 길이 < 1,000
- -1,000 < common의 원소 < 2,000
- common의 원소는 모두 정수입니다.
- 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
- 등비수열인 경우 공비는 0이 아닌 정수입니다.
입출력 예
common | result |
[1,2,3,4] | 5 |
[2,4,8] | 16 |
문제 풀이
접근)) 그냥 길이가 3이상이니까
2번째 원소 -1번째 원소 === 3번째 원소 - 2번째 원소 이면 등차수열
2번째 원소 / 1번째 원소 === 3번째 원소 / 2번째 원소 이면 등비수열
그다음 공차 구해주고 풀면 끝이겠지 생각해서 풀었다.
function solution(common) {
const last = common.length - 1
if(common[2]-common[1] === common[1]-common[0]) {
return (common[last]) + common[1] - common[0]
}
if((common[2] / common[1]) === (common[1] / common[0])) {
return (common[last]) * (common[2] / common[1])
}
}
=> 생각해보니 if를 두 번 쓸게 아니라 그냥 else 하고 return 해주면 되는 거였다.
어차피 등차 등비밖에 없었으니까....
문제 설명 : 연속된 수의 합
연속된 세 개의 정수를 더해 12가 되는 경우는 3,4,5이다. 두 정수 num과 total이 주어진다.
연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return 하는 solution함수??
제한사항
- 1≤ num ≤ 100
- 0 ≤ total ≤ 1000
- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
입출력 예
num | total | result |
3 | 12 | [3,4,5] |
5 | 15 | [1,2,3,4,5] |
4 | 14 | [2,3,4,5] |
5 | 5 | [-1,0,1,2,3] |
문제 풀이
접근1) for문 두 개 돌려서 num의 숫자만큼 배열하나 만들어서 연속된 수를 넣으면 될 것 같았다
그다음 연속된 수는 reduce로 합쳐서 합계 sum과 total을 비교해서 맞으면 retrun 해주고,
틀리면 sum과 answer를 초기화시켜서 다시 for문이 진행되도록 하게 했다.
function solution(num, total) {
var answer = [];
let sum = 0
for(let i = -100; i <= 100; i++) {
for(let j = i; j < i+num; j++){
answer.push(j)
}
sum = answer.reduce((a,b) => a+b)
if(sum === total){
return answer
}else{
sum = 0
answer=[]
}
}
return answer;
}
접근 2) 수열을 아시는 분이 있다면 식은 더 간단해진다.
등차수열의 첫항은 a 일반항은 a+(n-1) d (:n은 몇 번째 항인지에 대해 d는 공차)
L을 마지막항이라고 하면 등차수열의 합은 아래와 같아지는데 등차수열의 합을 이용해 첫항을 구하면 다음과 같다.
a = (2 * 합 / n - n + 1) / 2
그럼 첫항은 a이고 배열을 만들어서 하나씩 넣어주면 문제가 풀린다.
위 문제에 대입해 보면
a = (2 *total / num - num + 1) / 2가 된다.
function solution(num, total) {
const a = ((2 * total / num) - num + 1) / 2
return Array(num).fill(a).map((v,i) => v+i)
}
=> a로 채워진 배열을 만들어서 공차는 1이기 때문에
index 대로 값을 더해주면 오름차순으로 담아진 배열이 완성된다.
'Programmers' 카테고리의 다른 글
Programmers 문제 풀이 25 (0) | 2023.06.21 |
---|---|
Programmers 문제 풀이 24 (0) | 2023.06.20 |
Programmers 문제 풀이 22 (0) | 2023.06.18 |
Programmers 문제 풀이 21 (0) | 2023.05.22 |
Programmers 문제 풀이 20 (0) | 2023.05.21 |