문제:
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다.
두 정수 num과 total이 주어집니다.
연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/120923
풀이보기
더보기
function solution(num, total) {
let result = [];
let middle = Math.floor(total / num);
for(let i = middle - 1; result.length < Math.round(num / 2) - 1; i--) {
result.unshift(i);
}
for(let i = middle; num > result.length; i++) {
result.push(i);
}
return result;
}
먼저 totla / num을 통해 중간 값을 찾아주고, 이 값을 통해 나머지 수를 구하면 된다.
먼저 중간 값 이전 수들을 삽입해줄 것이다.
중간 값 - 1부터 시작해서 i를 하나씩 감소시켜주고, result.length가 num의 반절이 될 때까지 반복시켜주면 된다.
여기서 Math.round(num/2) -1을 하는 이유는, num이 짝수인 경우를 고려해야하기 때문이다.
만약 num이 4고 total이 14라면 결과는 [2, 3, 4, 5]이다.
그럼 현재 코드에서는 middle에는 3이 들어가게 될텐데, 단순히 num의 절반 값까지 반복하게 되면 [1, 2, 3, 4]가 나오게 된다.
그렇기 때문에 홀수면 딱 나눠지지 않기 때문에 반올림을 해줘서 -1을 빼주면 되고,
짝수라면 딱 나눠떨어지기 때문에 -1을 해주면 원하는 만큼 반복할 수 있다.
또한 중간 값부터 작아지는 것이기 때문에 unshift를 통해 요소 앞에 추가될 수 있게 해준다.
그 다음 중간 값을 포함해서 result.length가 num과 같아질 때까지 push 해주면 끝이다!
'코딩 테스트' 카테고리의 다른 글
[프로그래머스 Level 0] 무작위로 K개의 수 뽑기 (0) | 2025.04.17 |
---|---|
[프로그래머스 Level 0] 공 던지기 (0) | 2025.04.16 |
[프로그래머스 Level 0] 직사각형 넓이 구하기 (0) | 2025.04.15 |
[프로그래머스 Level 0] 삼각형의 완성조건(2) (0) | 2025.04.14 |
[프로그래머스 Level 0] 문자열 여러 번 뒤집기 (0) | 2025.04.14 |