728x90
그리디를 활용해서 해결하였다.
https://school.programmers.co.kr/learn/courses/30/lessons/12938
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
언뜻 보면 조합으로 탐색을 해야할 것 같지만 그리디로 해결할 수 있다.
S란 수를 N개로 나누면 우선 S를 N으로 나누어 준다.
9를 5개로 나눠보자.
9/5 -> 1.xxxx
{1,1,1,1,1} 여기서 9%5 는 4이다.
따라서 뒤에서부터 4개의 값에 1씩 더해주면 된다.
{1,2,2,2,2}
이 방법이 가능한 이유는 합을 만들 수 있는 조합중에서 곱이 크려면 모든 수가 최대한 중앙에 붙어있어야 하기때문
function solution(n, s) {
if(s/n < 1) return [-1]
const num = ~~(s/n)
const ret = Array(n).fill(num)
for (let i = 1 ; i <= s%n ; i++){
ret[n-i] += 1
}
return ret
}
약간 멋(?) 을 부리면 아래처럼도 할 수 있다.
const solution = (엄, 준) => 준/엄 >= 1 ? Array(엄).fill(~~(준/엄)).map((식,i) => i>=엄-준%엄 ? 식+1:식 ) :[-1]
728x90
'FrontEnd > 프로그래머스' 카테고리의 다른 글
[JS] 호텔 방 배정 (1) | 2024.02.28 |
---|---|
[JS] 도둑질 (1) | 2024.02.26 |
[JS] 가장 긴 팰린드롬 (0) | 2024.02.20 |
[JS] 거스름돈 (자세한 설명) (1) | 2024.02.18 |
[JS] 선입선출 스케줄링 (0) | 2024.02.16 |