일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 페이코 추천인
- 페이코 친구코드
- php 프로그래밍 입문 문제풀이
- SWEA
- programmers
- JAVA SPRING
- spring
- 플러터 개발환경 설정
- php 프로그래밍 입문
- Java
- 페이코 초대코드
- 스프링
- 한정 분기
- 백준
- C
- php
- php 프로그래밍 입문 3판
- Flutter
- php 프로그래밍 입문 예제
- 파이썬
- php 프로그래밍 입문 연습문제
- php 프로그래밍 입문 솔루션
- 최단 경로
- php 프로그래밍
- 페이코 추천인코드
- 자바 스프링
- 자바
- 배열
- 플러터
- C언어
Archives
- Today
- Total
11-22 01:43
ImJay
[파이썬/Python] 백준 2292번 벌집 본문
반응형
[파이썬/Python] 백준 2292번 벌집
문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
예제 입력
13
예제 출력
3
풀이
import sys
input = sys.stdin.readline
# 입력 받기
n = int(input())
# 초기 방 개수와 카운트 변수 초기화
room = 1 # 방 개수 초기화
cnt = 1 # 라인 수 초기화
# 방의 수는 이전 라인의 수에 6을 곱한 값 만큼 증가한다.
while n > room:
room += 6 * cnt # 해당 라인의 방 개수 계산
cnt += 1 # 라인 수 증가
print(cnt) # 최소 라인 수 출력
해당 코드의 시간 복잡도는 O(sqrt(n)) 이다.
while문에서 6을 곱해가며 새로운 라인의 방 개수를 계산하고, n보다 크거나 같아질 때까지 반복한다. 이 때, 라인 수 cnt는 1씩 증가하게 된다.
n보다 크거나 같은 방 개수가 나오기까지 걸리는 라인 수는 sqrt(n)를 넘지 않는다. 예를 들어, n이 50일 경우 1부터 시작해서 1, 7, 19, 37, 61까지 방 개수가 증가한다. 이 때 61은 50보다 큰 수 중에서 가장 작은 방 개수이므로, 5번의 루프를 돌면서 최종 라인 수 5를 구할 수 있다.
따라서, 이 코드의 시간 복잡도는 O(sqrt(n))이다.
참고자료
반응형
'Solved.ac - Python > CLASS 2' 카테고리의 다른 글
[파이썬/Python] 백준 2751번 수 정렬하기 2 (2) | 2023.05.08 |
---|---|
[파이썬/Python] 백준 2609번 최대공약수와 최소공배수 (2) | 2023.05.08 |
[파이썬/Python] 백준 2231번 분해합 (0) | 2023.05.07 |
[파이썬/Python] 백준 2164번 카드2 (0) | 2023.05.07 |
[파이썬/Python] 백준 2108번 통계학 (0) | 2023.05.06 |
Comments