Baekjoon 문제 풀기 (8393번 : 합)Python

8393번 : 합

1. 문제읽기


2. 제출 코드


while문을 써서 a가 0이 될때까지 반복시켜주고, a에서 1씩 빼주면서 반복문을 돌렸다.
a가 0이 되면 while문을 빠져나오면서 종료!

a = int(input())
total = 0
while a != 0:
    total += a
    a -= 1
print(total)

3. 공부할 것


다른 사람들의 코드를 보니 그냥 1부터 n까지 합을 구하는 공식을 써서 풀었더라..
검색해보니 파이썬으로 1부터 n까지의 합을 구하는 문제가 알고리즘의 기초중에 기초라고 한다.
예를 들어 1부터 10까지의 합 S 을 구한다고 했을 때, 아래와 같이 구할 수 있을 것이다.

 S =  1 +  2 +  3 +  4 +  5 +  6 +  7 +  8 +  9 + 10
 S = 10 +  9 +  8 +  7 +  6 +  5 +  4 +  3 +  2 +  1
-----------------------------------------------------
2S = 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11
   = 11 * 10
 S = (11 * 10)/2

제일 앞의 숫자 1과 제일 뒤의 숫자 10를 더한 것이 총 10번 반복되는 값이 2S이 된다.

1부터 n까지의 합을 구하는 공식

n * (n+1) / 2
a부터 b까지 n개의 합을 구하는 공식
n * (a+b) / 2

생각해보면 비효율적으로 1씩 더하는 것보다 생각을 더 해서 이렇게 공식을 만드는 게 알고리즘의 원리(?)라고 볼 수 있는 것 같다.
더 알고리즘 적으로 생각하고 풀어야겠다..

댓글남기기