백준 8393번 풀이

BOJ/[BOJ] Python 2022. 8. 18. 01:23
반응형

문제

https://www.acmicpc.net/problem/8393

 

8393번: 합

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

www.acmicpc.net

초항이 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
Lv. 36 라이츄

Lv. 36 라이츄

광고 매크로 없는 청정한 블로그를 위해 노력중입니다. 근데 나만 노력하는 것 같음… ㅡㅡ

방명록