문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
코드
N = int(input())
if N == 1 :
print(1)
else:
last=7
gop=2
while last<N:
last+=(6*gop)
gop+=1
print(gop)
코드 설명

해당 문제의 그림을 보면
2-7까지는 2칸, 8-19까지는 3칸, 20부터 37까지는 4칸 ... 입니다.
보면 칸별로 마지막에 올 수 있는 숫자의 크기가 규칙적으로 증가하는 것을 알 수 있습니다.

해당 규칙을 토대로 반복문을 사용해서 N값이 칸별 마지막 숫자보다 작아질때, count한 칸 갯수를 반환하는 방법으로 문제를 풀었습니다.
if N == 1 :
print(1)
만약 N이 1일땐 무조건 1칸이므로 불필요하게 반복문을 실행하는 경우를 제거하기 위해 바로 1을 출력하도록 하였습니다.
else:
last=7
gop=2
while last<N:
last+=(6*gop)
gop+=1
print(gop)
마지막 값은 7부터 시작하고, 곱 또한 2부터 시작합니다.
미자막 값이 N보다 작을 때 까지만 반복문을 실행합니다.
반복문이 진행 될 때 마다 last에는 6*gop이 더해지고, gop의 값은 1씩 증가하게 됩니다.
만약 N이 last보다 작아지게 되면 반복문은 끝나고 gop값이 출력되게 됩니다.
관련 개념 정리
input
파이썬에서는 값을 사용자로부터 입력받을때 input함수를 사용합니다.
입력받은 값을 넣을 변수 이름 = input("띄울 메세지")
단! input함수는 입력받은 모든 내용을 문자열로 인식합니다. 따라서 입력받은 내용을 정수로 변환하려면
d = int(input())
와 같은 형태로 작성하거나, 나중에 변수를 사용할때
print(int(d)+2)
와 같이 int()로 감싸서 작성할 수 있습니다.
if문
<조건> 하면, <코드>를 실행하고 싶을때 쓸 수 있는것이 바로 if문입니다.
기본적인 형태는 아래와 같습니다.
if 조건문 1:
실행 코드 1 ...
elif 조건문 2:
실행 코드 2 ...
else:
실행 코드 3 ...
해석을 하자면, 조건문 1을 충족하면 실행 코드 1을 실행하고, 그게 아닌 조건문 2를 충족하면 실행 코드 2를 실행한다.
조건문 1과 조건문 2를 모두 충족하지 않으면 실행 코드 3을 실행한다. 입니다.
elif와 else는 필수는 아닙니다.
while문
while문은 for문과 같은 반복문입니다.
while 조건 :
실행할 코드
기본 구조는 위와 같고, 조건이 충족할때만 코드를 실행합니다.
whlile문 내에 break를 입력하면 whlie문을 빠져 나올 수 있고,
continue를 입력하면 while문의 처음으로 돌아갑니다.
산술 연산자
x+y | x 더하기 y |
x-y | x 빼기 y |
x*y | x 곱하기 y |
x/y | x 나누기 y |
x//y | x 나누기 y의 몫 |
x%y | x 나누기 y의 나머지 |
x**y | x의 y제곱 |
'코딩공부 > 알고리즘' 카테고리의 다른 글
[파이썬 풀이] 백준 1193.분수찾기 (0) | 2021.12.05 |
---|---|
[파이썬 풀이] 백준 1712. 손익분기점 (0) | 2021.12.05 |
[파이썬 풀이] 백준 2941.크로아티아 알파벳 (0) | 2021.12.05 |
[파이썬 풀이] 백준 5622.다이얼 (0) | 2021.12.05 |
[파이썬 풀이] 백준 2908.상수 (0) | 2021.12.05 |