백준 SILVER 2(수열의 합)
-
사용 언어 : javascript
-
해결 날짜 : 2023-01-25
-
해결 방법 :
- N은 0 이상인 정수이므로, 정수 리스트 중 첫 값을 x라 가정하면
- N = x + (x + 1) + (x + 2) + … + (x + L - 1)
- N = Lx + (1 + 2 + … + L - 1)
- N = Lx + L x (L - 1) / 2
- N = Lx + t
- x = (N - t) / L
- L은 2이상 100 이하의 정수이므로 L부터 x가 될 수 있는 값을 탐색
- (N - t) / L의 값이 정수이고 0 이상이면 종료
- N은 0 이상인 정수이므로, 정수 리스트 중 첫 값을 x라 가정하면
-
회고 :
- 맨날 프로그래머스로만 풀다가 js로 백준 푸는게 처음이라 입력 받는게 익숙하지 않아 애먹었다…
-
코드
const fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString(); solution(input); function solution(input) { const MAX_L = 100; const [N, L] = input.split(' '); let x = -1, t = -1, count = -1; for (let i = L; i <= MAX_L; i++) { const t = (i * (i - 1)) / 2; const candidateX = (N - t) / i; if (candidateX >= 0 && Number.isInteger(candidateX)) { x = candidateX; count = i; break; } } if (x === -1) { console.log(x); } else { const result = Array.from({ length: count }, (_, i) => x + i); console.log(result.join(' ')); } }
-
출처: 백준