최소제곱 직선

면접 대비

시간 제한1초메모리 제한128 MB

요약
평면 위의 점 n개가 주어질 때 최소 제곱 회귀 직선의 기울기와 절편을 구해 소수 셋째 자리까지 반올림해 출력한다.
난이도

쉬움10점 중 3점

유형
수학, 구현, 누적 합, 배열
정답자
아직 제출이 없습니다

문제

평면 위의 데이터 점들에 가장 잘 맞는 직선(line of best fit)을 찾는 것은 통계학과 수치해석의 기본 문제 중 하나이다.

평면 위에 nn개의 점 (x1,y1),(x2,y2),…,(xn,yn)(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)으로 이루어진 집합 PP가 주어진다. 직선 LL이 일차방정식 y=ax+by = ax + b로 정의될 때, PP에 대한 LL의 오차(error)를 각 점에서 직선까지의 세로 거리를 제곱하여 모두 더한 값으로 정의한다.

Error(L,P)=∑i=1n(yi−axi−b)2\text{Error}(L, P) = \sum_{i=1}^{n} (y_i - a x_i - b)^2

최소제곱법(least squares)은 이 오차를 최소로 만드는 직선 LL을 찾는 방법이다. 주어진 점 집합 PP에 대하여 오차를 최소화하는 직선 LL의 계수 aa와 bb를 구하는 프로그램을 작성하시오.

그림 1. 점들과 그에 대한 최소제곱 직선의 예.

입력

첫째 줄에 점의 개수 nn이 주어진다 (1≤n≤1,0001 \le n \le 1{,}000). 다음 nn개의 줄에는 각 점의 좌표 xix_i와 yiy_i가 공백으로 구분되어 주어진다 (∣xi∣≤106|x_i| \le 10^6, ∣yi∣≤106|y_i| \le 10^6). 모든 점의 xx좌표가 같지는 않음이 보장되며, 따라서 최소제곱 직선은 유일하게 결정된다.

출력

첫째 줄에 aa의 값을, 둘째 줄에 bb의 값을 출력한다. 두 값 모두 소수점 아래 셋째 자리까지 반올림하여 출력한다.

예제4

  1. 예제 1

    입력
    4
    1 6
    2 5
    3 7
    4 10
    
    예상 출력
    1.400
    3.500
    
  2. 예제 2

    입력
    2
    1 3
    3 7
    
    예상 출력
    2.000
    1.000
    
  3. 예제 3

    입력
    4
    0 1
    1 1
    2 4
    3 5
    
    예상 출력
    1.500
    0.500
    
  4. 예제 4

    입력
    5
    -2 -3
    -1 -1
    0 2
    1 3
    2 5
    
    예상 출력
    2.000
    1.200