- BOJ - 창문 닫기 (13909번)2024년 12월 04일
- 학페
- 작성자
- 2024.12.04.:01
https://www.acmicpc.net/problem/13909
처음에 보자마자 감은 안왔는데, 예시를 들어서 일정 범위까지 해보니 규칙을 발견했다.
n이 10이라고 해보자
창문을 열고 닫는 과정은 아래와 같다. (처음에는 모두 닫혀져 있음, 0으로 표시 , 열린 창문은 1로 표시)
\ 창문
\
학생 \1 번
창문2 번
창문3 번
창문4 번
창문5 번
창문6 번
창문7 번
창문8 번
창문9 번
창문10 번
창문1 번 학생 1 1 1 1 1 1 1 1 1 1 2 번 학생 1 0 1 0 1 0 1 0 1 0 3 번 학생 1 0 0 0 1 1 1 0 0 0 4 번 학생 1 0 0 1 1 1 1 1 0 0 5 번 학생 1 0 0 1 0 1 1 1 0 1 6 번 학생 1 0 0 1 0 0 1 1 0 1 7 번 학생 1 0 0 1 0 0 0 0 0 1 8 번 학생 1 0 0 1 0 0 0 0 0 1 9 번 학생 1 0 0 1 0 0 0 0 1 1 10 번 학생 1 0 0 1 0 0 0 0 1 0 10번 까지 결과를 보면 1번, 4번, 9번 만 열려있는 상태를 확인할 수 있다.
그렇다면 1부터 n까지 제곱수를 세어 출력하면 된다는 생각을 해볼 수 있다.
하지만 최악의 경우 n이 21억이 입력될 수 있으므로 반복조건을 신경써야 한다.
내가 제출했고 맞은 코드는 아래와 같다.
더보기#include <iostream> #include <stack> #include <string> #include <unordered_map> #include <vector> #include <algorithm> using namespace std; typedef long long int ll; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, cnt = 0; cin >> n; for (int i = 1; i*i <= n; i++) { cnt++; } cout << cnt; return 0; }
반복문의 반복조건을 i*i로 하여 시간 초과가 걸리지 않도록 하였다.
'Baekjoon Online Judge > C++' 카테고리의 다른 글
BOJ - 도키도키 간식드리미 (12789번) (0) 2024.12.06 BOJ - 스택 2 (28278번) (0) 2024.12.05 BOJ - 베르트랑 공준 (4948번) (0) 2024.12.03 BOJ - 골드바흐 파티션 (17103번) (0) 2024.12.02 BOJ - 가로수 (2485번) (0) 2024.12.01 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)