본문 바로가기
BOJ/[BOJ] Python

백준 8393번 풀이

by Lv. 35 라이츄 2022. 8. 18.

문제

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

최근댓글

최근글

skin by © 2024 ttutta