

문제를 살펴보면 창문이 열려있으면 닫고, 닫혀있으면 열면 되는 아주 간단한 문제처럼 보인다
처음에 든 생각은 약수, 배수 문제이긴 하지만 그냥 배수를 활용하여 리스트를 만들고 리스트에서
창문을 닫혀있다면 열고 열려있다면 닫는 코드를 작성하면 되지않을까 라는 생각으로
간단하게 코드를 작성하였다
n = int(input())
window = [0] * (n + 1)
def open_close(n, data):
for i in range(n, len(window), n):
if data[i] == 0:
data[i] = 1
else:
data[i] = 0
return data
for i in range(1, n + 1):
open_close(i, window)
print(window.count(1))
리스트에 window의 상태를 저장하고 이를 반대로 전환해주는 코드를 작성하였더니 메모리 초과가 발생하였다
문제를 다시 보니 문제의 메모리 제한이 64mb로 평소보다 작았고 그로 인해 발생한 문제인 것 같았다
약수, 배수, 소수와 큰 관련이 존재하는 것으로 추정하여 일단 window의 각 값에 따라 변화하는
상태를 확인해보았더니 규칙성이 발견되었다
1의 수가 각 제곱근의 수만큼 증가하는 것을 발견할 수 있었다
다시 말해 1~3 일때는 1, 4~8 일때는 2 와 같은 방식으로 확인할 수 있었다
그러면 정답 코드는 상당히 간단해진다
n = int(input())
print(int(n**(0.5)))

'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 10773 제로(실버 4) - Python (0) | 2024.11.24 |
|---|---|
| [Baekjoon]백준 28278 스택2(실버 4) - Python (0) | 2024.11.23 |
| [Baekjoon]백준 17103 골드바흐 파티션(실버 2) - Python (0) | 2024.11.21 |
| [Baekjoon]백준 4948 베트르랑 공준(실버 2) - Python (1) | 2024.11.20 |
| [Baekjoon]백준 1929 소수 구하기(실버 3) - Python (0) | 2024.11.19 |