일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스프링부트
- 스파크
- 문법
- 스프링
- 리눅스마스터 2급 2차
- SQL
- 자바
- SQL 문법
- 토이프로젝트
- 오라클
- 데이터베이스
- 엘라스틱서치
- 백준
- 프로그래머스
- 모의해킹
- 코딩테스트
- 빅데이터
- 프로그래밍
- 필기
- 해킹실습
- MySQL
- 기초
- 이클립스
- 데이터프로그래밍
- 알고리즘
- SQL 정리
- 위클리챌린지
- 파이썬
- 문제풀이
- c언어
- Today
- Total
개발일기
백준 2355번 파이썬 문제 풀이 : 시그마 본문
문제 링크 : https://www.acmicpc.net/problem/2355
2355번: 시그마
첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)
www.acmicpc.net
문제
두 정수 A와 B가 주어졌을 때, 두 정수 사이에 있는 수의 합을 구하는 프로그램을 작성하시오. 사이에 있는 수들은 A와 B도 포함한다.
입력
첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)
출력
첫째 줄에 답을 출력한다. (-2,147,483,648 ≤ 답 ≤ 2,147,483,647)
# 문제 풀이
굉장히 쉬운 문제이다.
입력 값 a, b 가 있으면 a 부터 b까지 반복하며 더해주면 된다
1
2
|
for i in range(a, b+1, 1):
answer += i
|
cs |
이렇게 제출하게 되면 시간 초과가 발생하게 되어 Pypy3로도 제출 해보았지만 똑같았다.
그래서 혹시 수학 공식중 1 ~ 10 까지의 합을 구할 때 10 * 11 / 2를 하여 55 라는 값을 구한 적이 있다.
해당 공식을 응용하여 문제를 풀어 보았다.
1
2
3
4
5
6
7
8
|
a, b = map(int, input().split())
answer = 0
if a - b < 0:
temp = b - a
else:
temp = a - b
print((temp * (temp + 1)) // 2 + (min(a, b) * (temp + 1)))
|
cs |
3과 10을 입력 받았다고 가정하면
3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 이된다. 이걸 정리하자면 3 + (3 + 1) + (3 + 2) + --- + (3 + 7)이 될 수 있다.
여기서 3을 7 + 1번 곱해준 후에 1부터 7까지의 수를 더하면 된다.
예제를 위 식에 대입해보면 temp 는 7이 될 것이고 min(a, b)는 3이 된다.
따라서 7 * 8 // 2를 통해 1 부터 7까지의 합을 구할 수 있고 3 * (7 + 1) 을 통해 3을 8번 더할 수 있다.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 2511번 파이썬 풀이 : 카드놀이 (0) | 2021.10.04 |
---|---|
백준 2476번 파이썬 풀이 : 주사위 게임 (0) | 2021.10.04 |
별찍기 파이썬 풀이 - 백준 2522, 2523번 (0) | 2021.10.03 |
백준 2501번 파이썬 풀이 : 약수 구하기 (0) | 2021.10.02 |
백준 1059번 파이썬 문제풀이 : 좋은 구간 (2) | 2021.10.01 |