백준 8393번 풀이

문제

초항이 1이고 공차가 1인 등차수열에 대해 n번째 항(입력값)까지의 합 구하기

풀이

사실 While쪽이 편하긴 하지만, for로도 안되지는 않는다. 둘 다 어쨌든 반복문이니까.

a=int(input())
sum=0
for i in range(1,a+1):
    sum=sum+i
    print(sum)

이 코드도 돌아는 가는데, 이대로 제출하면 출력 초과가 뜬다. 왜냐하면 저대로 하게 되면 반복문 돌아갈때마다 결과가 나오기 때문.

a=int(input())
sum=0
for i in range(1,a+1):
    sum=sum+i
print(sum)

그래서 print문을 for문 밖으로 빼 줘야 한다.

While문으로 하는 법

a=int(input())
i=1
sum=0
while i <= a:
    sum = sum + i
    i = i + 1
    print(sum)

While문은 어떤 조건을 만족할때까지 그냥 합을 구하면 된다. 저것도 최종 값만 보고싶으면 print문을 밖으로 빼자.

반복문 없이 하는 법

import math;
print('등차수열은 인접한 항의 차가 일정한 수열로, 인접한 항의 차를 공차라고 합니다. \n'
      '등차수열의 특정 항을 구하는 공식은 첫쨰항을 a_1, 공차를 d라고 할 때 \n'
      'a_n = a_1 + (n-1) * d입니다. \n'
      '또한 등차수열 n번째 항까지의 합 S_n은 다음과 같습니다. \n'
      'S_n = n * (2 * a_1) + (n - 1) * d / 2');
a=int(input('첫번째 항(a_1)을 입력해주세요. '));
d=int(input('공차(d)를 입력해주세요. '));
n=int(input('알고 싶은 항의 순서를 입력해주세요(예: 10번째 항=10) '));
a_n=a+((n-1)*d)
print(a_n);
S_n=n * ((2 * a) + (n - 1) * d) / 2;
print(S_n);

아, 이게 그 비베로 만들었던 등차수열 살린거다. (등비수열도 있다) 고로 출처따원 남기지 않는다. 왜죠 내가 만들었거

a=int(input())
# 등차수열의 합 Sn=n(a1+an)/2
S_n=a* ((2) + (a - 1) * 1) / 2;
print(S_n)

저 코드에서 S_n 변수에 할당된 코드를 가져와 초항과 공차를 1로 고정하면 된다.

참고로 등차수열의 합은

이거 아니면

이걸로 계산한다. 일반항 a_n은 a_1+(n-1)d.