티스토리 뷰
문제 링크
문제 풀이
print(int(int(input())**(1/2)))
*key point:
n = int(input())
window = [0 for _ in range(n)]
for i in range(n):
for j in range(i+1, n, i+1):
window[j-1] = 1 if window[j-1] == 0 else 0
print(sum(window))
문제를 그대로 푸려고 하면 위와 유사한 알고리즘을 떠올릴 수 있다. 하지만 이렇게 문제를 풀게 되면 메모리 초과가 뜨게 된다. 더 적은 메모리를 사용하기 위해서는 간단한 규칙을 찾아내야 한다.
어떤 수의 약수의 개수는 대부분 짝수이다.
ex) 10 의 약수는 1, 2, 5, 10인데 (1, 10), (2, 5) 로 짝을 지어줄 수 있음을 생각해보면 알 수 있다.
이를 통해 알 수 있는 것은 10번째 창문은 10의 약수인 1, 2, 5, 10번째 사람에 의해 열고 닫혀 결국 닫혀 있게 된다.
하지만 약수의 개수가 홀수인 수가 있다. 바로 제곱수이다.
ex) 25의 약수는 1, 5, 25로 3개 뿐이다.
제곱수번째 창문 만이 홀수번 만큼 열고 닫혀 마지막에 열려 있게 된다는 것이다.
따라서 주어진 문제는 n이하의 제곱수의 개수를 구하라는 것과 같다.
또한 제곱수의 개수는 가장 큰 제곱수의 제곱근과 같다.
'What I Learned > Algorithm Practice' 카테고리의 다른 글
[백준 - python] 24723번: 녹색거탑 (0) | 2023.07.28 |
---|---|
[백준 - python] 15439번: 베라의 패션 (0) | 2023.07.28 |
[백준 - python] 17103번: 골드바흐 파티션 (0) | 2023.07.24 |
[백준 - python] 7785번: 회사에 있는 사람 (0) | 2023.07.15 |
[백준 - python] 4134번: 다음 소수 (0) | 2023.07.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 25192
- 항해 플러스
- 코육대
- 24723
- Python
- 4134
- 17103
- SQL
- 25501
- 백준
- 10807
- 24313
- 24060
- 13909
- 26069
- 항해+
- 2903
- til
- 5597
- programmer
- 2587
- 1269
- 2053
- 20920
- 벡준
- Wil
- 2738
- Programmers
- MySQL
- 13241
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함