• 티스토리 홈
  • 프로필사진
    학페
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
학페
  • 프로필사진
    학페
    • 분류 전체보기 (38)
      • Baekjoon Online Judge (30)
        • C++ (30)
      • Data structure & Algorithm (7)
      • Java (1)
        • Java Spring (0)
        • Spring 공부하며 정리하는 개념들 (1)
      • Open API (0)
      • 일상 이야기 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바