백준 SILVER 2(수열의 합)

image

  • 사용 언어 : 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 이상이면 종료
  • 회고 :

    • 맨날 프로그래머스로만 풀다가 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(' '));
      }
    }
    
  • 출처: 백준