문제
https://www.acmicpc.net/problem/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.
'BOJ > [BOJ] Python' 카테고리의 다른 글
백준 2577번 풀이 (0) | 2022.08.18 |
---|---|
백준 2438, 2439번 문제 풀이 (0) | 2022.08.18 |
백준 10950번 풀이 (0) | 2022.08.18 |
백준 14681번 풀이 (0) | 2022.08.18 |
백준 2753번 풀이 (0) | 2022.08.18 |