본문 바로가기
백준

[백준] 13909번 : 창문 닫기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 11. 30.
728x90
반응형

 

 

13909번: 창문 닫기

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 창문을 열고 닫는 과정을 반복하며 최종적으로 열려있는 창문의 개수를 구하는 문제이다.

각 수를 돌아가며 창문을 열고 닫을 수 있지만 위 문제에서 창문의 최대 개수는 21억 개까지 가능하므로 모두 구하는 것은 효율적이지 못한 방법이다.

창문의 개수가 5개이면 최종적으로 1, 4번 창문이 열려있다.

창문의 개수가 10개이면 최종적으로 1, 4, 9번 창문이 열려있다.

창문의 개수가 20개이면 최종적으로 1, 4, 9, 16번 창문이 열려있다.

위 예시를 보면 창문 개수를 넘지 않는 수 중 제곱수 번호에 있는 창문들만 최종적으로 열려있게 된다는 것을 확인할 수 있다. 따라서 위 규칙을 적용해 최종적으로 열려있는 창문의 개수를 구하면 된다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 창문의 개수이자 사람의 수를 입력받는다. N = int(sys.stdin.readline())
  3. 최종적으로 열린 창문의 개수를 저장할 변수를 생성하고 초기화한다. num = 0
  4. 만약 창문의 개수에 1을 더한 값의 제곱이 창문의 개수보다 같거나 작으면 while ((num + 1) ** 2 <= N)
  5. 열려있는 창문의 개수를 늘린다. num += 1
  6. 최종적으로 열려있는 창문의 개수를 출력한다. print(num)
반응형

3. 소스코드

import sys

N = int(sys.stdin.readline())

num = 0
while ((num + 1) ** 2 <= N):
    num += 1

print(num)
728x90
반응형