알고리즘 풀이/백준
[백준 2292] 벌집
iwannawebfullstack
2021. 2. 19. 15:13
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
접근
1은 1칸
2~7은 2칸
8~19는 3칸
20~37은 4칸
이렇게 나열하여 규칙을 찾아보면
1 -> 7 -> 19 -> 37 에서 각 수가 증가하는 크기가 6 -> 12 ->18 이다.
따라서 처음에 1에서 6을 더하고 그 다음 12를 더하는 식으로 나아가서 찾아가야 할 칸이 그 범위에 속하면 몇 칸인지 출력한다.
구현
찾아야할 칸을 N에 입력받는다.
그리고 idx는 초기 1번을 나타내며 현재 1번에서 1번까지는 1칸이기 때문에 이를 room에 저장한다.
또한 flag는 처음에 6만큼 증가하여 그다음 12 -> 18로 6의 배수로 증가하기 때문에 flag에 증가하는 크기를 변화시켜준다.
최종해는 answer에 담긴다.
N = int(input())
idx = 1
room = 1
flag = 6
answer = 0
만약 N이 1이라면 바로 answer에 1을 담아서 출력한다.
그것이 아니라면 특정 칸을 갖는 방의 최댓값을 증가시켜준다. 계속해서 idx에 flag를 더해주고 지나가야하는 칸인 room도 증가시킨다.
이때 입력받은 N이 idx 안에 있다면 while문을 종료시킨다.
그렇지 않다면 증가시켜야 하는 크기인 flag를 6씩 증가시킨다.
if idx == N:
answer = room
else:
while True:
idx += flag
room += 1
if N <= idx:
break
flag += 6
answer = room
print(room)
전체 코드
N = int(input())
idx = 1
room = 1
flag = 6
answer = 0
if idx == N:
answer = room
else:
while True:
idx += flag
room += 1
if N <= idx:
break
flag += 6
answer = room
print(room)