백준

백준 8393 합 파이썬

하카데미 2022. 2. 16. 08:30

1. 문제

  • n이 주어졌을 때, 1부터 n까지의 합을 구해라.

 

 

2. 풀이

  • 1) for문으로 누적합이 되도록 풀었다.
  • 2) n까지의 합은 1 + n을 n번 곱한 것의 절반이라고 생각할 수 있다.
N = int(input())
sum = 0
for num in range(N):
    x = num + 1
    sum += x
    
print(sum)

 

1)

정수 N을 받고,

누적할 변수 sum에 0으로 선언한다.

1부터 N을 더할 것이기 때문에 N번 반복한다.

처음 num에는 0이 들어가고 0 + 1 이 x에 담긴다.

sum += x는 sum = sum + x라는 의미이므로,

sum에는 0 + 1 이 담긴다.

그 다음 num은 1이 되고 1+1이 x에 담긴다.

sum에는 1 + 2 가 담긴다.

이런 식으로 N번 반복된다.

 

N = int(input())
print(N*(N+1)//2)

2)

만약 N에 5를 입력 받게 된다면,

5 * (5+1) // 2가 될 것이다.

1부터 5까지의 합은 1 + 2 + 3 + 4 + 5인데

1+ 5 = 2 + 4이므로

(1 + 5) * 2라고 표현할 수 있다.

여기에 + 3을 해주면  1부터 5까지의 합을 알 수 있다.

하지만,

N*(N+1)//2라는 식을 통해 알 수 있듯

5 * (5+1) // 2를 하게 되어도 1부터 5까지의 합을 알 수 있다.

 

 

3. 남의 버전 분석

  • (숏코딩) -~ 이런 걸 사용했다.
# 숏코딩
n = int(input())
print(n*-~n//2)

-~가 신기했는데,

a = 3
print(f'~a: {~a}')
print(f'-~a: {-~a}')

위의 코드를 실행하면,

~a는 -4, -~a는 4가 출력된다.

~는 not 연산자이고, c언어에서 보수 표현하던 방법이라고 하더라.

1의 보수, 2의 보수에 대해 알아야 한다고 한다.

지금은 모르니까 패스.

아무튼 이 보수 표현으로 1부터 n까지의 합을 나타낼 수 있다.

 

 

4. 출력 확인

  • -~ 연산 출력 결과

'백준' 카테고리의 다른 글

백준 2741 N찍기 파이썬  (0) 2022.10.27
백준 15552 빠른 A + B 파이썬  (0) 2022.02.17
백준 10950 a + b (3번째) 파이썬  (0) 2022.02.15
백준 2739 구구단 파이썬  (0) 2022.02.14
백준 2884 알람 시계 파이썬  (0) 2022.02.13