반응형
문제
수 이어가기
https://www.acmicpc.net/problem/2635
풀이
설명
규칙에 맞춰 만들어지는 최대 개수의 수들을 구하는 문제입니다.
규칙은 다음과 같습니다.
- 첫 번째 수로 양의 정수가 주어집니다.
- 두 번째 수는 양의 정수 중에서 하나를 선택합니다.
- 세 번째부터 이후에 나오는 모든 수는 앞의 앞의 수에서 앞의 수를 빼서 만듭니다. 예를 들어, 세 번째 수는 첫 번째 수에서 두 번째 수를 뺀 것이고, 네 번째 수는 두 번째 수에서 세 번째 수를 뺀 것입니다.
- 음의 정수가 만들어지면, 이 음의 정수를 버리고 더 이상 수를 만들지 않습니다.
주어진 수를 N이라 할 때,
N의 절반에 해당하는 수부터 N까지 1씩 증가시키며 규칙에 맞춰 수열을 만들어 구합니다.
예시 코드
function solution() {
const N = Number(input());
let longestNums = [];
const startNum = Math.floor(N / 2) + 1;
for (let i = startNum; i <= N; i++) {
const nums = [N, i];
while (true) {
const len = nums.length;
const nextNum = nums[len - 2] - nums[len - 1];
if (nextNum < 0) break;
nums.push(nextNum);
}
if (nums.length > longestNums.length) longestNums = nums;
}
return longestNums.length + "\n" + longestNums.join(" ");
}
'Coding Problem' 카테고리의 다른 글
[BOJ 14468] 소가 길을 건너간 이유 2 (0) | 2025.04.01 |
---|---|
[BOJ 2785] 체인 (0) | 2025.03.24 |
[BOJ 1913] 달팽이 (0) | 2025.03.22 |
[BOJ 2622] 삼각형만들기 (0) | 2025.03.21 |
[BOJ 2659] 십자카드 문제 (0) | 2025.03.20 |