합
문제는 다음과 같습니다.
입력조건으로 1<=n<=10,000이 주어지고 있고, n을 입력값으로 1부터 n까지 합을 구하는 프로그램을 만드는 문제입니다.
이 문제의 키 포인트는 누적값을 어떻게 계산할 것인지 입니다.
프로그래밍에서 가장 기본적이면서도 중요한 개념 중 하나가 반복문과 수학적 연산입니다.
이번 문제는 1부터 N까지의 합을 구하는 문제로, 프로그래밍 입문자가 연습하기 좋은 문제입니다.
이 문제를 해결하는 방법은 여러 가지가 있으며, 각각의 방법을 비교해 보면서 연산 속도와 효율성에 대해 알아보겠습니다.
다음은 저의 해답 코드 첫 번째 입니다.
n = int(input())
result = 0
for i in range(1,n+1):
result +=i #이 방식은 result = result + i와 같음
print(result)
result += i 는 복합 할당 연산자(Compound Assignment Operator) 를 사용한 표현입니다.
이것은 result = result + i 와 같은 의미이며, Python뿐만 아니라 대부분의 프로그래밍 언어에서 지원하는 개념입니다.
복합 할당 연산자 result +=i 의 형식을 모르신다면 이번 문제에서 익히는 것을 추천드립니다.
위 코드는 나중에 알게 될 시간복잡도 O(N)에 해당하는 코드입니다.
즉 입력값에 비례해서 코드의 reading시간이 걸리는 것 입니다.
N이 10억이면 10억 만큼 걸리죠 하지만 이는 시간제한이 만약 줄어든다면 틀리게 될 문제 입니다. 실제 백준 이후 문제에는 시간복잡도의 개념이 없으면 접근하지 못하는 문제들이죠.
다음은 O(1) 즉 어떤 입력값에도 상관없이 무조건 즉시 결과를 구 할 수 있는 방법이 있습니다.
수학적 공식을 활용한 방법 (O(1))
고전적인 수학 공식 가우스 덧셈 공식을 활용하면, 반복문 없이도 한 줄로 계산할 수 있습니다.
N = int(input())
print(N * (N + 1) // 2)
이번 문제의 정답 비율은 약 64%입니다.
이전 단계들과 달리 이번 단계에서는 대부분 문제의 정답 비율이 60%이상입니다.
이제 기초를 가지기보다는 백준에 익숙해져 입출력에 대한 개념이 넓어졌을 것입니다.
다음은 공개된 다른 사람의 오답 코드입니다.
이번 코드의 문제는 여러분이 직접 맞춰보시길 바랍니다 :)
코드를 디버깅 즉 코드의 오류를 찾는 것도 프로그래밍 능력을 향상 시키는데 있어 도움 됩니다.
'BaekJoon Reivew' 카테고리의 다른 글
단계별로 풀어보기 백준_25314번 (0) | 2025.02.07 |
---|---|
단계별로 풀어보기 백준_25304번 (0) | 2025.02.06 |
단계별로 풀어보기 백준_10950번 (0) | 2025.02.06 |
단계별로 풀어보기 백준_2739번 (0) | 2025.02.06 |
단계별로 풀어보기 백준_2480번 (0) | 2025.02.05 |