-
[파이썬][백준]1789번-수들의 합코딩공부/백준알고리즘 2020. 7. 28. 16:41
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
문제 설명 : 만약에 6을 입력하면 1+2+3 (서로다른 자연수) 의 갯수이므로 3을 출력
7이면 1+2+3+1 < 은 안되니까 1+2+4 이므로 3을 출력
이런식이다
우리는 고등학교시절 수열에 대하여 배운적이 있을것이다.
▶1+2+3+4+...+n = {n*(n+1)}/2 라는 공식이 있지않은가?
이것을 이용하면 문제를 쉽게 풀 수 있다.
위의 문제 예제에서 200을 입력했다.
위의 공식에 n=20을 넣어보면, (20*21)/2 = 210 이다.
마찬가지로 n=19를 넣어보면, (19*20)/2 = 190 이다.
그러니까 이걸 직관적으로 설명해보자면 , 1+2+3+...+19 의 조합으로 210-1 (209) 까지 표현할 수가 있다는 말이다.
따라서 19가 출력되는것이다.
그렇다면 이제 느낌이 오실분들은 오셨을 것이다.
입력된 수가 (n*(n+1))/2보다 크고, ((n+1)*(n+2))/2 보다 작은 조건에서의 n값을 출력해주면 되는것이다.
s = int(input()) # 입력값을 s에 받는다 i=0 sum=0 while True: i+=1 sum1=(i*(i+1))/2 sum2=((i+1)*(i+2))/2 if sum1<=s and sum2>s: # 여기가 핵심 break # 조건이 맞아떨어지면 반복문을 중단하고 print(i) # 출력한다.
느낌있숴
'코딩공부 > 백준알고리즘' 카테고리의 다른 글
[파이썬][백준]4101번-크냐? (0) 2020.07.28 [파이썬][백준]2480번-주사위 세개 (0) 2020.07.28 [파이썬][백준]11653번-소인수분해 (0) 2020.07.28 [파이썬][백준]2935번-소음 (0) 2020.07.28 [파이썬][백준]5355번-화성 수학 (0) 2020.07.28