반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이썬 정렬
- 사회조사분석사 2급 필기 공부방법
- 오미크론 자가격리
- 사회조사분석사 2급 기출문제집
- 사회조사분석사 2급 필기 시험시간
- 정렬
- 벽부수고이동하기 파이썬
- 공모주
- 사회조사분석사2급실기신청꿀팁
- 백준 알고리즘
- 백준
- 사회조사분석사 2급 공부방법
- 2월공모주
- 사회조사분석사 2급 독학
- 사회조사분석사 2급 필기 요약정리
- 사회조사분석사 2급
- DFS
- 공모주청약
- 시물레이션
- 사이킷런
- 현대엔지니어링 수요예측
- 공모주 청약
- 너비우선탐색
- 사회조사분석사2급실기신청
- 알고리즘
- 그리디
- 머신러닝
- 사회조사분석사 2급 접수
- 현대엔지니어링
- BFS
Archives
- Today
- Total
세상을 바꾸는 데이터
[백준 17427번] 약수의 합 2 - 파이썬 본문
문제 링크:
https://www.acmicpc.net/problem/17427
풀이 유형:
수학, 정수론, 그리디
★문제풀이 Point★
1. 시간 복잡도 파악
2. 최적의 해를 도출하기 위한 방법 생각
풀이 과정:
이 문제는 자연수 N이 주어졌을 때, g(N)을 구하는 문제이다.
필자는 처음에 O(N^2) 방식을 이용해 하나씩 비교하며 답을 구하려고 했다. 그러나 주어진 문제에서 N = 1,000,000이므로 O(N^2)은 시간 초과임이 분명했다. 따라서 O(N)으로 풀어야 하는 힌트를 문제에서 알려줬다.
이 문제를 어떻게 풀지 곰곰이 생각해보다가 다음과 같은 결론에 도달할 수 있었다.
예를 들어...
N=5일 때
1의 배수는 항상 1을 약수로 가진다.
2의 배수는 항상 2를 약수로 가진다.
3의 배수는 항상 3을 약수로 가진다.
4의 배수는 항상 4를 약수로 가진다.
5의 배수는 항상 5를 약수로 가진다.
이를 일반화시켜보면 N의 배수는 항상 N의 약수를 가진다.
즉, N이하의 자연수에서 K를 약수로 가지는 개수는 N/K임을 알 수 있다.
결론적으로 g(N) = 1 * N/1 + 2 * N/2 + 3 * N/3... N * N/1 식을 도출하였다.
이제 O(N)으로 코드를 구현할 수 있게 되었다.
for 구문을 1번만 반복해서 g(N)을 구해보자.
풀이 코드:
# 17427번 약수의 합 2
# 약수 구하기
n = int(input())
sum = 0
for i in range(1, n+1):
# i의 배수 개수 = i를 약수로 가지고 있는 수의 개수
sum += (n//i) * i
# 정답
print(sum)
728x90
반응형
'PS Study > BOJ(백준)' 카테고리의 다른 글
[백준 3085번] 사탕 게임 - 파이썬 (48) | 2022.03.08 |
---|---|
[백준 17144번] 미세먼지 안녕! - 파이썬 (33) | 2022.03.08 |
[백준 16954번] 움직이는 미로 탈출 - 파이썬 (31) | 2022.03.06 |
[백준 16235번] 나무 재태크 - 파이썬 (79) | 2022.03.04 |
[백준 16946번] 벽 부수고 이동하기 4 - 파이썬 (56) | 2022.03.01 |
Comments