백준 13909 파이썬 한 줄 풀이

2024. 4. 28. 08:18코딩/백준 (단계별)

반응형

백준 19309 - 창문닫기

문제

https://www.acmicpc.net/problem/13909

 

13909번: 창문 닫기

서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다.  2번째 사람은 2의 배수 번째

www.acmicpc.net

13909번

답안 코드 :

import sys

N = int(sys.stdin.readline())
result = 0
x = 1
while x * x <= N:
    x += 1
    result += 1
print(result)

백준 / 문제 / 단계별로 풀어보기 / 15단계 약수, 배수와 소수 2

생각 :

# N = int(input())

# open_windows = [0] * N  # 초기에 모든 창문은 닫혀있음

# for person in range(1, N + 1):
#     for window in range(person - 1, N, person):
#         # 각 사람의 배수 번째 창문 상태 변경
#         open_windows[window] = 1 - open_windows[window]

# result = sum(open_windows)

# print(result)

# 위 코드 메모리 초과

# 그래서 코드의 메모리를 더 줄이기 위해 리스트를 사용하는 대신
# 변수를 사용하여 현재 열려 있는 창문의 개수를 체크

# open_windows 리스트 대신에 open_windows_count 변수를 사용
# 하다가 실패...


# 다시 문제 접근
# 주어진 숫자 N이 21억이란 숫자이므로, 단순 반복으론 해결 불가

# 생각해보면 각각 제곱 수에서 값이 변함.
# 이건 노가다 해서 작은 수에 대해서 규칙을 찾아봐야함
# 예를 들어 11122222333333344444444...

# 그럼 아예 색다르게 코드를 구현할 수 있다.

import sys

N = int(sys.stdin.readline())
result = 0
x = 1
while x * x <= N:
    x += 1
    result += 1
print(result)

# 다른 사람들의 풀이를 보니 아예 이 풀이를 한줄로

print(int(input()**0.5))

# 이렇게 풀어버림..
# 이게 막상보면 쉬운데 직접 구현할 때 이렇게 한번에 풀기는 쉽지않다.
반응형